2026. június 9., kedd

Naprendszer-3D



-----
import turtle
import math

# Ablak beállítása
ablak = turtle.Screen()
ablak.setup(width=660, height=660)
ablak.bgcolor("black")
ablak.title("3D Naprendszer szimuláció")
ablak.tracer(0)  # A folyamatos animációhoz (villódzásmentesítés)

# 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 dőlésszögekkel (inklináció) hozzuk létre a 3D-s hatást
bolygok_adatok = [
    ("Merkúr", "gray", 0.3, 45.0, 4.7, 15),
    ("Vénusz", "orange", 0.7, 72.0, 3.5, 3),
    ("Föld", "blue", 0.8, 108.0, 3, 0),
    ("Mars", "red", 0.5, 144.0, 2.4, 1.8),
    ("Jupiter", "brown", 1.5, 198.0, 1.3, 1.3),
    ("Szaturnusz", "yellow", 1.2, 252.0, 1, 2.5),
    ("Uránusz", "light blue", 1.1, 306.0, 0.7, 0.8),
    ("Neptunusz", "blue", 1.1, 360.0, 0.5, 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

while True:
    for i, (bolygo, tav, seb, inclinacio) in enumerate(bolygok):
        # 3D keringés a Nap körül
        # A magasság (z) a pálya dőlésszögétől függ
        szog_rad = math.radians(szogok[i])
        x_2d = tav * math.cos(szog_rad)
        y_2d = tav * math.sin(szog_rad)
        z_3d = tav * math.sin(inclinacio) * math.sin(szog_rad)
        
        # 2D-be vetítés
        x_3d, y_3d = vetulet_3d(x_2d, y_2d, z_3d)
        
        bolygo.goto(x_3d, y_3d)
        szogok[i] += seb

        # A Hold mozgatása a Föld körül
        if i == 2:  # Föld
            hold_szog_rad = math.radians(hold_szog)
            hold_x_2d = x_2d + 30 * math.cos(hold_szog_rad)
            hold_y_2d = y_2d + 30 * math.sin(hold_szog_rad)
            hold_z_3d = z_3d + 10 * math.sin(hold_szog_rad) # A Hold pályája is döntött
            
            hx_3d, hy_3d = vetulet_3d(hold_x_2d, hold_y_2d, hold_z_3d)
            hold.goto(hx_3d, hy_3d)
            hold_szog += 5
            
    ablak.update() # Képernyő frissítése (tracer miatt szükséges)

Nincsenek megjegyzések:

Megjegyzés küldése