◆銀河明るさシミュレート(ダークマター不要)
- 銀河の回転から球殻質量分布を計算する
- 球殻質量分布から明るさをシミュレートする
- halo比率変更
- 星の明るさと数の調整(全体で一定の明るさとなる)
- 星の数調整(全体の明るさ調整)
- バルジサイズ調整
- 計算方式
- ダウンロード
銀河の回転から球殻質量分布を計算する
回転速度から質量を計算することができます。
完全球体の球面上の軌道速度は
なので、
速度v、半径Rの球の質量Mは
となります。
Rを変更しながら、Mの差分をとっていけば、球殻の質量となります。
球殻の体積で割れば球殻の質量密度となります。
外側の質量は無視することができます。
詳しい説明は
◆質量分布モデルと軌道の基礎計算:ダークマター再考
を参照してください。
球殻密度分布
下の図は「NGC 6503銀河」の回転速度と、速度から求めた球殻の質量密度の分布図です。
横軸は万光年となっています。
縦軸は観測された速度と、球殻換算での質量密度分布となっています。
変化の割合を示しており、単位はここでは示しません。

実際の「NGC 6503銀河」の写真を載せます。

「NGC 6503銀河」のサイズは3万光年とされていますが、残念ながら写真のどこからどこまでが3万光年なのかは分かりません。
動画の一コマを実際の「NGC 6503銀河」の写真と同じレイアウトに配置すると次のようになります。

この質量密度分布は半径の2乗の反比例と極めて似たものとなっています。
半径の2乗に反比例するグラフを載せます。

球殻質量分布
下の図は「NGC 6503銀河」の回転速度と、速度から求めた球殻の質量の分布図です。
横軸は万光年となっています。
縦軸は観測された速度と、球殻毎の質量となっています。
変化の割合を示しており、単位はここでは示しません。

かなりばらつきがありますが、大きく見ると一定の値を保っています。
球殻質量分布から明るさをシミュレートする
質量密度を画像明るさに換算
質量密度を画像の明るさに換算するには、空間に星を配置し、星それぞれの明るさと、星の密度を調整します。
星はサイズは固定の1ドットとし、明るさは(R,G,B)で(0,0,0)から(255,255,255)の256段階を持つものとします。
例えば質量密度255を表現するには(1,1,1)の星を256個配置するか、(255,255,255)の星を1個配置します。
暗い星を沢山配置する方が明るい星を少量配置するより画像はなめらかになります。
同位置に星が重なる場合は単純加算します。
明るさを変える例を 星の明るさと数の調整(全体で一定の明るさとなる) と 星の数調整(全体の明るさ調整) に置いてあります。
星は球殻空間内にランダムに配置されます。
バルジ部を持つ薄い円盤に星を配置
中央部の球形の領域バルジと、その周り広がる薄い円盤、全体に球形に薄く広がるhaloから構成されます。
赤道面から見た図です。

斜め方向から見た図です。

極方向から見た図です。

明るさは目視確認を基本として星一個の明るさと星の数でシミュレートしました。
銀河の半径は31(31個の球殻で構成される)中バルジ部半径を3(3個の球殻で構成される)とし、円盤とhaloの質量割合を1:1としています。
halo部は質量の半分を持ちますが、薄く広がっているため、図では確認しづらくなっています。
動画
冒頭に回転する動画を載せました。
画を次のパラメタで生成しました。
・halo比率 | (halo比率変更) | : | 0.5 |
・星の明るさと数 | (星の明るさと数の調整) | : | 16/32 |
・星の数調整 | (星の数調整) | : | 1 |
・画像のサイズ | (星の数調整) | : | 1/2 |
Youtube
https://youtu.be/CFvFYS988Ps
https://youtu.be/ElI_nXq9jrU 説明なし
ウェブ画面によっては暗くなりすぎて分かりづらいため冒頭の動画を次の明るめのものを載せています。
明るめの動画
銀河の画像の明るさは写真のとり方に依存します。明るめに撮られることも多いので、明るめの動作も作成しました。
Youtube
https://youtu.be/Szyj14xyIvY 明るめ
https://youtu.be/7SKTUwgLSbU 明るめ:説明あり
https://youtu.be/ZDjuUaDjqko 明るめ:説明文字なし
で見ることもできます。
球殻に星を配置
球殻に質量に応じ星をランダムに配置した図を載せます。

球殻毎に色を変えると次のようになります。

平板面(厚さ0)に星を配置
球殻の代わりに平板面円周に星を配置し、球殻円周に色を変えると次のようになります。説明のため極端に明るくしてあります。

31枚の球殻で構成されています。
halo比率変更
銀河には星が球形空間に薄っすら広がっているhaloと呼ばれる空間があります。
各球殻の星の内haloに配置する割合を変更すると、次の様になります。











この図では1個の星の明るさは最大にして確認しやすくしています。
星の明るさと数の調整(全体で一定の明るさとなる)
星を描画する明るさと、質量に対する星の数を変更することができます。
基本の明るさは256段階となっており、明るさを半分にすると、星の数を2倍にして、全体として明るさを保つようにしています。
同一位置に星が配置される場合、明るさを加算するようにしています。
明るさを落とすと表示はなめらかになります。
円盤を赤道面から見た図
halo部には質量の半分を割り当てていますが、星の明るさを落とすと、確認しづらくなります。









円盤を極方向から見た図
円盤を極方向から見た図です。









バルジがあるため、次の球形分布に比べて、中央に集中していることが分かります。
球形分布
球形に分布する場合を載せます。









