在第 14.13 节中Tikz 手册,它们定义了一个参数曲线函数,如\draw $node1 to [out=90, in=180] $node2
。PDF 中的一个例子如下
我的问题是:这条曲线背后隐藏着什么样的数学公式?
我的第一个猜测是它绘制一条三点贝塞尔曲线,其控制点是和out=
参数定义的两条线的交叉点in=
,但它似乎是错误的。
答案1
人们总是可以问 Ti钾Z 向我们展示他们是如何工作的。一个工具是show path construction
装饰,请参阅 pgfmanual v3.1.5 第 645 页
我复制了该curveto
部分并根据问题进行了调整。
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{decorations.pathreplacing}
\tikzset{how does TikZ do that/.style={postaction=decorate,
decoration={show path construction,
moveto code={},
lineto code={},
curveto code={
\draw [green!75!black,->] (\tikzinputsegmentfirst) .. controls
(\tikzinputsegmentsupporta) and (\tikzinputsegmentsupportb) ..(\tikzinputsegmentlast);
\draw[red,dashed] (\tikzinputsegmentfirst) node[dot,label=above left:start]{}
-- (\tikzinputsegmentsupporta) node[dot,label=above left:first control]{};
\draw[red,dashed] (\tikzinputsegmentlast) node[dot,label=above right:target]{}
-- (\tikzinputsegmentsupportb) node[dot,label=above:second control]{};
},
closepath code={},
}},dot/.style={circle,inner sep=1.5pt,fill}}
\begin{document}
\begin{tikzpicture}
\draw[how does TikZ do that] (0,0) to[out=90,in=180] (3,2);
\end{tikzpicture}
\end{document}
因此,我们看到这只是一条三次贝塞尔曲线,其中控制点是根据斜率选择的。您可以通过更改松散度来更改虚线的长度,即控制点与起点和目标的距离。例如,尝试
\draw[how does TikZ do that] (0,0) to[out=90,in=180,looseness=1.5] (3,2);
可以分别更改in looseness
和out looseness
。它们控制相应虚线的长度。
技术细节,即底层代码,可以在tikzlibrarytopaths.code.tex
自动加载的库中找到。
一般来说,正如show path construction
装饰所暗示的那样,单一路径是以下之一:
- 搬去,
- 行至,
- 曲线至,
- 关闭路径。
路径curve to
可以是三次贝塞尔曲线,也可以是二次贝塞尔曲线,其中二次贝塞尔曲线可以看作是三次贝塞尔曲线的特殊情况。三次贝塞尔曲线的可能参数化可以在第节的方程 (1) 中找到46.2 计算边界框在 pgfmanual v3.1.5 第 581 页上。