一条样条曲线与一条直线的交点

11

我正在尝试找到一种计算B样条曲线和直线交点的方法。目前为止,谷歌并没有提供太多帮助。

3个回答

8
我听说过的最有效算法叫做贝塞尔裁剪。这里是一篇关于曲线和样条交点的书籍章节(pdf)。

1
我已经成功地实现了这个来源的解决方案,特别是关注第7.3节,因为对于Bezier和B样条函数的多项式根查找非常容易。 - J Collins

8

一种纯数学方法:

  • 将样条和直线变换,使得直线位于X轴上。
  • 计算样条上Y = 0的点(取决于样条的阶数)。
  • 将这些点转换回原始坐标系。

如果您采用这种方法,我可以计算出必要的公式。


我喜欢这种方法,但是当样条的Y = 0时,你如何解决?除了评估样条线段并尝试逼近它之外,还有其他方法吗? - Herms
1
根据样条的阶数,已经存在求解样条方程的解决方案(至少对于三次样条而言)。这些公式往往变得非常笨拙,并且不能保证数值误差低。正如我所说:这是一种纯数学方法。 - Uwe Raabe

6

你最好的方法可能是将你的样条线分解成单独的线段,并测试每个线段是否与该线相交。样条线可能在一个点以上与该线相交,因此你还需要决定你感兴趣的是哪一个点。


我同意,这通常是推荐的方法。如果您迭代地进行此操作,并在找到交点时细化线段,则通常更有效,直到获得所需的分辨率。 - Kena
这样做会错过一些交点,特别是那些在样条曲线的弯曲部分相交两次而不与近似线段相交的交点。 - bukwyrm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接