我的问题是如何在给定轴向坐标的情况下获得位于定义为 NURBS 曲线的曲线上的点的第二个坐标(在 2D 中)。我有节点向量、控制点、它们的权重和基函数。
我查看了类似的问题(如何找出画布中贝塞尔曲线中特定点的 Y 坐标?),但到目前为止还没有找到好的答案。谢谢,米
我的问题是如何在给定轴向坐标的情况下获得位于定义为 NURBS 曲线的曲线上的点的第二个坐标(在 2D 中)。我有节点向量、控制点、它们的权重和基函数。
我查看了类似的问题(如何找出画布中贝塞尔曲线中特定点的 Y 坐标?),但到目前为止还没有找到好的答案。谢谢,米
如果您需要从头开始实现所有内容,这不是一件容易的事。不过,代码将如下所示:
对于 NURBS 的节点向量中的每个非空节点区间 { 从 NURBS 中提取此节点区间 [a, b] 的贝塞尔曲线 B(t); 计算贝塞尔曲线控制点的最小和最大 X 值。 if ( X0 在 [Xmin, Xmax] 内) { t0 = 一个; t1 = b; ε = 1.0e-06; // 一个小值;while ( (t1-t0) > epsilon ) { Subdivide B(t) at t=0.5 to generate two Bezier curves: B1(t) and B2(t); compute the [Xmin1, Xmax1] for B1(t) and [Xmin2, Xmax2] for B2(t); if ( X0 is within [Xmin1, Xmax1] ) { B(t) = B1(t); t0 = a; t1 = (a+b)/2; } else { B(t) = B2(t); t0 = (a+b)/2; t1 = b; } } // end while loop return ((t0+t1)/2); // This is the parameter value you are looking for } // end if()
} // 结束 for 循环
(t0+t1)/2 是您要查找的参数值。请注意,给定相同的 X0 值,您可能会找到多个解决方案。