gpt4 book ai didi

python - 用numpy数组离散化路径并且点之间的距离相等

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:58 24 4
gpt4 key购买 nike

假设我在二维平面中有一条由参数化给出的路径,例如阿基米德螺线:

x(t) = a*φ*cos(φ), y(t) = a*φ*sin(φ)

我正在寻找一种使用 numpy 数组将其离散化的方法,问题是如果我使用

a = 1
phi = np.arange(0, 10*np.pi, 0.1)
x = a*phi*np.cos(phi)
y = a*phi*np.sin(phi)
plt.plot(x,y, "ro")

我得到了一条很好的曲线,但是点的距离不一样,因为随着 φ 的增加,两点之间的距离变大。我正在寻找一种不错的方法,如果可能的话,速度会更快。

最佳答案

也许可以为您的简单螺旋获得精确的分析公式,但我没有心情这样做,而且在更一般的情况下这可能是不可能的。相反,这是一个数值解:

import matplotlib.pyplot as plt
import numpy as np
a = 1
phi = np.arange(0, 10*np.pi, 0.1)
x = a*phi*np.cos(phi)
y = a*phi*np.sin(phi)

dr = (np.diff(x)**2 + np.diff(y)**2)**.5 # segment lengths
r = np.zeros_like(x)
r[1:] = np.cumsum(dr) # integrate path
r_int = np.linspace(0, r.max(), 200) # regular spaced path
x_int = np.interp(r_int, r, x) # interpolate
y_int = np.interp(r_int, r, y)

plt.subplot(1,2,1)
plt.plot(x, y, 'o-')
plt.title('Original')
plt.axis([-32,32,-32,32])

plt.subplot(1,2,2)
plt.plot(x_int, y_int, 'o-')
plt.title('Interpolated')
plt.axis([-32,32,-32,32])
plt.show()

它计算所有单独段的长度,将总路径与 cumsum 相加,最后进行插值以获得规则间隔的路径。您可能需要在 phi 中调整您的步长,如果它太大,您将看到螺旋不是平滑的曲线,而是由直线段构建的。结果: enter image description here

关于python - 用numpy数组离散化路径并且点之间的距离相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com