fix arclength calculations giving invalid values or non-integral steps

This commit is contained in:
Jan Petykiewicz 2023-10-07 01:50:56 -07:00 committed by jan
parent 8fe7b14f4b
commit 272cfb7e48

View File

@ -218,11 +218,11 @@ class Arc(Shape):
r1cos = r1 * numpy.cos(t)
arc_dl = numpy.sqrt(r0sin * r0sin + r1cos * r1cos)
#arc_lengths = numpy.diff(t) * (arc_dl[1:] + arc_dl[:-1]) / 2
arc_lengths = (arc_dl[1:] + arc_dl[:-1]) * dt / 2
arc_lengths = (arc_dl[1:] + arc_dl[:-1]) * numpy.abs(dt) / 2
return arc_lengths, t
if num_vertices is not None:
n_pts = max(self.radii) / min(self.radii) * num_vertices * 100
n_pts = numpy.ceil(max(self.radii) / min(self.radii) * num_vertices * 100).astype(int)
perimeter_inner = get_arclens(n_pts, *a_ranges[0])[0].sum()
perimeter_outer = get_arclens(n_pts, *a_ranges[1])[0].sum()
implied_arclen = (perimeter_outer + perimeter_inner + self.width * 2) / num_vertices
@ -233,7 +233,7 @@ class Arc(Shape):
""" Figure out the parameter values at which we should place vertices to meet the arclength constraint"""
dr = -self.width / 2.0 * (-1 if inner else 1)
n_pts = 2 * pi * max(self.radii) / max_arclen
n_pts = numpy.ceil(2 * pi * max(self.radii) / max_arclen).astype(int)
arc_lengths, thetas = get_arclens(n_pts, *a_ranges[0 if inner else 1])
keep = []