Формула, лежащая в основе кривой `to [out =, in =]` Тикза - PullRequest
7 голосов
/ 14 апреля 2020

В разделе 14.13 руководства Tikz они определяют параметр кривой c, такой как \draw $node1 to [out=90, in=180] $node2. Пример из PDF выглядит так: enter image description here

Мой вопрос: какая математическая формула стоит за этой кривой?

My Первое предположение заключалось в том, что это д-р aws 3-точечная кривая Безье, контрольная точка которой является точкой пересечения двух линий, определенных параметрами out= и in=, но она выглядит неправильно.

1 Ответ

6 голосов
/ 14 апреля 2020

Всегда можно попросить Ti k Z показать нам, как они работают. Одним из инструментов является украшение show path construction, см. С. 645 из pgfmanual v3.1.5

enter image description here

Я скопировал часть 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}

enter image description here

Итак, мы видим, что это всего лишь кривая Безье в кубе c, где контрольная точка выбирается в соответствии с наклоном. Вы можете изменить длину пунктирных линий, то есть расстояние контрольных точек от начала и цели, соответственно, изменяя разболтанность. Попробуйте, например,

\draw[how does TikZ do that] (0,0) to[out=90,in=180,looseness=1.5] (3,2); 

enter image description here

Можно изменить in looseness и out looseness отдельно. Они контролируют длину соответствующих пунктирных линий.

Технические подробности, то есть базовый код, можно найти в tikzlibrarytopaths.code.tex, библиотеке, которая загружается автоматически.

В общем случае, как следует из декорации show path construction, один путь является одним из следующих:

  1. перейти к,
  2. строка к,
  3. кривая к,
  4. путь закрытия.

Путь curve to является либо кубической c, либо квадратичной c кривой Безье, где квадратичны c можно рассматривать как особый случай кубического c. Возможная параметризация кубических кривых c Безье может быть найдена в уравнении (1) в разделе 46.2 Вычисление ограничивающей рамки на с. 581 pgfmanual v3.1.5.

enter image description here

...