Optimize circle gaps detection

This commit is contained in:
2024-06-24 02:42:01 +02:00
parent 6256a0e879
commit d507510b16
3 changed files with 38 additions and 13 deletions

25
main.py
View File

@@ -1,6 +1,6 @@
import random
from gdpc import Editor
from gdpc import Editor, Block
from House import *
from networks.geometry.Point3D import Point3D
@@ -11,13 +11,28 @@ from world_maker.Skeleton import Skeleton, simplify_coordinates
from world_maker.terraforming import remove_trees, smooth_terrain
from world_maker.world_maker import world_maker
from networks.geometry.Point3D import Point3D
from networks.geometry.Point3D import Point3D
from networks.geometry.Point2D import Point2D
from networks.geometry.Circle import Circle
def main():
y = 105
Road([Point3D(3903, 137+y, -142), Point3D(3948, 111+y, -148),
Point3D(3967, 112+y, -116), Point3D(4011, 112+y, -99)], 25)
y = 30
# Road([Point3D(4183, 100+y, -66), Point3D(4206, 102+y, -88), Point3D(4260, 112+y, -80),
# Point3D(4267, 104+y, -108), Point3D(4230, 102+y, -129), Point3D(4220, 112+y, -213), Point3D(4121, 167+y, -249), Point3D(4052, 129+y, -179)], 25)
editor = Editor(buffering=True)
c, g = Circle(Point2D(4422, -213)).circle_thick_by_line(10, 20)
for i in range(len(g)):
for j in range(len(g[i])):
editor.placeBlock(Point3D.insert_3d(
[g[i][j]], 'y', [103])[0].coordinates, Block("stone"))
for i in range(len(c)):
for j in range(len(c[i])):
editor.placeBlock(Point3D.insert_3d(
[c[i][j]], 'y', [103])[0].coordinates, Block("white_concrete"))
# Road([Point3D(4398, 87, -136), Point3D(4394, 101, -200), Point3D(4385, 112, -282), Point3D(4324,
# 119, -302), Point3D(4304, 120, -249)], 9)
# rectangle_house_mountain, rectangle_building, skeleton_highway, skeleton_mountain, road_grid = world_maker()
# editor = Editor(buffering=True)

View File

@@ -66,20 +66,26 @@ class Circle:
def _remove_gaps(outter_line: List[Point2D], inner_line: List[Point2D]) -> List[Point2D]:
gaps = []
for i in range(len(outter_line)):
if Circle._count_neighbors(outter_line[i], inner_line) == 0:
if Circle._count_neighbors(Point2D(outter_line[i].x-1, outter_line[i].y), inner_line) > 1:
nearest_index = outter_line[i].nearest(
inner_line, True)[0]
potential_neighbors = [inner_line[(nearest_index+j) % len(inner_line)]
for j in range(-10, 10, 1)]
print("\n\n", nearest_index,
inner_line[nearest_index], potential_neighbors)
if Circle._count_neighbors(outter_line[i], potential_neighbors) == 0:
if Circle._count_neighbors(Point2D(outter_line[i].x-1, outter_line[i].y), potential_neighbors) > 1:
if Point2D(outter_line[i].x-1, outter_line[i].y) not in outter_line:
gaps.append(
Point2D(outter_line[i].x-1, outter_line[i].y))
if Circle._count_neighbors(Point2D(outter_line[i].x+1, outter_line[i].y), inner_line) > 1:
if Circle._count_neighbors(Point2D(outter_line[i].x+1, outter_line[i].y), potential_neighbors) > 1:
if Point2D(outter_line[i].x+1, outter_line[i].y) not in outter_line:
gaps.append(
Point2D(outter_line[i].x+1, outter_line[i].y))
if Circle._count_neighbors(Point2D(outter_line[i].x, outter_line[i].y-1), inner_line) > 1:
if Circle._count_neighbors(Point2D(outter_line[i].x, outter_line[i].y-1), potential_neighbors) > 1:
if Point2D(outter_line[i].x, outter_line[i].y-1) not in outter_line:
gaps.append(
Point2D(outter_line[i].x, outter_line[i].y-1))
if Circle._count_neighbors(Point2D(outter_line[i].x, outter_line[i].y+1), inner_line) > 1:
if Circle._count_neighbors(Point2D(outter_line[i].x, outter_line[i].y+1), potential_neighbors) > 1:
if Point2D(outter_line[i].x, outter_line[i].y+1) not in outter_line:
gaps.append(
Point2D(outter_line[i].x, outter_line[i].y+1))

View File

@@ -116,7 +116,7 @@ class Road:
middle_lane_index = round(len(circle_list)/2)
middle_line_length = len(circle_list[middle_lane_index])
circle_list[middle_lane_index] = circle_list[middle_lane_index][-1].optimized_path(
circle_list[middle_lane_index] = circle_list[middle_lane_index][0].optimized_path(
circle_list[middle_lane_index])
for k in range(len(circle_list[middle_lane_index])):
nearest = circle_list[middle_lane_index][k].nearest(
@@ -128,7 +128,11 @@ class Road:
if j != middle_lane_index:
circle_list[j] = circle_list[j][0].optimized_path(
circle_list[j])
factor = (middle_line_length-1)/(len(circle_list[j])-1)
if len(circle_list[j]) != 1:
factor = (middle_line_length-1) / \
(len(circle_list[j])-1)
else:
factor = 1
for k in range(len(circle_list[j])):
circle_list[j][k] = Point3D.insert_3d([circle_list[j][k]], 'y', [
@@ -212,7 +216,7 @@ class Road:
for i in range(len(self.polyline.total_line_output)):
self.polyline_total_line_output[i] = Point3D(
self.polyline.total_line_output[i].x, self.polyline_height.total_line_output[round(i*self.index_factor)].y+70, self.polyline.total_line_output[i].y)
self.polyline.total_line_output[i].x, self.polyline_height.total_line_output[round(i*self.index_factor)].y, self.polyline.total_line_output[i].y)
self._surface()
self.place()