我知道Greiner Hormann和Vatti的两个常用算法。它们处理多边形。我想在bezier路径上实现布尔运算。我想扩展这些算法来处理贝塞尔路径。但这是一个数值问题。贝塞尔路径剪辑的最佳方法是什么?(对于任意多边形(具有自相交),greiner-hormann算法的最佳修改是什么)
最佳答案
这是一个建议的算法。
使用四个控制点确定包围贝塞尔曲线的多边形。
测试多边形重叠以查看两条贝塞尔曲线是否有交点。如果没有重叠,我们就完成了,不需要剪辑。
如果多边形重叠,则使用一次Casteljau迭代将两条Bezier曲线一分为二。如果贝塞尔曲线的大小对于所需的精度太小,请停止递归。否则,使用步骤2递归地继续。
在分割贝塞尔曲线的过程中,请跟踪您的位置(值t),以便可以轻松确定剪裁贝塞尔曲线的4个控制点。
注意,在某一点上,贝塞尔曲线可以近似为直线。在这种情况下,重叠测试和拆分将更快。
在这个过程中,你应该以一条被剪切的贝塞尔曲线结束。你仍然需要确定哪一块在剪辑的哪一边。