如何计算沿插值路径的均匀距离(Python2.7)?

时间:2016-05-16 02:22:27

标签: python path geometry

我有一个(长)的x,y元组列表,它们共同描述了一条路径(即尽管速度非恒定,但以恒定速率采样的鼠标活动)。

我的目标是以恒定速率为该路径制作动画。所以我有弯曲的段和直的段,并且任何两点之间的delta-d不保证是相同的。

给出如下数据:

[(0,0), (0,2), (4,6).... ],其中列表的长度是〜1k-2k点,除了蛮力计算每个点之间的线段长度,然后将每个n长度指定为“帧”之外,还有什么方法吗? / p>

3 个答案:

答案 0 :(得分:1)

如果您使用Numpy数组来表示数据,那么您可以向量化计算。这就像你将获得的那样高效。

答案 1 :(得分:0)

我确信有一种优雅的方式可以用熊猫做到这一点,但在此之前,如果你能忍受一些错误,这是一个简单的想法。你可以用几种不同的方式做到这一点,但这里是它的要点:

将每个元组视为链表中的节点。在每个点之间定义所需的长度D。当您在列表中移动时,如果下一个节点与当前节点的距离不是D,请相应地调整其x,y坐标(或根据需要插入/删除节点),使其距离为{{1从当前节点沿连接节点的线段。

就像我说的那样,你将不得不忍受一些错误,因为你的原始积分将被调整/删除。如果在此之前生成点以创建更多分辨率,则可以减少错误。

答案 2 :(得分:0)

如果您要使用近似值来表示在两者之间表示的点之间的路径。 tuple1和下一个元组,tuple2是一条直线,然后:

abs(complex(tuple2[0]-tuple1[0], tuple2[1]-tuple1[1]))

给出这两个点之间的长度,其总和将是总长度。除以总时间将得到以单位时间遍历的长度。所以仍然是蛮力,但也许是一种更有效的方法,特别是如果在列表理解中使用和sum函数一起使用。作为标记。注意,如果你可以提高采样分辨率,那么近似值就会提高。