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