Optimize circle gaps detection
This commit is contained in:
25
main.py
25
main.py
@@ -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)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user