首页 文章

算法:如何在跟踪线或曲线上找到位置?

提问于
浏览
2

给定一条跟踪线或曲线(例如鼠标跟踪应用程序,您可以在其中绘制任何不间断的线或曲线),我想在该线或曲线上放置等距离点(放置的点数可以改变) . 这样做的最佳方法是什么?

1 回答

  • 0

    我建议使用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的值将取决于欧氏距离 .

    enter image description here

    因此,作为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 .

    enter image description here

相关问题