我有两条立方贝塞尔曲线,
曲线1: - 第一个锚点(a1x,a1y),第一个控制点(c1x,c1y),第二个控制点(c2x,c2y),第二个锚点(a2x ,A2Y)
曲线2: - 第一个锚点(a3x,a3y),第一个控制点(c2x,c3y),第二个控制点(c4x,c4y),第二个锚点(a4x) ,a4y)
现在我想找到这两条贝塞尔曲线之间的交点;
怎么做? 任何带算法的参考文件都会对我有帮助;
答案 0 :(得分:8)
找到贝塞尔曲线交点有两种主要方法:
Code from book Graphics Gems IV with some textual description
JS code和interactive demonstration 我认为C ++代码可能在Geometric Tools WildMagic库中。
答案 1 :(得分:2)
三次贝塞尔曲线只是一个三次多项式方程。如果你想找到两个立方体相交的时候,那么你想找到两个立方体相等的时候,即
a1x3 + b1x2 + c1x + d1 = a2x3 + b2x2 + c2x + d2
然后,这与找到三次方程的根
相同(a1 - a2)x3 + (b1 - b2)x2 + (c1 - c2)x + (d1 - d2) = 0
像这样的立方方程可以通过分析方法求解,例如, Cardano's method。或者,可以使用诸如Newton–Raphson的方法来迭代到解决方案。但要注意,立方体最多可以有3个点,它们等于零。
答案 2 :(得分:0)
我的建议可能不是很有效但可行。您可以尝试比较两条曲线的点之间的距离,最近的两个点将是您的交叉“点”。
答案 3 :(得分:-1)
如果允许某种近似,则可以将贝塞尔曲线转换为许多小直线,然后计算从两条曲线生成的一对贝塞尔曲线之间的交点。这是一个更容易解决的问题,因为您只需要求解线性方程式,并可以为您的用例提供足够的性能和准确性。