无需任何附加库

无需任何附加库

我想将两个点放在一条轨迹上,画成一条曲线。我设法用控件.所以我有这个图像:

在此处输入图片描述

使用以下代码:

\begin{tikzpicture}
\draw (4,3) .. controls +(0,-2) and +(0.2,1) .. (5,0) ;

\draw (4,3) node[above]{$M$};
\draw (4,3) node{$\bullet$};
\draw (5,0) node[below]{$P$};
\draw (5,0) node{$\bullet$};
\end{tikzpicture}

但是,我希望 M 和 P 只是我的轨迹的点,而不是它的边界。因此,我希望它们在曲线上,但也许 M 在 y=2 处,P 在 y=1 处。有没有一种简单的方法可以做到这一点,即不逐毫米调整位置?

答案1

我的问题有多种解决方案,都是在以下帮助下发现的:保罗·加博利的评论。

我列出了三种解决方案,其中两种不需要任何额外的库,一种需要intersections

无需任何附加库

最简单的解决方案是使用内置定位选项,允许用midwayat startat endnear start等各种组合来标记节点very near start(我还没有找到完整的列表......)。

在这种情况下,代码

\begin{tikzpicture}
\draw (4,3) .. controls +(0,-2) and +(0.2,1) .. (5,0) 
    node[near end] {$\bullet$}
    node[near end, right] {$P$}
    node[very near start] {$\bullet$}
    node[very near start, right] {$M$};
\end{tikzpicture}

给了我

在此处输入图片描述

这些命令实际上只是更通用的选项的特定值,其pos值在 [0,1] 之间。您可以指定线上的任意位置。因此,我使用此代码获得了所需的结果:

\begin{tikzpicture}
\draw (4,3) .. controls +(0,-2) and +(0.2,1) .. (5,0) 
    node[pos=0.8] {$\bullet$}
    node[pos=0.8, right] {$P$}
    node[pos=0.1] {$\bullet$}
    node[pos=0.1, right] {$M$};
\end{tikzpicture}

在此处输入图片描述

使用 Intersections 库

因此首先需要添加\usetikzlibrary{intersections}

上述解决方案可以将点放置在任何地方,但不允许将其放置在特定坐标上。例如,如果我想要曲线与 y=2.5 线的交点,则需要以下代码:

\begin{tikzpicture}
\path[name path=y2] (4,2.5)--(5,2.5);
\path[name path=y1] (4,0.5)--(5,0.5);
\draw[name path=trajectory] (4,3) .. controls +(0,-2) and +(0.2,1) .. (5,0);

\fill [name intersections={of=y2 and trajectory}](intersection-1) circle (2pt) node[right] {$M$};
\fill [name intersections={of=y1 and trajectory}](intersection-1) circle (2pt) node[right] {$P$};
\end{tikzpicture}

重点是:您需要命名您想要相交的对象,并精确说明相交的数量(这里只有(intersection-1)一个)。

这部分任意路径的交点Tikz-pgf 手册中给出了更复杂的插图。

在此处输入图片描述

相关内容