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

4
我有一个(长)x,y元组列表,它们共同描述了一条路径(即鼠标活动以恒定速率采样,尽管速度不恒定)。
我的目标是以恒定速率播放该路径。因此,我有曲线段和直线段,任意两点之间的delta-d不能保证相同。
给定类似如下数据:
[(0,0), (0,2), (4,6).... ],其中该列表的长度约为1k-2k个点,除了通过暴力计算每个点之间的线段长度并指定每个n长度为“帧”外,还有其他方法吗?
3个回答

1
如果您使用Numpy数组来表示数据,则可以将计算矢量化。这是您所能达到的最高效率。

0

我相信有一种优雅的方式可以使用pandas来完成这个任务,但在此之前,如果您可以容忍一些误差,以下是一个简单的想法。有几种不同的方法可以实现,但基本思路如下:

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

就像我说的,您必须接受一些误差,因为原始点将被调整/删除。如果在此之前生成点以创建更多分辨率,则可能可以减少误差。


嗯,我想这听起来像是你希望避免的“蛮力”方法... - mark s.
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Jonline

0

如果您使用的是一种近似方法,即将表示在例如tuple1和下一个元组tuple2之间的点之间的路径视为直线,则:

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

给你两个点之间的长度,它们之间的总长度将是这些长度的总和。将其除以总时间,就可以得到单位时间内遍历的长度。因此,仍然是暴力方法,但也许更有效率,特别是如果与 sum 函数一起在列表推导中使用。正如马克·S.所指出的,如果你能增加采样分辨率,近似值将会提高。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接