在 MetaPost 上,我可以使用p intersectionpoint q
获取交叉点。但它只会返回一个点。我如何才能获取所有交叉点?
答案1
取自http://www.tug.org/pipermail/metapost/2008-October/001469.html进行了一些更改,使代码更加健壮和通用:
beginfig(1)
path p,q,r;
p := fullcircle xscaled 72 yscaled 36 shifted (10cm, 10cm);
q := fullcircle xscaled 36 yscaled 72 shifted (10cm, 10cm);
r := p;
draw p withcolor green;
draw q withcolor red;
n = 0;
forever:
r := r cutbefore q;
exitif length cuttings = 0;
r := subpath(epsilon, length r) of r;
z[n] = point 0 of r;
fill fullcircle scaled 2 shifted z[n] withcolor blue;
n := n + 1;
endfor;
endfig;
end
实际上,人们会找到第一个交点,然后在交点之后立即切断两条路径中的一条,并继续寻找下一个交点。