用Python模拟对数螺旋星系

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

生成的图像如下所示:带有两个臂的螺旋星系 我的需求: 1)恒星应该沿着螺旋星系径向分布。我只得到了沿着臂部的分布。 2)两条臂都应该是蓝色的。这里我有一条臂是蓝色的,另一条是绿色的。
模拟完成后,我需要旋转星系。任何关于此事的帮助将不胜感激。
**编辑:我使用plot(x1, y1,"b*")使两条臂都变成了蓝色。

关于颜色:plot(x1, y1, "b*") 将绘制蓝色的星形。如果你只指定了 "*",它将改变多个图的颜色。至于其他问题:你尝试过什么?向我们展示你失败的尝试,我们可以从那里帮助你。 - Ian
谢谢您的回复。它有效。实际上,我已经没有更多的想法了。我不知道如何像我们在银河系中看到的那样径向分布点(星星)。@mwormser - Athul R T
你正在使用错误的模型 - 使用这个模型永远不会得到“径向噪声”。你可以尝试给 xyx1y1 添加高斯噪声,这样会得到一些结果。但是是否足够满足你的目的还不清楚。如果你只是想做一个漂亮的图片,那就无所谓了。但如果你想模拟一些天体物理现象,那可能不是你想要的。也许你应该试着在 physics.stackexchange 上提问? - Praveen
谢谢您。我正在为一个天体物理学项目进行模拟。 - Athul R T
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()

给出这个输出:enter image description here 你可能需要稍微调整一下变量以满足你的需求。另外,如评论中所述,这并不是真正的径向噪声。

我能得到这样的分发吗?@Pikalek https://s32.postimg.org/69f3oliz9/hqdefault.jpg - Athul R T
可能性 - 我已经更新了我的答案,附带示例代码和输出图像。 - Pikalek

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 )

“radially distributed”是什么意思?你能画一个示例图吗?

看这张星系的图片。我想要像这样的分布。但我得到的只是沿着臂的分布。@RobertAlpha https://s32.postimg.org/69f3oliz9/hqdefault.jpg - Athul R T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接