当我有两条路径时,是否可以定义一个点,例如:
beginfig(1);
u := 1cm;
path p[];
p0 := (1u,3u)--(2u,2u);
p1 := (2u,0)--(3u,2u);
for i=p0,p1: draw i; endfor;
endfig;
end
这样如果继续p0
的话p1
,想要的点就在那里。
我尝试过dir
* 命令,但我发现的所有示例似乎要么过于复杂,超出我的理解范围,要么在曲线定义中使用它们。
答案1
这就是你想要的吗?该whatever
命令表示沿着连接两个点(作为参数给出)的直线的任意点,以便z5 = whatever[z1,z2]=whatever[z3,z4];
求解结果方程并得出直线相交的点。
beginfig(1);
u := 1cm;
z1=(1u,3u);
z2=(2u,2u);
z3=(2u,0);
z4=(3u,2u);
draw z1--z2;
draw z3--z4;
z5 = whatever[z1,z2]=whatever[z3,z4];
dotlabel.lrt("z5",z5);
endfig;
end
答案2
beginfig(1);
u := 1cm;
path p[];
p0 := (1u,3u)..(.5u,2u)..(u,u);
p1 := (2u,0)--(3u,2u);
for i=p0,p1: draw i; endfor;
z1-(u,u)=100*direction infinity of p0;
z2-(u,u)=-100*direction infinity of p0;
p2 := z1--z2;
pickup pencircle scaled 4pt;
drawdot p1 intersectionpoint p2;
endfig;
end
direction
需要“时间”;因为p0
是一条开放路径,时间点infinity
是终点。因此,我计算切线上的两个点,并将切线定义为路径,找到它与路径的交点p1
。
这是您的原始图片:
beginfig(1);
u := 1cm;
path p[];
p0 := (1u,3u)--(2u,2u);
p1 := (2u,0)--(3u,2u);
for i=p0,p1: draw i; endfor;
z1-(2u,2u)=100*direction infinity of p0;
z2-(2u,2u)=-100*direction infinity of p0;
p2 := z1--z2;
pickup pencircle scaled 4pt;
drawdot p1 intersectionpoint p2;
endfig;
end