在样条曲面上计算一个点

4

我正在开发一个控制算法,用于嵌入式系统。我的编程语言是C,系统在内存和处理能力方面都比较受限。

我有几个(大约10个)三维空间中的参考点。这些参考点通常是静态的,但偶尔会变化。我想要拟合一个样条曲面,使其通过所有这些点,然后得到一个函数,对于给定的输入向量(x,z),返回平面y = 0上的距离y

我认为这是一个需要分两部分解决的问题:1)每当参考点更改时,将计算出一些新系数;2)将系数插入到一个函数中,该函数对于给定的(x,z)返回y。(只有第二部分需要实时进行。)

我在网上进行了一些研究,但数学方面遇到了困难,而且很多材料都是针对计算机图形学的。我甚至不确定我需要哪种类型的样条曲线;NURBS和Catmull-Rom似乎都相关。最后,关于我的样条曲线边缘的形状:由于我的输入向量来自有界传感器读数,所以我并不关心曲线在该边界之外的行为。

如果您能提供一些帮助或相关材料的指针,以及任何伪代码片段,我将非常感激。


跟进我的问题,做了更多的研究:Catmull-Rom之所以好,是因为它满足曲面通过每个点的要求,并且计算量较小。但问题在于控制点需要被限制在z=0平面的规则网格上,并且不能有任何间隙,这与控制点可以放置在任何位置的要求相矛盾,而我也不确定会有多少个控制点。我想知道是否有一种方法可以通过对我的控制点进行反向Catmull-Rom来合成一个控制网格? - calamity
你看过贝塞尔曲面吗?当你说“平面距离”时,是指“表面距离”还是“高度距离”?这篇论文有帮助吗?http://www.waset.org/journals/waset/v65/v65-45.pdf - Jay Elston
1个回答

1

如果您能在参考点更改时以某种方式生成Bézier三角形,即使使用微控制器的受限资源,也可以轻松计算这些三角形的平滑表面--它只需要重复加法和除以二。

生成通过所有点的Bézier三角形的一种方法是在参考点上使用Delaunay三角剖分来找到覆盖您表面的一堆三角形。然后使用这些三角形的角作为您的Bézier三角形的角,并任意选择控制点,使相邻三角形之间的边缘“平滑”(而不是“折叠”)。

选择这些控制点的一种可能的方法:

对于每个三角形的角点(即每个原始参考点):

  • 找到所有以该角点为一端的三角形边
  • 找到所有与该角点“连接”的点(在这些边的另一端)
  • 拟合一个通过该角点且最小均方距离“接近”连接点的平面
  • 对于每条边,从给定角点朝连接角点方向选择距离为1/4(或1/3或1/10或其他)的点。在找到该点在平面上的最近点后忘记该点。使用结果点作为两个相邻三角形中边界的控制点之一。

这样就得到了每个Bezier三角形的所有控制点,除了一个。

对于剩下的中心控制点,可能最简单的方法是使用角点的几何平均值(重心)。

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