是否可以使用 Metapost 绘制点,使得每个点都沿着任意路径与其第一个邻居相隔相同的距离?
我不希望他们真正的距离是有规律的!相反,我希望他们保持距离沿路径测量平等。
我想说明匀速曲线运动有了它(和均匀变化稍后一个)。
例如,我可能想沿着这条线放置等距的点:
\documentclass[a4paper,10pt]{book}
\usepackage{luamplib}
\everymplib{input mpcolornames; beginfig(1);}
\everyendmplib{endfig;}
\begin{document}
\begin{mplibcode}
draw (0,0){right} .. (2cm,4cm){up} .. (4cm,5cm){right} .. (5cm,6cm){up} .. (8cm,7cm){right}
withpen pencircle scaled 2pt;
\end{mplibcode}
\end{document}
答案1
要遵循此解决方案,您可能需要查找“arclength”和“arctime”Metapost 手册,或者阅读下面我的解释。
\documentclass{standalone}
\usepackage{luamplib}
\everymplib{beginfig(1);}
\everyendmplib{endfig;}
\begin{document}
\begin{mplibcode}
path P;
P = (0,0){right} .. (2cm,4cm){up} .. (4cm,5cm){right} .. (5cm,6cm){up} .. (8cm,7cm){right};
draw P withpen pencircle scaled 2pt withcolor .7 white;
s = 5mm;
for t=0 step s until arclength P:
drawdot point arctime t of P of P withpen pencircle scaled 4pt withcolor red;
endfor
\end{mplibcode}
\end{document}
笔记
要使用路径,将其保存为变量会很有帮助。MP 有几种变量,,,
numeric
等等。如果您只是分配给变量,如,MP 会假定它是。因此,要保存,您必须先声明它:pair
path
string
s = 5mm;
numeric
path
path P; P = (0,0).....
然后您可以
draw
对其进行移动、旋转等等。您还可以使用 来找出它的长度
length P
。但是 MP 有一个相当奇怪的长度概念,Knuthtime
在 Metafont Book 中提出了这个概念;以 MP 时间单位表示的路径长度基本上与您用来定义它的点数相同,在当前示例中为 5。因此您可以这样做:\begin{mplibcode} path P; P = (0,0){right} .. (2cm,4cm){up} .. (4cm,5cm){right} .. (5cm,6cm){up} .. (8cm,7cm){right}; draw P withpen pencircle scaled 2pt withcolor .7 white; for t=0 upto length P: drawdot point t of P withpen pencircle scaled 4pt withcolor red; endfor \end{mplibcode}
生产
但正如您所看到的,这些点在这个特定路径中并不是均匀分布的,因为它们只出现在用于指定它的五个点上。您可以有分数时间,因此您可以将循环更改为
for t=0 step 1/4 until length P: drawdot point t of P withpen pencircle scaled 4pt withcolor red; endfor
并得到:
但这只会使
time
弯曲路径上的多变性变得更加明显。然而,MP 提供了另外两个运算符,它们可以为您提供绝对长度,而不是
time
。arclength P
返回路径的长度P
(以 PostScript 点为单位)arctime a of P
t
返回沿路径的时间,P
其中subpath (0,t) of P
等于。明白了吗?arclength
a
使用这些功能,您可以将循环的步长值设为实际长度,并用来
arctime
找到适当的time
alongP
。这样做的唯一缺点是语法变得相当繁琐。您不需要添加括号,但它们可能会使其更清晰:point (arctime t of P) of P
这样我们就得到了顶部所示的图表,其中每隔 5 毫米有一个点
P
。