首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建光滑的直线,将N个点连接在三维中

创建光滑的直线,将N个点连接在三维中
EN

Stack Overflow用户
提问于 2011-06-28 15:21:35
回答 3查看 2.4K关注 0票数 3

我在三维空间中有N个点。我要用一条线加入他们。然而,如果我用一条简单的线条去做,它是不光滑的,而且看起来很难看。

我目前的方法是使用Bezier曲线,对4点使用DeCasteljau算法,并对数据集中的每组4点运行该曲线。然而,问题在于,由于我分别在1-4、5-8、9-12等点上运行,所以这条线在4-5、8-9等之间并不平坦。

我还寻找其他方法;具体而言,我找到了关于Catmull样条的这篇文章,它似乎更适合我的目的,因为曲线通过所有控制点,不像Bezier曲线。所以我几乎开始实现它,但是后来,我在那个站点上看到这个公式是"assuming uniform spacing of control points"工作的。我的问题不是这样的。

那么,我的问题是,我应该使用什么方法-- Bezier,Catmull,还是完全不同的方法?如果是Bezier,那么如何解决4-5,8-9之间的非光滑性等问题?如果卡特莫尔-罗姆,为什么公式不能工作,如果点是不均匀的间隔,我需要什么代替?

编辑:我现在非常确定我想要Catmull样条,因为它通过每个控制点,这对我的应用程序来说是一个优势。因此,我想回答的主要问题是,为什么我所提供的环节上的公式不为非均匀间隔的控制点工作?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-28 16:57:33

有几种解决办法:

  • 用B样条。这是Bezier曲线的推广( Bezier曲线,B样条没有内部节点)。
  • 用三次样条。三次样条曲线特别容易计算。三次样条在控制点的零、第一和第二导数中是连续的。三次导数,即立方项,在控制点上有一个不连续性,但是很难看到这些不连续。

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

票数 2
EN

Stack Overflow用户

发布于 2011-06-28 15:39:15

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

这是一个很好的插值方法,因为你也可以得到你的直线的标准偏差。当你在空荡荡中没有太多数据时,这条线变得更加不确定。

你可以在大卫·麦凯的Information Theory, Inference, and Learning Algorithms的第45章中读到它们--你可以从作者的网站这里上下载。

票数 0
EN

Stack Overflow用户

发布于 2011-06-28 16:35:43

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6508868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档