2014-06-15 95 views
3

之間相等的距離離散化路徑可以說我有在由參數化給定的一個二維平面的路徑,例如阿基米德螺旋:與numpy的陣列和點

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") 

我收到了一個很好的cu但點不具有相同的距離,因爲 增長φ2點之間的距離變大。我尋找一個很好的,如果可能的話,快速的方式來做到這一點。

+1

這個問題似乎是脫離主題,因爲它屬於http://math.stackexchange.com – jonrsharpe

+0

也許你是對的。可以在那裏移動嗎? – jrsm

+0

版主可能會將其遷移,但刪除此版本並創建新版本可能更容易。 – jonrsharpe

回答

4

可能有可能得到你的簡單螺旋確切的分析公式,但我沒有心情做到這一點,這可能是在一個更普遍的情況下不可能的。取而代之的是,這裏是一個數值解:

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

+0

謝謝,這對我來說似乎是一個非常好的解決方案,正是我所期待的。 – jrsm