本日は昨日に引き続きBlenderPython枠です。
昨日はヒッパルコス星表のCSVをBlenderで読み込むことを行いました。
〇環境
・Windows11PC
・Blender4.1
〇ヒッパルコス星表記載の星の座標の定義
星の計算についてはその①でも触れています。
Blenderなどで春分点から東に0.22秒、天の赤道から北に1度5分20.4秒離れた位置にある天体を配置するということを行う際は赤経、赤緯を曲面座標系に変換する必要があります。
この際に曲面座標系で、半径r、仰角Θ=赤緯、方位角φ=赤系のパラメータであらわされます。
まずは度数法に変換します。赤経の0.22秒を度数法に変換します。
童謡に赤緯も度数法で変換します。
次に曲面座標系に変換するためにはラジアンに変換します。
以上から半径rとしたXYZの極座標変換を行います。
これが星の座標になります。今回はこの計算式をBlenderで実装します。
〇CSVで読み取ったデータをもとに座標計算を行う
上記の計算方法からBlenderで座標を計算し星を配置するコードは次のようになります。
import bpy import csv import math # CSVファイルのパス csv_file_path = "C:hip_lite_a.csv" # CSVファイルを開きます。 with open(csv_file_path, newline='') as csvfile: reader = csv.reader(csvfile) for row in reader: # 赤経と赤緯を度数法に変換 ra_deg = float(row[3]) * 1/3600 dec_deg = float(row[4]) + float(row[5]) * 1/60 + float(row[6]) * 1/3600 # 度数法をラジアンに変換 ra_rad = ra_deg * math.pi / 180 dec_rad = dec_deg * math.pi / 180 # 半径 r = 1 # 極座標系に変換 x = r * math.cos(dec_rad) * math.cos(ra_rad) y = r * math.cos(dec_rad) * math.sin(ra_rad) z = r * math.sin(dec_rad) # 星を配置 bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z))
このコードではCSVデータに基づき座標計算と球の作成、配置を行っています。
問題点としてはデータ量に対してオブジェクトを生成するため、数万のデータを作成するときにBlenderが落ちてしまうことです。 次はこの問題を解消したいと思います。
本日は以上です。