Всегда можно попросить Ti k Z показать нам, как они работают. Одним из инструментов является украшение show path construction
, см. С. 645 из pgfmanual v3.1.5
Я скопировал часть 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}
Итак, мы видим, что это всего лишь кривая Безье в кубе c, где контрольная точка выбирается в соответствии с наклоном. Вы можете изменить длину пунктирных линий, то есть расстояние контрольных точек от начала и цели, соответственно, изменяя разболтанность. Попробуйте, например,
\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
является либо кубической c, либо квадратичной c кривой Безье, где квадратичны c можно рассматривать как особый случай кубического c. Возможная параметризация кубических кривых c Безье может быть найдена в уравнении (1) в разделе 46.2 Вычисление ограничивающей рамки на с. 581 pgfmanual v3.1.5.