hou*_*oft 5 c++ graphics spline
我在 3 维空间中有 N 个点。我需要用一条线加入他们。但是,如果我使用简单的线条来做到这一点,它会不平滑并且看起来很丑。
我当前的方法是使用贝塞尔曲线,对 4 个点使用 DeCasteljau 算法,然后对数据集中的每组 4 个点运行该算法。然而,这样做的问题是,由于我分别在点 1-4、5-8、9-12 等点上运行它,因此在 4-5、8-9 等点之间的线条不平滑。
我还寻找其他方法;具体来说,我发现了这篇关于 Catmull-Rom 样条线的文章,它似乎更适合我的目的,因为该曲线穿过所有控制点,与贝塞尔曲线不同。所以我几乎开始实施它,但是后来,我在那个网站上看到这个公式是有效的"assuming uniform spacing of control points"
。我的问题并非如此。
所以,我的问题是,我应该使用什么方法——Bezier、Catmull-Rom,还是完全不同的方法?如果是贝塞尔曲线,那么如何修复4-5、8-9等之间的不平滑度?如果是 Catmull-Rom,如果点分布不均匀,为什么公式不起作用?我需要什么?
编辑:我现在非常确定我想要 Catmull-Rom 样条线,因为它通过每个控制点,这对我的应用程序来说是一个优势。因此,我想回答的主要问题是为什么我提供的链接上的公式不适用于非均匀间隔的控制点?
谢谢。
几个解决方案:
使用 B 样条曲线。这是贝塞尔曲线的推广(贝塞尔曲线是没有内部结点的 B 样条曲线。)
使用三次样条。三次样条特别容易计算。三次样条在控制点上的零导数、一阶导数和二阶导数是连续的。三阶导数(三次项)在控制点处存在不连续性,但很难看到这些不连续性。
B 样条线和三次样条线之间的一个主要区别是三次样条线将穿过所有控制点,而 B 样条线则不会。一种思考方式:这些内部控制点只是 B 样条的建议,但对于三次样条是强制性的。
归档时间: |
|
查看次数: |
2634 次 |
最近记录: |