我正在研究一种在嵌入式系统上运行的控制算法。我的编程语言是C,系统在内存和处理能力方面受到严格限制。
我在三维空间中有一些(大约10个)参考点。这些通常是静态的,但会偶尔发生变化。我想拟合一个样条曲面使它通过所有这些点,然后有一个函数,对于给定的输入向量(x,z)返回距离 y 从飞机 y = 0 。
我认为这是一个需要分两部分解决的问题:1)每当参考点改变时,将计算一些新系数; 2)将系数插入到返回 y 对于给定的(x,z)。 (只有2个需要“实时”发生。)
我已经对网络进行了一些研究,但是我很难掌握数学知识,而且很多材料都是针对计算机图形学的。我甚至不确定我需要什么样的样条曲线; NURBS和Catmull-Rom似乎都很重要。最后,关于样条曲线边缘的形状:由于我的输入向量来自有界限的传感器读数,我并不关心样条曲线在该边界之外的作用。
我将非常感谢一些帮助或相关材料的指示,并且非常感谢任何伪代码片段。
答案 0 :(得分:1)
如果您的参考点发生变化,您可以以某种方式生成Bézier triangles, 即使使用微控制器的有限资源,这些三角形的光滑表面也很容易计算 - 它只需要重复加法和除以2。
生成通过所有点的Bézier三角形的一种方法是使用 Delaunay triangulation 在你的参考点上找到一堆覆盖你表面的三角形。 然后使用这些三角形的角作为Bezier三角形的角, 和任意选择控制点,使相邻三角形之间的边缘“平滑”(而不是“折痕”)。
选择这些控制点的一种可能方法:
对于每个三角形角点(即每个原始参考点):
除了每个Bezier三角形的控制点外,其他所有控制点都是如此。 对于贝塞尔三角形的剩余中心控制点,也许最简单的方法是使用角点的几何平均值(质心)。