检查两条三次Bézier曲线是否相交给出了http://cagd.cs.byu.edu/~557/text/ch7.pdf ..第一次听起来很好读…但这不是代码。
我想知道是否有人在任何常见的编程语言中实际实现了这个算法。我对一些Javascript代码(其他语言也可以)很感兴趣,这些代码可以使用两个三次bsamzier曲线,或者bsamzier曲线和一条直线来实现算法。
对于三次bsamizier曲线和直线,最简单的方法可能是使用第7.3节参数曲线和隐式曲线的相交。可以把这条直线写成a x+b y+c=0
。如果你用三次p(t)和q(t)来表示x和y坐标你可以把它们代入直线方程。这是t的三次函数你可以用你喜欢的寻根算法来解它。
类似的问题检查两个三次Bézier曲线是否相交有一些很好的答案。特别是第一个答案提到渐近线库,它有所有这些代码。您可以在http://sourceforge.net/p/asymptote/code/HEAD/tree/trunk/asymptote/path.cc上看到相关的源代码,其中包括查找三次方根的代码。