计算样条曲面上的点

时间:2011-04-21 10:28:09

标签: embedded surface spline nurbs catmull-rom-curve

我正在研究一种在嵌入式系统上运行的控制算法。我的编程语言是C,系统在内存和处理能力方面受到严格限制。

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

我认为这是一个需要分两部分解决的问题:1)每当参考点改变时,将计算一些新系数; 2)将系数插入到返回 y 对于给定的(x,z)。 (只有2个需要“实时”发生。)

我已经对网络进行了一些研究,但是我很难掌握数学知识,而且很多材料都是针对计算机图形学的。我甚至不确定我需要什么样的样条曲线; NURBS和Catmull-Rom似乎都很重要。最后,关于样条曲线边缘的形状:由于我的输入向量来自有界限的传感器读数,我并不关心样条曲线在该边界之外的作用。

我将非常感谢一些帮助或相关材料的指示,并且非常感谢任何伪代码片段。

1 个答案:

答案 0 :(得分:1)

如果您的参考点发生变化,您可以以某种方式生成Bézier triangles, 即使使用微控制器的有限资源,这些三角形的光滑表面也很容易计算 - 它只需要重复加法和除以2。

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

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

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

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

除了每个Bezier三角形的控制点外,其他所有控制点都是如此。 对于贝塞尔三角形的剩余中心控制点,也许最简单的方法是使用角点的几何平均值(质心)。