-1

我有一个 NumPy 数组,可用于创建曲线,该数组看起来像这样。

curve=np.asarray([0,0,0], [0.5,0,0], [0.8,0.2,0], [1,0.5,0], [1.2,0.7,0])

如果我将它们连接起来,它将如下图所示

在此处输入图像描述

曲线以米为单位。是否有一种 Numpythonic 方法可以找到曲线上的点,即距离原点(蓝点)1m、2m、3m、4m 等。

非常感谢您的大力帮助和建议。

真挚地

威尔逊

4

1 回答 1

0

对于数组中的每个 3D 坐标,计算与前一个坐标的差的范数。这将为您提供一系列距离。在您的示例中,您得到[0, 0.5, 0.3606, 0.3606, 0.2828]. 其累积总和将为您提供自原点以来曲线中的“行走距离”,在本例中为[0, 0.5, 0.8606, 1.2211, 1.504]

您可以使用下面的代码

a = np.array([[0,0,0], [0.5,0,0], [0.8,0.2,0], [1,0.5,0], [1.2,0.7,0]])
diffs = np.concatenate([[0], np.linalg.norm(np.diff(a, axis=0), axis=1)])
cumsum = np.cumsum(diffs)

现在,对于您的每个兴趣点(1m、2m 等),您可以在cumsum兴趣点所在的变量中找到索引。例如,对于 1m,它将是索引 2 和 3。现在,在索引 2 中,您总共走了 0.8606,这意味着您仍然需要步行 0.1394 的距离才能达到总共 1m。只需使用索引 2 和 3 中的原始坐标来计算线方程,然后使用它来找到适当的坐标。你可以这样做

v = a[3] - a[2]
v /= np.linalg.norm(v)
position_1m = a[2] + 0.1394 * v

有了这个,你得到 1m 的坐标[0.8773, 0.316, 0.]。下图将 1m 对应的位置显示为红星。

曲线中 1m 的位置

于 2020-09-21T19:24:42.107 回答