3

Pythonを使用して対数渦巻銀河をシミュレートしています。パラメトリック方程式を使用すると、

x= a*exp(b*theta)*cos(theta)y= a*exp(b*theta)*sin(theta)

星のランダムな分布を取得するために numpy.random を使用しました。サンプルコードを以下に示します。

import random
from math import *
from pylab import *
import numpy as np

n=100000
a= 1
b=0.6
th =np.random.randn(n)
x= a*exp(b*th)*cos(th)
y=a*exp(b*th)*sin(th)
x1 = a*exp(b*(th))*cos(th+ pi)
y1=a*exp(b*(th))*sin(th + pi)
plot(x,y,"*")
plot(x1, y1,"*")
show()

結果の画像は 、2 つの腕を持つ渦巻銀河の下に表示されます。

必要なもの: 1) 星は渦巻銀河に放射状に分布している必要があります。腕に沿ってのみ分布を得ました。2) 両腕は青色である必要があります。ここでは、片方の腕を青色、もう一方の腕を緑色にしています。

これをシミュレートした後、銀河を回転させる必要があります。これに関するヘルプはかなりのものです。

**編集: を使用して、両方の腕を青色にしましたplot(x1, y1,"b*")

4

2 に答える 2

4

近似値で十分な場合は、点をプロットする前に点にノイズを追加してみてください。手始めに、正規(ガウス)分布から始めます。たとえば、この微調整されたバージョン:

import random
from math import *
from pylab import *
import numpy as np

n=1000
a=0.5
b=0.6
th=np.random.randn(n)
x=a*exp(b*th)*cos(th)
y=a*exp(b*th)*sin(th)
x1=a*exp(b*(th))*cos(th+pi)
y1=a*exp(b*(th))*sin(th+pi)

sx=np.random.normal(0, a*0.25, n)
sy=np.random.normal(0, a*0.25, n)
plot(x+sy,y+sx,"*")
plot(x1+sx, y1+sy,"*")

show()

ここに画像の説明を入力 の出力が得られます。必要に応じて出力を調整するために、変数を少しいじる必要があるかもしれません。また、コメントで述べたように、これは真のラジアル ノイズではありません。

于 2016-07-25T14:49:50.027 に答える
1

画像を回転するには、回転行列を使用して星の新しい位置を計算します。これは、次のように星ごとに行う必要があります。

R = [ [ np.cos(phi), -np.sin(phi) ], [ np.sin(phi), np.cos(phi) ] ]
[x_new, y_new] = np.dot( [x_old, y_old], R )

「放射状に分散」とは正確にはどういう意味ですか? 例の画像を描いていただけますか?

于 2016-07-25T09:06:28.063 に答える