【问题标题】:Python library to plot coordinates on a map given angle and speed of objectPython库在地图上绘制坐标给定的角度和物体的速度
【发布时间】:2020-03-04 06:24:41
【问题描述】:

我想(在坐标图上)绘制一艘船经过的路径。我有角度和速度的时间序列数据......类似于

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

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

3 秒,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

【问题讨论】:

  • 我不知道有一个现有的库来解决这个问题,我怀疑是否有一个解决这样一个特定问题的库(谁知道,不过......),但是 numpy 和一些工作应该就计算而言,让您很快到达那里,matplotlib 将用于绘图。你对python有多少经验?你知道这些吗?您是否需要他们的帮助,它们是否是可接受的解决方案,还是您真的需要图书馆?
  • 另外,您是否知道与仅在离散时间点已知的速度计算位置相关的问题?
  • user35915.... 拥有一个库会很好,而不必自己创建它....尽管正如您在上面看到的那样,我开始这样做了。我知道这种方法并不完美,但这是我能做的最好的了

标签: python


【解决方案1】:

好的,所以在 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,这可能有点多,请问您是否需要澄清。


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

【讨论】:

  • hmmmm... 这并没有给出我正在寻找的结果。我每秒记录一次数据。可能是因为你之前提到的问题
  • 其中可能存在错误 :-)。您能否更具体地说明什么不符合您的期望?
  • 记得在使用函数之前将角度转换为弧度。当然,也可以将您的时间和速度转换为您想要使用的单位。
  • 哦等等,我想我看到了一个问题:你的角度是什么?它们是否与您的船的最后行驶方向有关?还是它们相对于 x 轴?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多