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)固定长度参数化的主要内容,如果未能解决你的问题,请参考以下文章