Python库在给定角度和速度的地图上绘制坐标

2024-06-28 08:15:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想(在坐标地图上)画出一艘船经过的路线。我有角度和速度的时间序列数据。。。像这样的

1s,10英里/小时,4度

2秒,14英里/小时,-3度

3s,9英里/小时,2度

有没有一个python库可以帮助我在XY坐标网格上绘制它

这个问题很相似。。。一个好的开始。 update coordinates based on angle and speed

最终,我想要一个像这样的图书馆 [x,y]=函数(速度、角度、prevX、prevY)

然后我要画出所有的x,y点。图书馆就这样存在吗

到目前为止我有这个

import numpy as np
import math

def calc_xy(angle, speed):

    # Starting variables
    curx = 0
    cury = 0
    curang = math.radians(0)

    x = np.empty(len(angle))
    y = np.empty(len(angle))

    for z in range(len(angle)):

        x[z], y[z], curang = calc_xy_interior(angle[z], speed[z], curx, cury, curang)
        curx = x[z]
        cury = y[z]

    return x, y

def calc_xy_interior(angle, speed, curx, cury, curang):


    # Calculate distance travelled in meters
    angle_radians = math.radians(angle) + curang
    xtravel = 0.277778 * speed * math.cos(angle_radians)
    ytravel = 0.277778 * speed * math.sin(angle_radians)

    x = curx + xtravel
    y = cury + ytravel

    return x, y, angle_radians

Tags: len图书馆npcalcmath速度角度speed
1条回答
网友
1楼 · 发布于 2024-06-28 08:15:20

好的,在Python中有一条规则:尽可能避免for循环。他们真的很慢numpy通过它的通用函数和广播功能,您可以对整个阵列进行操作,从而使这一点变得非常简单。如果您的阵列占用的内存很小,这通常是一个很好的选择

然后您必须担心数组的内存布局numpy默认情况下使用行主布局。因为在你的问题中,我们可以大量地处理x和y维,因此数组的一个好的形状是(2, N),其中N是点数

那么,我对你的问题的处理方法如下:

import matplotlib.pyplot as plt
import numpy as np


def cal_vel(angles, speeds):
    vel = np.empty((2, len(angles)))
    vel[0, :] = speeds*np.cos(angles)
    vel[1, :] = speeds*np.sin(angles)
    return vel


def calc_x(vel, delta_t, x_0):
    x = np.zeros((2, len(delta_t)+1)) + x_0
    x[:, 1:] = np.cumsum(delta_t*vel, axis=1)
    return x


N = 10
times = np.linspace(1, 100, num=N)
angles = 2*np.pi*np.random.random(N)
speeds = np.random.random(N)
delta_t = np.empty(N)
delta_t[0] = times[0]
delta_t[1:] = times[1:] - times[:-1]
x_0 = np.array([[0], [0]])

x = calc_x(cal_vel(angles, speeds), delta_t, x_0)
print(x)

fig, ax = plt.subplots()
ax.plot(x[0, :], x[1, :])
plt.show()

我意识到如果你对numpy不熟悉的话,这可能会有点过分,问问你是否需要澄清


顺便说一句,如果你不知道的话,这是一个非常粗糙的整合轨迹的方法。如果你没有足够频繁地(及时地)采样你的速度和/或长时间这样做,你会预测你的船离实际位置很远

相关问题 更多 >