Embedded 计算样条曲线曲面上的点

Embedded 计算样条曲线曲面上的点,embedded,surface,spline,nurbs,catmull-rom-curve,Embedded,Surface,Spline,Nurbs,Catmull Rom Curve,我正在研究一种在嵌入式系统上运行的控制算法。我的编程语言是C,系统在内存和处理能力方面会受到非常严格的限制 我在三维空间中有几个(大约10个)参考点。这些通常是静态的,但偶尔会改变。我想拟合一个样条曲线曲面,使它通过所有这些点,然后有一个函数,对于给定的输入向量(x,z),它返回从平面y=0的距离y 我认为这是一个需要分两部分来解决的问题:1)每当参考点改变时,将计算一些新的系数;2)将系数插入一个函数,该函数返回给定(x,z)的y。(只有2个需要“实时”发生。) 我曾在网上对此进行过一些研究,

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

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

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

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


我非常感谢您的帮助或相关资料的指导,任何伪代码片段都将不胜感激。

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

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

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

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

  • 找到所有三角形边,其中一端位于该角点
  • 找到与该角点“连接”的所有点(在这些边的另一端)
  • 拟合一个平面,该平面穿过该角点,且最小均方“靠近”连接点
  • 对于每条边,从给定的角点向连接的角点拾取1/4(或1/3或1/10或任意值)的点。在平面上找到离该点最近的点后,请忘记该点。将结果点用作与该边相邻的两个三角形中的控制点之一
这将为每个贝塞尔三角形提供除一个以外的所有控制点。
对于Bezier三角形的剩余中央控制点,可能最简单的方法是使用角点的几何平均值(质心)。

在我自己的查询之后,再做一些研究:Catmull Rom很好,因为它满足曲面通过每个点并且计算光照的要求。它的问题是控制点需要约束到z=0平面中的规则网格,并且不能有任何间隙,这与控制点可以在任何地方的要求不一致,我不确定会有多少。我想知道是否有一种方法可以通过在我的控制点上做逆Catmull Rom来合成控制网格?你看过Bezier曲面吗?当你说“离平面的距离”时,你是指“离表面的距离”还是“离表面的高度”?这张纸有用吗?