Nurbs曲线(2D)长度和线性采样

时间:2018-08-22 20:31:21

标签: c++ math geometry

我有一个Nurbs曲线(Ctrl点,结矢量,权重和3或4度)。我可以使用参数t [0,1]沿曲线采样来计算长度。计算沿曲线的距离之和得出曲线的近似长度。

  1. 有没有更好的方法来计算曲线的长度?
  2. 线性采样:我想对曲线进行线性采样,以使第一个采样t = t0 = 0到t = t1之间的距离为S1,而最后一个采样n n-1到tn = 1之间的距离为S2,并且所有介于两者之间的样本具有从S1到S2线性内插的长度。

S1和S2是固定的。

3 个答案:

答案 0 :(得分:2)

曲线长度遵循方程式

ds / dt = √(x'²(t) + y'²(t))

其中s是曲线横坐标,t曲线参数及其导数取自t

您愿意做的事情就是构造函数t(s)并强加s的值。编写微分方程即可方便地完成

dt / ds = 1 / √(x'²(t) + y'²(t))

并进行数字积分,例如与Runge-Kutta。

答案 1 :(得分:2)

是的。像样一样采样而不是成对采样,而是按三重点进行工作,将它们解释为通过这三个点的弧。

在相同采样点间距的情况下,与直线段相比,您得到的逼近误差要小得多。

答案 2 :(得分:1)

要计算参数化曲线的长度c(u)=(x(u),y(u)),可以使用通用公式。

instruction reference

请参阅Volume 3A

您明确知道x(u)和y(u),因为 enter image description here

curvilinear abscissa from wikipedia

我相信您具有有理基础函数的导数公式。因此,您有x'(u)和y'(u)。然后,您既可以使用辛普森规则进行积分,也可以使用高斯点专门进行积分,以对有理多项式进行积分,或者更好地使用您喜欢的符号演算工具(槭树,wolfram等)来精确计算积分。