为了将 svg 命令转换为 tikz,我尝试了以下两种情况,它们应该输出相同的曲线。根据 svg 规范,C 表示绝对坐标,c 表示相对坐标。
下面两个 svg 命令应该表示相同的形状:
M145,399 C219,75 371,92 460,323
M145,399 c74,-324 226,-307 315,-76
我尝试使用下面的 tikz 代码来生成相同的路径,但看起来我的理解是错误的!
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=0.1,y=0.1]
%M145,399 C219,75 371,92 460,323
\draw [yscale=-1] (145,399) .. controls (219,75) and (371,92) .. (460,323);
%M145,399 c74,-324 226,-307 315,-76
\draw [yscale=-1,red] (145,399) .. controls +(74,-324) and +(226,-307) .. +(315,-76);
\end{tikzpicture}
\end{document}
答案1
这可能不是很明显,但它在第 13.4.1 节中有记录指定相对坐标TikZ 手册(适用于版本 3.1.8b)。我引用一下:
有一种特殊情况,相对坐标的解释不同。如果使用相对坐标作为贝塞尔曲线的控制点,则适用以下规则:首先,相对第一个控制点是相对于曲线的起点取的。其次,相对于曲线的末端取相对的第二个控制点。第三,曲线的相对终点是相对于曲线的起点而言的。
重点是我。这意味着你的第二个相对控制点必须是(371-460, 92-323) = (-89,-231)
。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=0.1,y=0.1]
\draw [yscale=-1, very thick] (145,399) .. controls (219,75) and (371,92) .. (460,323);
\draw [yscale=-1,red, dashed] (145,399) .. controls +(74,-324) and +(-89,-231) .. +(315,-76);
\end{tikzpicture}
\end{document}