Files
solarmotor/objects/world.py
2026-01-15 18:36:56 +01:00

57 lines
1.4 KiB
Python

"""
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])