星の数調整(全体の明るさ調整)
星の数を増減し銀河全体の明るさを調整します。



















バルジサイズ調整
バルジサイズが調整できます。サイズは計測球殻単位となります。2または3が適切だと考えます。











計算方式
球殻毎に質量に応じた数の星をランダム配置します。
円盤化するには球殻を圧縮します。
最後に視点をx軸回転し画像化します。
球殻内にランダムに配置する方法
球殻内に配置するには、一旦球殻を含む空間にランダムに星を配置した上、角度を採用します。
半径は別途球殻範囲内のランダムな値に置き換えます。

極座標と直交座標の計算
極座標と直交座標の相互変換は次の式で行います。

球殻高さ抑圧法
円盤状に配置するには球殻の高さを抑えなければなりません。
単に押しつぶすと完全球殻ではなくなり、計算が成り立たなくなります。

抑圧角度を90度にすると、厚さ0の円盤になります。
空間回転
観測角度を変更するために、空間の回転を施します。
軸毎の回転は次のようにして求めることができます。

2次元画像化
2次元画像化は単純にz軸を無視することで行いました。
製図的であり、若干立体感を失いますが、大きな問題はないと考えます。
画像の座標は数学座標とは鏡像となっていますが、特に問題はないと考えます。
画面サイズを小さくする場合それに応じ星の数を減らす必要があります。サイズを1/2(即ち面積を1/4)にした場合は星の数を1/4にします。
表示に関し整数座標化するには四捨五入をする必要があります。
下の図は左が四捨五入、右が切り捨てで整数座標としたものです。右にはかすかに十字が見えます。


ダウンロード
参考までにソースを
galaxysimulator.tar.gz
に置きました。
内容は次のものです。linuxで動きます。Python3を使います。
GalaxySimulator/ |-- A01_clean.sh |-- A08_tar.sh |-- calcResult.txt |-- mass2stars.py |-- tst_br_plate | |-- A01_clean.sh | |-- A05_test.sh | `-- param.jsn |-- tst_br_sph | |-- A01_clean.sh | |-- A05_test.sh | `-- param.jsn |-- tst_bright | |-- A01_clean.sh | |-- A05_test.sh | `-- param.jsn |-- tst_bulge | |-- A01_clean.sh | |-- A05_test.sh | |-- param.jsn | |-- param64.jsn | |-- param64_1.jsn | `-- param64_2.jsn |-- tst_disk | |-- A01_clean.sh | |-- A05_test.sh | |-- out_disk | |-- param.jsn | |-- param2000_X.jsn | `-- param2000_Z.jsn |-- tst_diskZ_br | |-- A01_clean.sh | |-- A05_test.sh | `-- param.jsn |-- tst_halo | |-- A01_clean.sh | |-- A05_test.sh | `-- param.jsn |-- tst_simple | |-- A01_clean.sh | `-- A05_test.sh |-- tst_simple_plate | |-- A01_clean.sh | |-- A05_test.sh | |-- out_plate | `-- param.jsn |-- tst_simple_sph | |-- A01_clean.sh | |-- A05_test.sh | `-- param.jsn `-- tst_stars_num |-- A01_clean.sh |-- A05_test.sh `-- param.jsn
tst_xxxフォルダが個別試験のフォルダになっており、A05_test.shで実行され.pngファイルが生成されます。
mass2stars.pyがプログラムです。
--paramでパラメタファイルを指定します。
パラメタファイルは次のような形式となっています。
--create_movieを指定すると動画を作成します。
// // 銀河シミュレータパラメタ // コメント // で始まる行はコメントです // 本ファイルの記述はJSONに//コメントを追加した形式です // { "data_file" :"../calcResult.txt" ,"out_file" :"out_bright2.png" ,"movie_folder":"out_disk" ,"movie" :"回転,0,360,3" ,"font" :"/usr/share/fonts/liberation-sans/LiberationSans-Bold.ttf" ,"font_size" :64 ,"text" :"brightness 1/2, number of stars x2" ,"画像高" :2000 ,"画像幅" :2000 ,"サイズ調整" :1.0 ,"質量星数換算":2 ,"星数換算調整":1 ,"C_01" :[[0,255,255],[255,0,0],[0,255,0],[100,100,255],[255,255,0],[255,0,255]] ,"C_02" :[[255,255,255]] ,"C_03" :[[85,85,85]] ,"C_04" :[[42,42,42]] ,"C_SEL" :"2" ,"輝度加算" :true ,"重なり回避" :false ,"DISP_sta" :0 ,"DISP_end" :31 ,"直交空間乱数":true ,"板状" :false ,"球面に配置" :false ,"回転軸" :"x" ,"回転角度" :90 ,"バルジ端" :3 ,"halo比率" :0.5 ,"円盤抑圧" :true }
"//"で始まる行はコメントです。記述の後ろをコメントアウトすることは出来ません。
C_CELは星の明るさを示します。
"C_01"~"C_04"の文字列を入れると指定のRGB値配列に沿って球殻毎に色が選択されます。
数値を入れると、255を数値で割った値がR,G,Bに採用されます。
textをコメントアウトすると、画像にテキスト表示はされません。
"質量星数換算"と"星数換算調整"をかけたものが質量を星の数に換算する比率となります。1前後の値となるのはたまたまです。
--create_movie指定がある場合、movie_folderで指定されるフォルダ下に、指定要素を変更しながら連番pngが作成されます。
要素はmovieで指定します。
"movie" : "要素,初期値,最終値(この値は表示対象外),ステップ"
現版では要素は回転のみサポートしています。
| 固定リンク