给定一条跟踪线或曲线(例如鼠标跟踪应用程序,您可以在其中绘制任何不间断的线或曲线),我想在该线或曲线上放置等距离点(放置的点数可以改变) . 这样做的最佳方法是什么?
我建议使用Centripetal Catmull-Rom样条 .
http://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline
Catmull-rom curve with no cusps and no self-intersections
这使您可以使用用户单击或在各种鼠标移动事件期间拾取的原始“点” . 您仍然需要在末尾添加两个点来控制线的初始和最终方向 .
使用Centripetal Catmull-Rom而不是常规Catmull-Rom的原因是为了避免自交叉和尖点,这是线路本身不合需要的环路 .
原始Catmull-Rom将曲线上的距离参数化为t . 由于曲线的任何一段使用了段之前的点和段之后的点,因此只需将参数t传递给0到1之间的等式,就可以插入中间两点之间任意点的坐标,其中0等于P1,1为P2,其中四个控制点是P0,P1,P2和P3 .
Catmull-Rom的修改版本与控制点之间的定位一起发挥作用 . 它仍然使用相同的4个控制点,并且仍然可以使用t值来获得答案,但是在P1和P2之间不再有0到1的范围 . 相反,您用于t的值将取决于欧氏距离 .
因此,作为Centriptal情况的一个例子,假设我有4个控制点,并且段距离是4,9和16.我实际上将使用距离的平方根,因此控制点的t值将是是:
UNIFORM CHORDAL CENTRIPETAL T0 = 0 0 0 T1 = 1 4 Sqrt(4) = 2 T2 = 2 4 + 9 = 13 2 + Sqrt(9) = 5 T3 = 3 13 + 16 = 29 5 + Sqrt(16) = 9
然后在P1和P2之间插值,我会选择在T1和T 2之间均匀分布的t值,在Centripetal情况下是2和5 .
1 回答
我建议使用Centripetal Catmull-Rom样条 .
http://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline
Catmull-rom curve with no cusps and no self-intersections
这使您可以使用用户单击或在各种鼠标移动事件期间拾取的原始“点” . 您仍然需要在末尾添加两个点来控制线的初始和最终方向 .
使用Centripetal Catmull-Rom而不是常规Catmull-Rom的原因是为了避免自交叉和尖点,这是线路本身不合需要的环路 .
原始Catmull-Rom将曲线上的距离参数化为t . 由于曲线的任何一段使用了段之前的点和段之后的点,因此只需将参数t传递给0到1之间的等式,就可以插入中间两点之间任意点的坐标,其中0等于P1,1为P2,其中四个控制点是P0,P1,P2和P3 .
Catmull-Rom的修改版本与控制点之间的定位一起发挥作用 . 它仍然使用相同的4个控制点,并且仍然可以使用t值来获得答案,但是在P1和P2之间不再有0到1的范围 . 相反,您用于t的值将取决于欧氏距离 .
因此,作为Centriptal情况的一个例子,假设我有4个控制点,并且段距离是4,9和16.我实际上将使用距离的平方根,因此控制点的t值将是是:
然后在P1和P2之间插值,我会选择在T1和T 2之间均匀分布的t值,在Centripetal情况下是2和5 .