gpt4 book ai didi

c++ - 创建平滑线以连接 3 个维度的 N 个点

转载 作者:太空狗 更新时间:2023-10-29 21:50:16 25 4
gpt4 key购买 nike

我在 3 维空间中有 N 个点。我需要用一条线加入他们。但是,如果我使用一条简单的线来做到这一点,它就会不光滑而且看起来很难看。

我目前的方法是使用贝塞尔曲线,对 4 个点使用 DeCasteljau 算法,并对我的数据集中的每组 4 个点运行该算法。然而,这个问题是因为我分别在 1-4、5-8、9-12 等点运行它,所以 4-5、8-9 等之间的线不平滑。

我也在寻找其他方法;具体来说,我找到了this article关于 Catmull-Rom 样条曲线,它似乎更适合我的目的,因为曲线穿过所有控制点,这与贝塞尔曲线不同。所以我几乎开始实现它,但后来,我在该网站上看到该公式有效 “假设控制点的间距均匀”。我的问题不是这种情况。

所以,我的问题是,我应该使用什么方法——Bezier、Catmull-Rom 还是完全不同的方法?如果是贝塞尔曲线,那么如何解决 4-5、8-9 等之间的非平滑度问题?如果是 Catmull-Rom,如果点的间距不均匀,为什么公式不起作用,我需要什么?

编辑: 我现在很确定我想要 Catmull-Rom 样条曲线,因为它通过了每个控制点,这对我的应用程序来说是一个优势。因此,我想回答的主要问题是为什么我提供的链接上的公式不能用于非均匀间隔的控制点?

谢谢。

最佳答案

几个解决方案:

  • 使用 B 样条。这是贝塞尔曲线的推广(贝塞尔曲线没有内部结点的 B 样条曲线。)

  • 使用三次样条。三次样条特别容易计算。三次样条在控制点的零、一阶和二阶导数中是连续的。三阶导数,即三次项,在控制点处存在不连续性,但很难看到这些不连续性。

B 样条和三次样条之间的一个主要区别是三次样条将通过所有控制点,而 B 样条则不会。一种思考方式:这些内部控制点只是 B 样条的建议,但对于三次样条是强制性的。

关于c++ - 创建平滑线以连接 3 个维度的 N 个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6508868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com