Nurbs曲线(2D)固定长度参数化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nurbs曲线(2D)固定长度参数化相关的知识,希望对你有一定的参考价值。

我有一个代表2D Nurbs曲线的类

class Nurbs2D {...};

数据成员是控制点(Point2D的std :: vector),结矢量(std :: vector of double),weight(std :: vector of double),degree(隐含基于控制点数和结矢量)

API:我能够构建在t0和t1之间参数化的曲线。给定参数t(t0 <= t <= t1),我也能够计算Point2D。

给定参数ti,我想估计下一个参数ti + 1,使得沿着曲线从ti到ti + 1的距离等于Di(在公差dt内给定Di)。需要两个函数,一个用于计算从ti到ti + 1的长度,另一个用于在给定ti,Di和dt的情况下估计ti + 1。

C ++中的代码非常有用。我正在寻找速度超过准确度,因为调整容差dt将使结果适合。

答案

计算NURBS曲线的弧长非常复杂。您需要在两个给定参数值之间积分差分的长度。即使对于简单的二次B样条,这也会变得混乱,如this question所示。

由于您不专注于准确性,因此可能足以以数字方式近似长度。 Math.SE问题下的答案之一指向了您可以使用的细分方案。您可以将此扩展到NURBS。但是,更简单的方法可能适合您的应用:只需在您感兴趣的区间内的多个均匀间隔的样本点处评估曲线。然后,计算此采样的折线长度。可以通过基于曲率改变采样密度来改进该方法。但统一的方法可能对你有用。准确度与您使用的样本数量相关。

要在当前点dl之前得到一个t长度单位的点,你可以做类似的事情:选择一个小的增量dt并评估该间距中的点(即t, t + dt, t + 2dt, t + 3dt ...),同时测量折线的长度直到你的目标长度到达了。如果你在最后一个间隔内射击目标,你可以减少最后一部分的dt,直到达到所需的精度。

以上是关于Nurbs曲线(2D)固定长度参数化的主要内容,如果未能解决你的问题,请参考以下文章

曲线理论-详解Bezier曲线B样条曲线NURBS曲线

曲线理论-详解Bezier曲线B样条曲线NURBS曲线

NURBS曲线与曲面

缺少数据的 2D 图像中的曲线拟合

支持三元 NURBS 的 NURBS 库 [关闭]

非均匀有理B样条的目录