3

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

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

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

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

我将非常感谢一些帮助或相关材料的指针,任何伪代码片段将不胜感激。

4

1 回答 1

1

如果您可以在参考点发生变化时以某种方式生成贝塞尔三角形,那么即使在微控制器资源有限的情况下,这些三角形的光滑表面也很容易计算——它只需要重复加和除以 2。

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

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

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

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

这给出了每个贝塞尔三角形的除一个控制点之外的所有控制点。对于贝塞尔三角形的剩余中心控制点,使用角点的几何平均值(质心)可能最简单。

于 2011-06-14T12:10:25.787 回答