tikz 的 `to [out=, in=]` 曲线背后的公式

tikz 的 `to [out=, in=]` 曲线背后的公式

在第 14.13 节中Tikz 手册,它们定义了一个参数曲线函数,如\draw $node1 to [out=90, in=180] $node2。PDF 中的一个例子如下在此处输入图片描述

我的问题是:这条曲线背后隐藏着什么样的数学公式?

我的第一个猜测是它绘制一条三点贝塞尔曲线,其控制点是和out=参数定义的两条线的交叉点in=,但它似乎是错误的。

答案1

人们总是可以问 TiZ 向我们展示他们是如何工作的。一个工具是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 loosenessout looseness。它们控制相应虚线的长度。

技术细节,即底层代码,可以在tikzlibrarytopaths.code.tex自动加载的库中找到。

一般来说,正如show path construction装饰所暗示的那样,单一路径是以下之一:

  1. 搬去,
  2. 行至,
  3. 曲线至,
  4. 关闭路径。

路径curve to可以是三次贝塞尔曲线,也可以是二次贝塞尔曲线,其中二次贝塞尔曲线可以看作是三次贝塞尔曲线的特殊情况。三次贝塞尔曲线的可能参数化可以在第节的方程 (1) 中找到46.2 计算边界框在 pgfmanual v3.1.5 第 581 页上。

在此处输入图片描述

相关内容