From 51fe4d0b3435fe048c2424ec6fe0b72c721989f9 Mon Sep 17 00:00:00 2001 From: Sergey Vartanov Date: Mon, 31 May 2021 05:13:05 +0300 Subject: [PATCH] Issue #45: add intersection class. --- roentgen/road.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 roentgen/road.py diff --git a/roentgen/road.py b/roentgen/road.py new file mode 100644 index 0000000..6340c68 --- /dev/null +++ b/roentgen/road.py @@ -0,0 +1,33 @@ +""" +Road shape drawing. +""" +from typing import List + +import numpy as np + +from flinger import Flinger, angle +from osm_reader import OSMNode + + +class RoadPart: + """ + Line part of the road. + """ + def __init__(self, node_1: OSMNode, node_2: OSMNode, flinger: Flinger): + self.point_1: np.array = flinger.fling(node_1.coordinates) + self.point_2: np.array = flinger.fling(node_2.coordinates) + + def get_angle(self) -> float: + """ + Get an angle between line and x axis. + """ + return angle(self.point_1, self.point_2) + + +class Intersection: + """ + An intersection of the roads, that is described by its parts. All first + points of the road parts should be the same. + """ + def __init__(self, parts: List[RoadPart]): + self.parts: List[RoadPart] = sorted(parts, key=lambda x: x.get_angle())