diff options
Diffstat (limited to 'lib/polygon.py')
-rw-r--r-- | lib/polygon.py | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/lib/polygon.py b/lib/polygon.py index 79f1d64..6241416 100644 --- a/lib/polygon.py +++ b/lib/polygon.py @@ -53,12 +53,11 @@ __all__ = ['SphericalPolygon'] class SphericalPolygon(object): ur""" - Polygons are represented by both a set of points (in - Cartesian (*x*, *y*, *z*) normalized on the unit sphere), - and an inside point. The inside point is necessary, because - both the inside and outside of the polygon are finite areas - on the great sphere, and therefore we need a way of - specifying which is which. + Polygons are represented by both a set of points (in Cartesian + (*x*, *y*, *z*) normalized on the unit sphere), and an inside + point. The inside point is necessary, because both the inside and + outside of the polygon are finite areas on the great sphere, and + therefore we need a way of specifying which is which. """ def __init__(self, points, inside): @@ -668,11 +667,16 @@ class SphericalPolygon(object): if not len(plot_args): plot_args = {'color': 'blue'} points = self._points - ra, dec = vector.vector_to_radec( - points[:, 0], points[:, 1], points[:, 2], - degrees=True) - for r0, d0, r1, d1 in zip(ra[0:-1], dec[0:-1], ra[1:], dec[1:]): - m.drawgreatcircle(r0, d0, r1, d1, **plot_args) + + for A, B in zip(points[0:-1], points[1:]): + length = great_circle_arc.length(A, B, degrees=True) + interpolated = great_circle_arc.interpolate(A, B, length * 4) + ra, dec = vector.vector_to_radec( + interpolated[:, 0], interpolated[:, 1], interpolated[:, 2], + degrees=True) + for r0, d0, r1, d1 in zip(ra[0:-1], dec[0:-1], ra[1:], dec[1:]): + m.drawgreatcircle(r0, d0, r1, d1, **plot_args) + ra, dec = vector.vector_to_radec( *self._inside, degrees=True) x, y = m(ra, dec) |