Files
KuppelSimulation/claude.py
2025-09-20 10:50:33 +02:00

116 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pygame
import math
# Observatoriums-Simulation Anzeige und Richtung harmonisiert
WIDTH, HEIGHT = 700, 700
CENTER = (WIDTH // 2, HEIGHT // 2)
RADIUS = 260
TAG_COUNT = 36 # oder 72
# Farben
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (200, 50, 50)
BLUE = (50, 50, 200)
# Anfangswerte
telescope_angle = 0.0 # Grad
dome_angle = 0.0 # Grad (Mittelachse des Spalts)
slot_width = 20.0 # Spaltbreite in Grad
dome_speed = 2.5 # Grad pro Frame (maximal)
tele_speed = 2.5 # Grad pro Frame (Teleskop-Schritt)
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Kuppel-Simulation Anzeige fix")
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 22)
def angle_diff(target, source):
d = (target - source + 180.0) % 360.0 - 180.0
return d
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Steuerung Teleskop (Pfeiltasten) - wie in Version 15
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
telescope_angle = (telescope_angle + tele_speed) % 360.0
if keys[pygame.K_RIGHT]:
telescope_angle = (telescope_angle - tele_speed) % 360.0
# --- Kuppelsteuerung (wie Version 15 + Spaltlogik) ---
half_slot = slot_width / 2.0
# Kuppel folgt dem NEGATIVEN Teleskop-Winkel (funktionierte in Version 15)
target_dome = -telescope_angle
diff = angle_diff(target_dome, dome_angle)
move_dir = "STOP"
used_step = 0.0
# NEU: Kuppel bewegt sich nur bei Erreichen des rechten (CW) Randes
if diff < -half_slot - 1e-6: # Teleskop hat rechten Rand erreicht
# Bewege Kuppel so, dass Teleskop exakt am linken Rand steht
# target_dome für linken Rand = -telescope_angle + half_slot
target_dome_new = -telescope_angle + half_slot
movement_needed = angle_diff(target_dome_new, dome_angle)
dome_angle = (dome_angle + movement_needed) % 360.0
if movement_needed > 0:
move_dir = "+"
else:
move_dir = "-"
used_step = abs(movement_needed)
# --- Zeichnen ---
screen.fill(WHITE)
# Tags (Bildschirmkonvention: Winkel im Uhrzeigersinn positiv)
for i in range(TAG_COUNT):
a = -2.0 * math.pi * i / TAG_COUNT
x = CENTER[0] + math.cos(a) * RADIUS
y = CENTER[1] + math.sin(a) * RADIUS
pygame.draw.circle(screen, BLACK, (int(x), int(y)), 4)
# Spaltbogen (Mittelachse wie Teleskop mit -angle)
mid_angle = -math.radians(dome_angle)
half = math.radians(slot_width / 2.0)
rect = (CENTER[0] - RADIUS, CENTER[1] - RADIUS, 2 * RADIUS, 2 * RADIUS)
pygame.draw.arc(screen, BLUE, rect, mid_angle - half, mid_angle + half, 12)
# Teleskoplinie (ebenfalls -angle)
tx = CENTER[0] + math.cos(math.radians(-telescope_angle)) * (RADIUS - 60)
ty = CENTER[1] + math.sin(math.radians(-telescope_angle)) * (RADIUS - 60)
pygame.draw.line(screen, RED, CENTER, (int(tx), int(ty)), 6)
pygame.draw.circle(screen, RED, (int(tx), int(ty)), 8)
# Mittelpunkt
pygame.draw.circle(screen, BLACK, CENTER, 6)
# Debug-Infos
diff_after = angle_diff(telescope_angle, dome_angle)
lines = [
f"Telescope: {telescope_angle:.1f}°",
f"Dome (Spaltmittel): {dome_angle:.1f}°",
f"Diff (tel - dome): {diff_after:.2f}°",
f"Slot width: {slot_width}°",
f"Tags: {TAG_COUNT}",
f"Move: {move_dir} step: {used_step:.2f}°"
]
for i, txt in enumerate(lines):
surf = font.render(txt, True, BLACK)
screen.blit(surf, (10, 10 + i * 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()