add star radius calculation based on stefan-boltzman law

This commit is contained in:
yuni 2024-04-19 03:39:12 +02:00
parent 70a602de5c
commit 8c0af0e467

View file

@ -34,7 +34,7 @@ MAX_APPARENT_MAGNITUDE = 7.0
SOL_ABSMAG = 4.83
SOL_RADIUS = 696.3e6
SOL_LUMINOSITY = 3.828e26
STEFAN_BOLZMANN_CONSTANT = 5.670374419e-8
STEFAN_BOLTZMANN_CONSTANT = 5.670374419e-8
print("// This file was autogenerated by \"genrate_starchart.py\" using data from the")
print("// HYG database: https://github.com/astronexus/HYG-Database/tree/main/hyg")
@ -43,7 +43,7 @@ print("// Each star's values: (x, y, z, magnitude, absolute magnitude, color ind
print("[")
def render(x, y, z, ra, dec, mag, absmag, ci, dist, name):
def render(i, x, y, z, ra, dec, mag, absmag, ci, dist, name):
# Takes ra/deg in degrees
ra = float(ra)
dec = float(dec)
@ -53,6 +53,8 @@ def render(x, y, z, ra, dec, mag, absmag, ci, dist, name):
if name == 'Sol':
return
#radius = star_radius(float(ci), float(absmag))
# distance = 1.0
# ra_radians = math.radians(ra * 15) # ra is in [0, 24], multiplying by 15 gives degrees in [0, 360]
# dec_radians = math.radians(dec)
@ -73,17 +75,33 @@ def clean_name(string):
return "".join([c for c in string if c.isalnum() or c in ' -_'])
def star_radius(color_index, absolute_magnitude):
# Convert color index to temperature (using Ballesteros' formula approximation for B-V)
temp = 4600 * ((1 / (0.92 * color_index + 1.7)) + (1 / (0.92 * color_index + 0.62)))
# Convert absolute magnitude to luminosity (in solar luminosities)
lum = 10 ** (0.4 * (SOL_ABSMAG - absolute_magnitude))
# Calculate the radius using Stefan-Boltzmann law (output should be in meters)
radius = math.sqrt(lum * SOL_LUMINOSITY / (4 * math.pi * STEFAN_BOLTZMANN_CONSTANT * temp ** 4)) # Luminosity in watts for the Sun ~ 3.828e26
# Convert radius from meters to solar radii (1 solar radius ≈ 6.96e8 meters)
radius_solar = radius / SOL_RADIUS
return radius_solar
total = 0
count = 0
count_extra = 0
entries = []
with open(PATH, "r", encoding="utf-8") as f:
for entry in csv.DictReader(f):
entries.append(entry)
for index, entry in enumerate(csv.DictReader(f)):
entries.append((index, entry))
entries.sort(key=lambda entry: float(entry['mag']))
entries.sort(key=lambda entry: float(entry[1]['mag']))
for entry in entries:
for index, entry in entries:
total += 1
ra = entry['ra']
dec = entry['dec']
@ -104,7 +122,7 @@ for entry in entries:
continue
if float(mag) > MAX_APPARENT_MAGNITUDE:
continue
render(x, y, z, ra, dec, mag, absmag, ci, dist, name)
render(index, x, y, z, ra, dec, mag, absmag, ci, dist, name)
count += 1
#for entry in CUSTOM_ENTRIES:
# render(entry[0], entry[1], entry[2], entry[3], entry[4])