Processing 贝塞尔曲线与圆的交点

Processing 贝塞尔曲线与圆的交点,processing,geometry,bezier,Processing,Geometry,Bezier,我的目标是创建以下内容(连接两个节点的定向箭头): 现在我有了这个(从一个节点的中心点到另一个节点的中心绘制的二次贝塞尔曲线): (注意,我在节点上方绘制了贝塞尔曲线,以显示其起点和终点) 我需要一种启发式或其他方法来计算贝塞尔曲线和节点(椭圆)周长之间的交点(上面红色圆圈)。 有了这个,我可以计算节点中心和交点之间的角度,以在正确的位置和角度绘制箭头线 作为最后手段,我可以使用二次Bézier公式生成沿曲线的点列表,也可以生成位于圆周长上的点列表,并使用彼此之间欧几里德距离最小的两个坐

我的目标是创建以下内容(连接两个节点的定向箭头):

现在我有了这个(从一个节点的中心点到另一个节点的中心绘制的二次贝塞尔曲线):

(注意,我在节点上方绘制了贝塞尔曲线,以显示其起点和终点)


我需要一种启发式或其他方法来计算贝塞尔曲线和节点(椭圆)周长之间的交点(上面红色圆圈)。

有了这个,我可以计算节点中心和交点之间的角度,以在正确的位置和角度绘制箭头线



作为最后手段,我可以使用二次Bézier公式生成沿曲线的点列表,也可以生成位于圆周长上的点列表,并使用彼此之间欧几里德距离最小的两个坐标之一作为交点。我希望任何答案都能利用几何学或其他更好的方法来解决它。

一般的问题是不容易解决的,因为求交方程是四次的(
(X(t)-Xc)²+(Y(t)-Yc)²=R²
),其中
X
Y
是二次多项式)。如果你手头有一个四次解算器,你可以使用它,但你必须选择正确的根

更合理的方法是将圆与控制点之间的线段相交。这是近似值,但如果圆半径很小,则可能无法察觉。


如果您想获得更高的精度,请从此点开始执行一到两次牛顿迭代。

这有帮助吗@怀疑论者,一位似乎关心直线相交(而不是贝塞尔曲线)的经济学家,是该问题的更一般的表示(它可能会找到两个或零个交点)。因为我知道在我提出的问题中,贝塞尔曲线和圆总是会相交一次,也许我的问题的解决方案会更简单。在应用数学中找到了这个:这里有一个JavaScript库,其中包含您正在寻找的功能(除其他外,它支持所有类型的形状),从中可以查看相关代码和用法示例:注意,您不必自己使用公式,因为处理提供了
bezierPoint()
函数。更多信息请访问。