获取MetaPost中的所有交点

获取MetaPost中的所有交点

在 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

实际上,人们会找到第一个交点,然后在交点之后立即切断两条路径中的一条,并继续寻找下一个交点。

相关内容