5

楕円 r=a(1-e^2)/(1+e*cos(theta)) の方程式を使用して、オブジェクトの楕円パスをプロットするコードを作成しようとしています。また、このデータを他の用途のために配列に入れたいと思います。

from numpy import *#Imports Python mathematical functions library
import matplotlib.pyplot as plt #Imports plot library
from pylab import *

a = 5
e = 0.3
theta = 0
while theta <= 2*pi:
    r = (a*(1-e**2))/(1+e*cos(theta))
    print("r = ",r,"theta = ",theta)
    plt.polar(theta, r)
    theta += pi/180

plt.show()

コードは r と theta の正しい値を吐き出しますが、プロットは空白です。極座標プロット ウィンドウが表示されますが、何もプロットされていません。

助けてください。前もって感謝します。

4

2 に答える 2

9

plt.polarポイントごとに1回は呼び出さないでください。代わりに、すべてのデータを入力として、一度呼び出します。

import numpy as np #Imports Python mathematical functions library
import matplotlib.pyplot as plt #Imports plot library
cos = np.cos
pi = np.pi

a = 5
e = 0.3
theta = np.linspace(0,2*pi, 360)
r = (a*(1-e**2))/(1+e*cos(theta))
plt.polar(theta, r)

print(np.c_[r,theta])

plt.show()

ここに画像の説明を入力してください


ちなみに、numpyはwhileループを使用する代わりに、2ライナーとして計算を行うことができます。

theta = np.linspace(0,2*pi, 360)   # 360 equally spaced values between 0 and 2*pi
r = (a*(1-e**2))/(1+e*cos(theta))  

これは、 (単一の値ではなく)numpy配列として定義thetaします。r

于 2012-09-11T18:26:54.857 に答える
2

points.append([theta,r])最後にやらなくてはいけないと思いますplt.polar(points)…それもちょっとすっきりしたデザインになります

from numpy import *#Imports Python mathematical functions library
import matplotlib.pyplot as plt #Imports plot library
from pylab import *

a = 5
e = 0.3
theta = 0

points = []
while theta <= 2*pi:
    r = (a*(1-e**2))/(1+e*cos(theta))
    print("r = ",r,"theta = ",theta)
    points.append((theta, r))
    theta += pi/180
#plt.polar(points) #this is cool but probably not what you want
plt.polar(*zip(*points))
plt.show()
于 2012-09-11T18:22:31.900 に答える