Skip to main content
 首页 » 编程设计

python之查找从 (x,y) 坐标移动的距离

2025年05月04日21jpfss

我目前有一个 python 脚本,它读取一个 3 列文本文件,其中包含步行者的 x 和 y 坐标以及他们步行的时间。

我读入了这些数据并将其分配到 numpy 数组中,如下面的代码所示:

import numpy as np 
import matplotlib.pyplot as plt 
 
data = np.loadtxt("info.txt", delimiter = ',') 
 
x = data[:,0] 
y = data[:,1] 
t = data[:,2] 

文件格式为 (x,y,t):

5907364.2371    -447070.881709  2193094 
5907338.306978  -447058.019176  2193116 
5907317.260891  -447042.192668  2193130 

我现在想找出步行者行走的距离与时间的函数关系。我能想到的一种方法是在一个循环中对 x 坐标的差异和 y 坐标的所有差异求和。然而,这似乎是一个非常冗长的方法,我认为它可以通过一种数值积分来解决。有人知道我能做什么吗?

请您参考如下方法:

要计算“沿途”的距离,必须先获取每一步的距离。

这可以通过索引 dx = x[1:]-x[:-1] 以组件方式获得。每步的距离是“dx**2+dy**2 的平方根”请注意,该数组的长度减一,因为相对于步数的间隔少了一个。这可以通过将距离“0”分配给第一时间数据来完成。这就是下面“concatenate”行的作用。

这里没有数值积分,而是累加和。要执行数值积分,您需要运动方程(例如)。

额外的变化:我使用 np.loadtxt 和 unpack=True 参数来节省几行。

import numpy as np 
import matplotlib.pyplot as plt 
 
x, y, t = np.loadtxt("info.txt", unpack=True) 
 
dx = x[1:]-x[:-1] 
dy = y[1:]-y[:-1] 
 
step_size = np.sqrt(dx**2+dy**2) 
 
cumulative_distance = np.concatenate(([0], np.cumsum(step_size))) 
 
plt.plot(t, cumulative_distance) 
 
plt.show()