[manhattanize_fast] Improve handling of grids smaller than the shape
This commit is contained in:
parent
3bf7efc404
commit
049864ddc7
1 changed files with 12 additions and 10 deletions
|
|
@ -139,22 +139,24 @@ class Shape(FlippableImpl, PivotableImpl, RepeatableImpl, AnnotatableImpl,
|
||||||
for v, v_next in zip(p_verts, numpy.roll(p_verts, -1, axis=0), strict=True):
|
for v, v_next in zip(p_verts, numpy.roll(p_verts, -1, axis=0), strict=True):
|
||||||
dv = v_next - v
|
dv = v_next - v
|
||||||
|
|
||||||
# Find x-index bounds for the line # TODO: fix this and err_xmin/xmax for grids smaller than the line / shape
|
# Find x-index bounds for the line
|
||||||
gxi_range = numpy.digitize([v[0], v_next[0]], gx)
|
gxi_range = numpy.digitize([v[0], v_next[0]], gx)
|
||||||
gxi_min = numpy.min(gxi_range - 1).clip(0, len(gx) - 1)
|
gxi_min = int(numpy.min(gxi_range - 1).clip(0, len(gx) - 1))
|
||||||
gxi_max = numpy.max(gxi_range).clip(0, len(gx))
|
gxi_max = int(numpy.max(gxi_range).clip(0, len(gx)))
|
||||||
|
|
||||||
|
if gxi_min < len(gx) - 1:
|
||||||
err_xmin = (min(v[0], v_next[0]) - gx[gxi_min]) / (gx[gxi_min + 1] - gx[gxi_min])
|
err_xmin = (min(v[0], v_next[0]) - gx[gxi_min]) / (gx[gxi_min + 1] - gx[gxi_min])
|
||||||
err_xmax = (max(v[0], v_next[0]) - gx[gxi_max - 1]) / (gx[gxi_max] - gx[gxi_max - 1])
|
|
||||||
|
|
||||||
if err_xmin >= 0.5:
|
if err_xmin >= 0.5:
|
||||||
gxi_min += 1
|
gxi_min += 1
|
||||||
|
|
||||||
|
if gxi_max > 0 and gxi_max < len(gx):
|
||||||
|
err_xmax = (max(v[0], v_next[0]) - gx[gxi_max - 1]) / (gx[gxi_max] - gx[gxi_max - 1])
|
||||||
if err_xmax >= 0.5:
|
if err_xmax >= 0.5:
|
||||||
gxi_max += 1
|
gxi_max += 1
|
||||||
|
|
||||||
if abs(dv[0]) < 1e-20:
|
if abs(dv[0]) < 1e-20:
|
||||||
# Vertical line, don't calculate slope
|
# Vertical line, don't calculate slope
|
||||||
xi = [gxi_min, gxi_max - 1]
|
xi = [gxi_min, max(gxi_min, gxi_max - 1)]
|
||||||
ys = numpy.array([v[1], v_next[1]])
|
ys = numpy.array([v[1], v_next[1]])
|
||||||
yi = numpy.digitize(ys, gy).clip(1, len(gy) - 1)
|
yi = numpy.digitize(ys, gy).clip(1, len(gy) - 1)
|
||||||
err_y = (ys - gy[yi]) / (gy[yi] - gy[yi - 1])
|
err_y = (ys - gy[yi]) / (gy[yi] - gy[yi - 1])
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue