5

私はプログラミングに本当に慣れていません...

しかし、ここに私の質問があります:

画像を投稿することはできませんが、私が望むプロットは「クラウン」です(つまり、半径aの2つの同心円、数学的に言えば、定義するのは本当に簡単ですが、Pythonプログラムでそれを行うにはどうすればよいですか?

私はこのようなことを考えました:

def Fm1(X, Y):
    r =r = sqrt(1.*X**2+1.*Y**2)
    cos = 1.*X/r
    sin = 1.*Y/r
    teta = where( sin >= 0. , arccos(cos) , -arccos(cos) )
    teta = where(r == 0. , 0., teta)
    return r, teta


def F(r,teta):                                                                  
    X = r*cos(teta)                                                             
    Y = r*sin(teta)                                                             
    return X,Y

これらは、デカルト座標から極座標に渡すことができる関数であり、次のようになります。

r=sy.linspace(a,b,N+1) # radius division
t=sy.linspace(0,2.*pi,2**NN) #angle (theta) division
R,T=meshgrid(r,t) #creating a mesh

X,Y = F(R,T)#transform from polar to cartesian

#Plotting :
fig=plt.figure()
ax=fig.add_subplot(111)                                 
ax.plot(X, Y)
plt.show()

しかし、結果は次のとおりです。同心ポリゴン。半径aから半径bまでの等距離にN+1の円があり、2 ** NNの線(原点の中心と特定の角度)があればいいのにと思います。

申し訳ありませんが、それは本当に些細な質問だと思います。

ありがとう

4

1 に答える 1

4

私の答えでは、2つのライブラリを使用します。

import numpy as np
import pylab

私はこれらがあなたのセットアップの定数であると信じています:

r_a = 0.50
r_b = 0.75
circles = 6  
lines   = 50
origin = (0, 0)

オプション1:直接プロット

まず、を描きます:

for r in np.linspace(r_a, r_b, circles):
    pylab.gca().add_patch(pylab.Circle(origin, radius=r, 
                                       fill=False, color='black'))

次にを引きます:

r_ab = np.array([r_a, r_b])
for theta in np.linspace(0, 2 * np.pi, lines):
    pylab.plot(np.cos(theta) * r_ab,
               np.sin(theta) * r_ab, color='red')

最後に、表示

pylab.axis('scaled')
pylab.show()

結果:_

プロットの画像

オプション2:セグメントをプロットする:

(ライブラリをインポートし、上記のように定数を設定した後。)まず、ポイントの位置を計算します。

r,t   = np.meshgrid(np.linspace(r_a, r_b, circles),
                    np.linspace(0, 2 * np.pi, lines))
x = r * np.cos(t)
y = r * np.sin(t)

次に、 (あなたがするように)円をプロットし、線をプロットします

# Plot circles
pylab.plot(x, y)
# Plot lines (first and last x and y of each theta)
pylab.plot(np.vstack((x[:,0], x[:, -1])),
           np.vstack((y[:,0], y[:, -1])))

最後に、表示

pylab.axis('scaled')
pylab.show()

結果:_

2番目のオプションの結果

:この後、本当に必要なのは、線のプロットに関するオプション2の最後のビットだけだと思います。将来の読者のために、他のすべての回答をここに残しておきます。

于 2012-12-05T17:56:40.613 に答える