如何找到两个三次贝塞尔曲线之间的交点

Swa*_*aul 3 math svg bezier line-intersection

我有两个立方贝塞尔曲线,

曲线1: - 第一个锚点(a1x,a1y),第一个控制点(c1x,c1y),第二个控制点(c2x,c2y),第二个锚点(a2x,a2y)

曲线2: - 第一个锚点(a3x,a3y),第一个控制点(c2x,c3y),第二个控制点(c4x,c4y),第二个锚点(a4x,a4y)

现在我想找到这两条贝塞尔曲线之间的交点;

怎么做?任何带算法的参考文件都会对我有帮助;

MBo*_*MBo 8

找到贝塞尔曲线交点有两种主要方法:

  1. 递归细分利用贝塞尔曲线的凸包属性,并通常检查其曲线段的边界框的交集.

书籍图形宝石IV中的代码,带有一些文字描述

  1. 两个三次方程组的数值解.它导致9阶的多项式方程,并且可以具有9个实根(两个S形曲线的情况).请注意,该解决方案在数值上不稳定.

JS代码交互式演示 我认为C++代码可能在Geometric Tools WildMagic库中.

  • "数值不稳定"意味着求解器有时可能会发现错误的根并错过真正的根(由于浮点数的精度有限和数值误差的累积) (5认同)