模拟 python 中的对数旋涡星系
Simulating a logarithmic spiral galaxy in python
我正在使用 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()
生成的图像如下所示
spiral galaxy with two arms
我需要的:
1) 恒星应该呈放射状分布在旋涡星系中。我只得到了手臂上的分布。
2) 双臂应该是蓝色的。这里我有一只手臂是蓝色的,另一只手臂是绿色的。
模拟完之后,我需要旋转星系。任何与此相关的帮助都将不胜感激。
**编辑:我用 plot(x1, y1,"b*")
得到了蓝色的双臂
要旋转图像,我会使用旋转矩阵计算星星的新位置,您必须对每个星星都这样做,例如
R = [ [ np.cos(phi), -np.sin(phi) ], [ np.sin(phi), np.cos(phi) ] ]
[x_new, y_new] = np.dot( [x_old, y_old], R )
"radially distributed" 到底是什么意思?你能画个例子吗?
如果近似值足够好,请尝试在绘制点之前添加一些噪声。对于初学者,我将从 normal (Gaussian) distribution 开始。例如,这个调整后的版本:
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()
给出此输出:
您可能需要稍微调整一下变量以根据您的需要调整输出。另外,如评论中所述,这不是真正的径向噪声。
我正在使用 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()
生成的图像如下所示 spiral galaxy with two arms
我需要的: 1) 恒星应该呈放射状分布在旋涡星系中。我只得到了手臂上的分布。 2) 双臂应该是蓝色的。这里我有一只手臂是蓝色的,另一只手臂是绿色的。
模拟完之后,我需要旋转星系。任何与此相关的帮助都将不胜感激。
**编辑:我用 plot(x1, y1,"b*")
要旋转图像,我会使用旋转矩阵计算星星的新位置,您必须对每个星星都这样做,例如
R = [ [ np.cos(phi), -np.sin(phi) ], [ np.sin(phi), np.cos(phi) ] ]
[x_new, y_new] = np.dot( [x_old, y_old], R )
"radially distributed" 到底是什么意思?你能画个例子吗?
如果近似值足够好,请尝试在绘制点之前添加一些噪声。对于初学者,我将从 normal (Gaussian) distribution 开始。例如,这个调整后的版本:
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()
给出此输出: