implemented segments

This commit is contained in:
2024-04-15 23:14:18 +02:00
parent 68a9d853c5
commit 3784973647
3 changed files with 48 additions and 9 deletions

View File

@@ -3,24 +3,32 @@ from typing import Optional
import pygame
from path import Path
from vec import Vec2
class MapDisplay:
PATH_WIDTH = 5
SEGMENT_SIZE = 20
MIN_SEGMENT_LENGTH = 5
def __init__(self, surf: pygame.Surface, min_lat: float, max_lat: float, min_lon: float, max_lon: float):
def __init__(self,
surf: pygame.Surface,
min_lon: float,
max_lon: float,
min_lat: float,
max_lat: float):
self.surf: pygame.Surface = surf
self.min_lat: float = min_lat
self.max_lat: float = max_lat
self.min_lon: float = min_lon
self.max_lon: float = max_lon
self.min_lat: float = min_lat
self.max_lat: float = max_lat
def real_to_screen(self, lon: float, lat: float) -> tuple[float, float]:
x = (lon - self.min_lon) / (self.max_lon - self.min_lon)
y = (lat - self.min_lat) / (self.max_lat - self.min_lat)
w, h = self.surf.get_size()
return x * w, y * h
return x * w, h - y * h
def draw_path(self, path: Path) -> None:
self.draw_colored_path(path, None)
@@ -34,4 +42,18 @@ class MapDisplay:
pygame.draw.circle(self.surf, col, (x, y), self.PATH_WIDTH)
def draw_segment(self, path: Path, start_i: int, end_i: int) -> None:
raise NotImplementedError
if end_i - start_i < self.MIN_SEGMENT_LENGTH:
return
points = []
for i in range(start_i, end_i):
pt = path.points[i]
pt = Vec2(*self.real_to_screen(pt.x, pt.y))
n = path.normals[i]
n = Vec2(n.x, -n.y)
pt1 = pt + n * self.SEGMENT_SIZE
pt2 = pt - n * self.SEGMENT_SIZE
points.insert(0, (pt1.x, pt1.y))
points.append((pt2.x, pt2.y))
pygame.draw.lines(self.surf, (255, 255, 255), True, points)