From 0dc29bc7c77d4d0462be5b7e23d5c960e0fb4f58 Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Sat, 15 Jun 2024 22:44:52 +0200 Subject: [PATCH] Working first step projection --- main.py | 8 ++++---- networks/geometry/Point2D.py | 5 ++++- networks/geometry/Polyline.py | 1 - networks/roads_2/Roads.py | 9 ++++++--- output_image.png | Bin 2674 -> 3905 bytes 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index 85e7ef2..a229945 100644 --- a/main.py +++ b/main.py @@ -306,15 +306,15 @@ random_points = [Point2D(random.randint(min_val, max_val), random.randint( # random_points = [Point2D(-40, -56), Point2D(-94, 92), Point2D(19, -47), Point2D( # 100, 59), Point2D(-85, -73), Point2D(-33, -9), Point2D(57, -25), Point2D(51, -34)] -# random_points = random_points[0].optimized_path(random_points) +random_points = random_points[0].optimized_path(random_points) -# print(random_points) +print(random_points) # random_points = [Point2D(94, 71), Point2D(-12, 54), Point2D(-28, 10), Point2D( # 0, -33), Point2D(80, -50), Point2D(73, -89), Point2D(-86, -3), Point2D(-82, 92)] -random_points = [Point2D(-59, -21), Point2D(-43, -19), Point2D(-61, 19), Point2D( - 45, 19), Point2D(80, -4), Point2D(99, 2), Point2D(47, 63), Point2D(100, -91)] +# random_points = [Point2D(-59, -21), Point2D(-43, -19), Point2D(-61, 19), Point2D( +# 45, 19), Point2D(80, -4), Point2D(99, 2), Point2D(47, 63), Point2D(100, -91)] p = Polyline(random_points) diff --git a/networks/geometry/Point2D.py b/networks/geometry/Point2D.py index 9848d5b..d748303 100644 --- a/networks/geometry/Point2D.py +++ b/networks/geometry/Point2D.py @@ -72,7 +72,7 @@ class Point2D: else: return (s_p <= 0) and (t_p <= 0) and (s_p + t_p) >= d - def nearest(self, points: List["Point2D"]) -> "Point2D": + def nearest(self, points: List["Point2D"], return_index: bool = False) -> Union["Point2D", List[Union["Point2D", int]]]: """Return the nearest point. If multiple nearest point, returns the first in the list. Args: @@ -81,6 +81,9 @@ class Point2D: Returns: Point2D: The nearest point, and if multiple, the first in the list. """ + if return_index: + return min( + enumerate(points), key=lambda pair: self.distance(pair[1])) return min(points, key=lambda point: self.distance(point)) def optimized_path(self, points: List["Point2D"]) -> List["Point2D"]: diff --git a/networks/geometry/Polyline.py b/networks/geometry/Polyline.py index e495466..9d067cb 100644 --- a/networks/geometry/Polyline.py +++ b/networks/geometry/Polyline.py @@ -61,7 +61,6 @@ class Polyline: self.get_arcs_intersections() self.get_arcs() self.get_segments() - print("\nlekj\n", self.segments, "\nklj\n") self.total_line_output = [] for i in range(1, self.length_polyline-1): diff --git a/networks/roads_2/Roads.py b/networks/roads_2/Roads.py index d9d8603..23cc062 100644 --- a/networks/roads_2/Roads.py +++ b/networks/roads_2/Roads.py @@ -52,9 +52,12 @@ class Road: def _projection(self): nearest_points_to_reference = [] for i in range(len(self.coordinates)): - nearest_points_to_reference.append(Point3D.insert_3d([Point3D.to_2d([self.coordinates[i]], 'y')[0].nearest( - self.polyline.total_line_output)], 'y', [self.coordinates[i].y])[0]) - print(nearest_points_to_reference) + # nearest_points_to_reference.append(Point3D.insert_3d([Point3D.to_2d([self.coordinates[i]], 'y')[0].nearest( + # self.polyline.total_line_output, return_index=True)], 'y', [self.coordinates[i].y])[0]) + index, point = Point3D.to_2d([self.coordinates[i]], 'y')[0].nearest( + self.polyline.total_line_output, return_index=True) + nearest_points_to_reference.append( + Point2D(index, self.coordinates[i].y)) def place(self): editor = Editor(buffering=True) diff --git a/output_image.png b/output_image.png index 9564ae9fb5cadf6a68f5a079a0a5d07e1068a561..a07f8a0bbcfec22cd522b25342350d2424262a99 100644 GIT binary patch literal 3905 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