如何在 Tikz 中使用控件和 +、++ 符号?

如何在 Tikz 中使用控件和 +、++ 符号?

我想使用贝塞尔控制点绘制一条曲线路径,并带有以下符号

 <a> .. controls <b> and <c> ... <d>;

我还想指定坐标 b 和 c相对地彼此相对(b 相对 a,c 相对 b)。为此,我想使用“+”和/或“++”符号。我以为我理解了(阅读手册和另一篇类似的(旧)帖子这里),但我显然遗漏了一些东西。

这是我的做法:

\draw[->, thin] (alpha.east) .. controls ++(2.5cm,0) and ++(0,1cm) .. (beta.west);
\draw [red] (alpha.east) -- ++(2.5cm,0) -- ++(0,1cm) -- (beta.west);

第二行代码只是为了帮助我理解我在做什么。它给出的是:

在此处输入图片描述

因此,它从 alpha.east 开始,显然朝向位于其右侧 2.5 厘米处的点,这是可以的。但是,根据 Tikz 手册:“那么曲线确实会在 beta.west 处结束,并且曲线在点 beta.west 处的切线将经过第二个控制点。

这里我在 beta 附近的箭头指向下方,这显然表明曲线在 beta.west 处的切线才不是指向我的第二个控制点!

我理解错了什么吗?

多谢!

编辑:

感谢 daleif 的回答。因此,为了给出一个可行的示例,我在下面答案中改编了 daleif 给出的代码。代码如下:

\documentclass[tikz]{standalone}

\usetikzlibrary{decorations.pathreplacing}
\tikzset{%
  show curve controls/.style={
    postaction={
      decoration={
        show path construction,
        curveto code={
          \draw [blue] 
            (\tikzinputsegmentfirst) -- (\tikzinputsegmentsupporta)
            (\tikzinputsegmentlast) -- (\tikzinputsegmentsupportb);
          \fill [red, opacity=0.5] 
            (\tikzinputsegmentsupporta) circle [radius=.2ex]
            (\tikzinputsegmentsupportb) circle [radius=.2ex];
        }
      },
      decorate
}}}


\begin{document}

\begin{tikzpicture}
  \node (alpha) at (0,-2) {\includegraphics[width=.17\textwidth]{alpha.png}};
  \node (beta) at (7,0) {\includegraphics[width=.25\textwidth]{beta.png}};
  \draw [show curve controls]
  (alpha.east)
  .. controls ++(2.5cm,0) and ++ (0,1cm) ..
  (beta.west);
\end{tikzpicture}

\end{document}

以下是它的结果:

问题依然存在

所以,我发现我的第二个控制点的位置并不如我所愿,但我仍然不明白为什么。为什么它不位于第一个控制点上方 1cm 处?

再次感谢!

答案1

好的,找到了。

我没有在手册中查找到正确的位置。以下是解释(手册第 13.4.1 节):

“有一种特殊情况,相对坐标的解释不同。如果使用相对坐标作为贝塞尔曲线的控制点,则适用以下规则:首先,相对第一个控制点是相对于曲线的起点取的。其次,相对第二个控制点是相对于曲线的终点取的。第三,曲线的相对终点是相对于曲线的起点取的。”

答案2

评论太长了

顺便说一句:请始终提供自包含的完整最小示例,而不是像这样的片段。自包含的示例更易于测试。

下面是一个显示相对控制点的示例。我在这里使用极坐标。

\documentclass[tikz]{standalone}

\usetikzlibrary{decorations.pathreplacing}
\tikzset{%
  show curve controls/.style={
    postaction={
      decoration={
        show path construction,
        curveto code={
          \draw [blue] 
            (\tikzinputsegmentfirst) -- (\tikzinputsegmentsupporta)
            (\tikzinputsegmentlast) -- (\tikzinputsegmentsupportb);
          \fill [red, opacity=0.5] 
            (\tikzinputsegmentsupporta) circle [radius=.2ex]
            (\tikzinputsegmentsupportb) circle [radius=.2ex];
        }
      },
      decorate
}}}


\begin{document}

\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \coordinate (B) at (5,5);
  \draw [show curve controls]
  (A)
  .. controls ++(0:5) and ++ (0:5) ..
  (B)
  ;
\end{tikzpicture}



\end{document}

相关内容