""" Alle gemessenen Koordinaten der Quelle und der Sonne haben den Ursprung in der rechten oberen Ecke des Clusters in einem rechtshaendigen flachen System. Achsen in der Welt mit der z-Achse nach oben. Alles in cm gemessen. Der phi Winkel wird zur x-Achse gemessen. Der thetha Winkel wird zur z-Achse gemessen. So sind y und z Koordinaten immer positiv. x (2,0) (1,0) (0,0) <-----S----S----S O:z | S S S (0,1) | v y """ from objects.generic import Source, Target from objects.mirror import Mirror import numpy as np import math class World: def __init__(self, board, tilt_deg=0.0): self.board = board self.grid_size = 10 # In cm self.tilt_deg = tilt_deg # Tilt of the grid system around y-axis self.mirrors: list[Mirror] = [] def add_mirror(self, mirror): self.mirrors.append(mirror) def update_mirrors_from_source_target(self, source: Source, target: Target): for mirror in self.mirrors: mirror.set_angle_from_source_target(source, target) def rotate_point_y(self, point): """Rotate a point around the y-axis by the world's tilt angle.""" x, y, z = point theta = math.radians(self.tilt_deg) cos_t = np.cos(theta) sin_t = np.sin(theta) x_rot = x * cos_t + z * sin_t y_rot = y z_rot = -x * sin_t + z * cos_t return np.array([x_rot, y_rot, z_rot])