Curve surface okayish implementation

This commit is contained in:
2024-04-26 19:47:55 +02:00
parent 323111f2f6
commit 751e935b32
4 changed files with 102 additions and 20 deletions

View File

@@ -16,15 +16,66 @@ class CurveSurface:
def compute_curvature(self):
self.curvature = curve.curvature(self.curve)
def compute_surface(self, width, normals, resolution):
self.offset_points = [None] * (width * resolution)
def compute_surface(self, width, normals):
self.offset_left = curve.offset(self.curve, width, normals)
self.offset_right = curve.offset(self.curve, -width, normals)
self.perpendicular_segment = []
for i in range(len(self.offset_left)):
self.perpendicular_segment.append(segment.discrete_segment(
self.offset_left[i], self.offset_right[i], pixel_perfect=False))
self.surface = []
for line_range in range(width * resolution):
self.offset_points[line_range] = curve.offset(
self.curve, line_range/resolution, normals)
for i in range(len(self.offset_points[line_range])-1):
self.surface.extend(segment.discrete_segment(
self.offset_points[line_range][i], self.offset_points[line_range][i+1], pixel_perfect=False))
for i in range(len(self.perpendicular_segment)-1):
for j in range(len(self.perpendicular_segment[i])):
# Hypothesis
max_length_index = i
min_length_index = i+1
proportion = len(
self.perpendicular_segment[min_length_index])/len(self.perpendicular_segment[max_length_index])
print(self.surface)
# Reverse order if wrong hypothesis
if proportion > 1:
max_length_index = i+1
min_length_index = i
proportion = len(
self.perpendicular_segment[min_length_index])/len(self.perpendicular_segment[max_length_index])
for k in range(len(self.perpendicular_segment[max_length_index])):
self.surface.extend(segment.discrete_segment(
self.perpendicular_segment[max_length_index][k], self.perpendicular_segment[min_length_index][round(k * proportion)-1], pixel_perfect=False))
# for i in range(len(self.offset_points)):
# self.perpendicular_segment[i].append(
# segment.discrete_segment(self.offset_points[i], self.curve[i]))
# for j in range(len(self.offset_points)-1):
# # Hypothesis
# max_length_index = j
# min_length_index = j+1
# proportion = len(
# self.perpendicular_segment[min_length_index])/len(self.perpendicular_segment[max_length_index])
# # Reverse order if wrong hypothesis
# if proportion > 1:
# max_length_index = j+1
# min_length_index = j
# proportion = len(
# self.perpendicular_segment[min_length_index])/len(self.perpendicular_segment[max_length_index])
# for k in range(len(self.perpendicular_segment[max_length_index])):
# # print(self.perpendicular_segment[max_length_index][k],
# # self.perpendicular_segment[min_length_index][round(k * proportion)])
# self.surface.extend(segment.discrete_segment(
# self.perpendicular_segment[max_length_index][k], self.perpendicular_segment[min_length_index][round(k * proportion)]))
# for line_range in range(width * resolution):
# self.offset_points[line_range] = curve.offset(
# self.curve, line_range/resolution, normals)
# for i in range(len(self.offset_points[line_range])-1):
# self.surface.extend(segment.discrete_segment(
# self.offset_points[line_range][i], self.offset_points[line_range][i+1], pixel_perfect=False))
# print(self.surface)