3

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

我目前的方法是使用 Bezier 曲线,对 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 样条,因为它通过了每个控制点,这对我的应用程序来说是一个优势。因此,我想回答的主要问题是为什么我提供的链接上的公式不适用于非均匀间隔的控制点?

谢谢。

4

3 回答 3

2

几个解决方案:

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

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

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

于 2011-06-28T16:57:33.387 回答
0

可以通过高斯过程找到一条有意义的线(尽管不是最简单的评估线)。您设置(或推断)您希望线条变化的长度尺度(即线条的平滑度),然后 GP 线是给定长度尺度的数据中最可能的线。如果您不介意线不通过数据点,则可以向模型添加噪声。

它是一种很好的插值方法,因为您还可以获得线的标准偏差。当您在空缺中没有太多数据时,这条线变得更加不确定。

您可以在 David MacKay 的第 45 章中了解它们Information Theory, Inference, and Learning Algorithms- 您可以从作者的网站下载

于 2011-06-28T15:39:15.223 回答
0

一种解决方案是维基百科中的以下页面:http ://en.wikipedia.org/wiki/Bézier_curve ,检查 N 个控制点的通用方法。

于 2011-06-28T16:35:43.587 回答