我知道两种通用的算法,Greiner-Hormann和Vatti。它们适用于多边形。我想在贝塞尔路径上实现布尔运算。我想扩展这些算法以适用于贝塞尔路径。但这是一个数值问题。如何最好地剪裁贝塞尔路径?(以及如何最好地修改Greiner-Hormann算法以适用于任意多边形(具有自交))
我知道两种通用的算法,Greiner-Hormann和Vatti。它们适用于多边形。我想在贝塞尔路径上实现布尔运算。我想扩展这些算法以适用于贝塞尔路径。但这是一个数值问题。如何最好地剪裁贝塞尔路径?(以及如何最好地修改Greiner-Hormann算法以适用于任意多边形(具有自交))
使用四个控制点来确定一个多边形,该多边形包围了贝塞尔曲线。
测试多边形重叠,以查看两条贝塞尔曲线是否可能有交点。如果没有重叠,则无需剪裁,完成操作。
如果存在重叠,使用一个Casteljau迭代将两条贝塞尔曲线分成两部分。如果贝塞尔曲线的大小与所需精度相比太小,则停止递归。否则继续执行步骤2。
在分割贝塞尔曲线的过程中,要记录你所处的位置(值t),这样可以轻松确定被裁剪的贝塞尔曲线的4个控制点。
请注意,某些情况下,贝塞尔曲线可能会近似为一条直线。在这种情况下,重叠测试和分割将更快。
通过此过程,您应该得到一条被剪切的贝塞尔曲线的多个片段。您仍需要确定每个片段位于剪切的哪一侧。