我不明白 asymptote 包中的路径时间概念。命令
times(p,x)
返回什么?它似乎没有返回路径 p 与直线 X=x 的交点的坐标。
如果我想要 asymptote 包中路径 p 与直线 X=x 的交点坐标,我该如何获取?根据 asymptote 手册,它应该返回路径的“路径时间”,无论它是什么。是否可以使用它找到该点的坐标?如果有人能用几个例子说明这个路径时间是多少,那就太好了。
答案1
返回的“时间”表示times(p,x)
沿路径相对于组成该路径的贝塞尔曲线的控制点的位置。
您可能想要改用intersectionpoints(path p, path q)
函数,其中path q
是一条垂直线。 intersectionpoints
返回交叉点坐标的数组。
以下示例代码显示了如何使用这两个函数。
unitsize(1inch);
path p1 = (0,-1){E}..{W}(0,1)--(0.4,1.5);
path p2 = ((0.5,-1)--(0.5,1));
pair[] points = intersectionpoints(p1, p2);
real[] pathtimes = times(p1, 0.5);
draw(p1, red);
draw(p2, blue);
dot(points, 3+black);
dot(p1, 3+green);
label("$y=$"+format("%#0.3f", points[0].y), points[0], SE);
label("$y=$"+format("%#0.3f", points[1].y), points[1], NE);
label("time$=$"+format("%#0.3f", pathtimes[0]), points[0], NE);
dot(Label("time$=0.5$"), point(p1,0.5), E, 3+orange);
dot(Label("time$=1.5$"), point(p1,1.5), E, 3+orange);
draw(subpath(p1, 0.6, 0.8), squarecap+3+green);
dot(point(p1, 0.7), 5+black);
编辑:这是对您关于路径时间概念的实用性的询问的回应。许多路径函数都采用或返回路径时间,所以我确信还有很多我还没有想到的用途。我在上面的代码中添加了两行。
使用路径时间和
subpath
函数,很容易绘制路径的一部分。在本例中,路径的 20% 从弧长 0.6 到 0.8。使用该
point
函数,可以很容易地标记沿弧长的位置。假设我们知道一个粒子以恒定速度沿弧线移动需要一秒钟,那么大黑点将显示 0.7 秒的位置。