2026. június 9., kedd

Naprendszer modellezése


import turtle
import math

# Ablak beállítása: 30%-kal nagyobb (660 * 1.3 = 858)
ablak = turtle.Screen()
ablak.setup(width=858, height=858)
ablak.bgcolor("black")
ablak.title("3D Naprendszer szimuláció")
ablak.tracer(0) # A folyamatos animációhoz

# A Nap
nap = turtle.Turtle()
nap.shape("circle")
nap.color("yellow")
nap.shapesize(3, 3)
nap.up()
nap.goto(0, 0)

# Bolygók adatai: név, szín, méret, távolság, szögsebesség, pálya dőlésszög
# A sebességek 90%-kal csökkentve (eredeti értékek szorozva 0.1-gyel)
bolygok_adatok = [
    ("Merkúr", "gray", 0.3, 45.0, 0.47, 15),
    ("Vénusz", "orange", 0.7, 72.0, 0.35, 3),
    ("Föld", "blue", 0.8, 108.0, 0.3, 0),
    ("Mars", "red", 0.5, 144.0, 0.24, 1.8),
    ("Jupiter", "brown", 1.5, 198.0, 0.13, 1.3),
    ("Szaturnusz", "yellow", 1.2, 252.0, 0.1, 2.5),
    ("Uránusz", "light blue", 1.1, 306.0, 0.07, 0.8),
    ("Neptunusz", "blue", 1.1, 360.0, 0.05, 1.8)
]

bolygok = []
szogok = []

for nev, szin, meret, tav, seb, inclinacio in bolygok_adatok:
    bolygo = turtle.Turtle()
    bolygo.shape("circle")
    bolygo.color(szin)
    bolygo.shapesize(meret, meret)
    bolygo.up()
    # Tároljuk a kezdeti adatokat, beleértve a térbeli dőlést is (radiánba váltva)
    bolygok.append((bolygo, tav, seb, math.radians(inclinacio)))
    szogok.append(0)

# Hold a Föld körül
hold = turtle.Turtle()
hold.shape("circle")
hold.color("white")
hold.shapesize(0.3, 0.3)
hold.up()
hold_szog = 0

# 3D koordináta-transzformáció (döntött nézet)
def vetulet_3d(x, y, z):
    # Döntjük a teret, hogy látszódjon a magasság (z)
    szog_xy = math.radians(60) # Kamera szöge
    x_3d = x - y * math.cos(szog_xy)
    y_3d = z + (x + y * math.sin(szog_xy)) * 0.5
    return x_3d, y_3d

# Fő ciklus
while True:
    for i, (bolygo, tav, seb, inclinacio) in enumerate(bolygok):
        # 3D keringés a Nap körül
        szog_rad = math.radians(szogok[i])
        
        # Matematikai alapok a dőlésszöghöz
        x_2d = tav * math.cos(szog_rad)
        y_2d = tav * math.sin(szog_rad)
        z_2d = tav * math.sin(inclinacio) * math.cos(szog_rad)
        
        # 3D vetület kiszámítása
        x_3d, y_3d = vetulet_3d(x_2d, y_2d, z_2d)
        
        bolygo.goto(x_3d, y_3d)
        
        # Szög növelése a sebesség alapján
        szogok[i] += seb
        
        # Ha ez a Föld, mozgassuk a Holdat is körülötte
        if bolygok_adatok[i][0] == "Föld":
            hold_x = x_3d + 15 * math.cos(math.radians(hold_szog))
            hold_y = y_3d + 15 * math.sin(math.radians(hold_szog))
            hold.goto(hold_x, hold_y)
            hold_szog += 2 # Hold keringési sebessége

    ablak.update() # Képernyő frissítése (villódzásmentesítés)

Nincsenek megjegyzések:

Megjegyzés küldése