我想将两个点放在一条轨迹上,画成一条曲线。我设法用控件.所以我有这个图像:
使用以下代码:
\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
库
无需任何附加库
最简单的解决方案是使用内置定位选项,允许用midway
、at start
、at end
、near 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 手册中给出了更复杂的插图。