summaryrefslogtreecommitdiff
path: root/stsci/sphere/test/test_intersection.py
diff options
context:
space:
mode:
Diffstat (limited to 'stsci/sphere/test/test_intersection.py')
-rw-r--r--stsci/sphere/test/test_intersection.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/stsci/sphere/test/test_intersection.py b/stsci/sphere/test/test_intersection.py
index 8cf10b2..92a3413 100644
--- a/stsci/sphere/test/test_intersection.py
+++ b/stsci/sphere/test/test_intersection.py
@@ -190,6 +190,81 @@ def test_difficult_intersections():
yield test_intersection, (polyA, polyB)
+def test_ordering():
+ nrepeat = 10
+
+ A = polygon.SphericalPolygon(
+ [[3.532808036921135653e-01, 6.351523005458726834e-01, -6.868582305351954576e-01],
+ [3.532781068942476010e-01, 6.351564219435104075e-01, -6.868558064493115456e-01],
+ [3.529538811375814156e-01, 6.351027504797477352e-01, -6.870720880104047579e-01],
+ [3.533428330964511477e-01, 6.345142927049303161e-01, -6.874157800432978416e-01],
+ [3.533486351814376647e-01, 6.345151843837375516e-01, -6.874119745843003670e-01],
+ [3.533513056857608414e-01, 6.345111416839894769e-01, -6.874143334620310686e-01],
+ [3.536740696809928530e-01, 6.345607036635456666e-01, -6.872025653337667794e-01],
+ [3.536713200704008631e-01, 6.345649108795897719e-01, -6.872000954889618818e-01],
+ [3.536761865498951884e-01, 6.345656515431040701e-01, -6.871969069700470945e-01],
+ [3.536788213460497765e-01, 6.345616140129455296e-01, -6.871992792142280759e-01],
+ [3.540056257094351122e-01, 6.346113105009757449e-01, -6.869850810245486938e-01],
+ [3.536200722272911379e-01, 6.352081961257413090e-01, -6.866319189293832448e-01],
+ [3.536142814048366390e-01, 6.352072452054380314e-01, -6.866357809093986964e-01],
+ [3.536116196666648781e-01, 6.352113634102898310e-01, -6.866333419163089813e-01],
+ [3.532833767830895755e-01, 6.351574192193063517e-01, -6.868521736876195272e-01],
+ [3.532861440234288386e-01, 6.351531838825796861e-01, -6.868546669018701367e-01],
+ [3.532808036921135653e-01, 6.351523005458726834e-01, -6.868582305351954576e-01]],
+ [3.536414047913637448e-01, 6.348851549491377755e-01, -6.869196436573932196e-01])
+
+ B = polygon.SphericalPolygon(
+ [[3.529249199274748783e-01, 6.356925960489819838e-01, -6.865412764158403958e-01],
+ [3.533126219535084322e-01, 6.351003877952851040e-01, -6.868898664200949744e-01],
+ [3.533173735956686712e-01, 6.351012981906917210e-01, -6.868865805589428053e-01],
+ [3.529301898742857047e-01, 6.356935934402119237e-01, -6.865376437853726310e-01],
+ [3.532584388080926563e-01, 6.357475490961038700e-01, -6.863188247667159070e-01],
+ [3.536441982306618437e-01, 6.351510082118909661e-01, -6.866723948326530769e-01],
+ [3.533173735956686712e-01, 6.351012981906917210e-01, -6.868865805589428053e-01],
+ [3.533126219535084322e-01, 6.351003877952851040e-01, -6.868898664200949744e-01],
+ [3.529898380712340189e-01, 6.350508125724935171e-01, -6.871016225198859351e-01],
+ [3.526006883384300017e-01, 6.356389133339014341e-01, -6.867575456003104373e-01],
+ [3.529249199274748783e-01, 6.356925960489819838e-01, -6.865412764158403958e-01]],
+ [3.532883212044564125e-01, 6.354215160430938258e-01, -6.866053153377369433e-01])
+
+ areas = []
+ for i in xrange(nrepeat):
+ C = A.intersection(B)
+ areas.append(C.area())
+ areas = np.array(areas)
+ assert_array_almost_equal(areas[:-1], areas[1:])
+
+ def roll_polygon(P, i):
+ points = P.points
+ points = np.roll(points[:-1], i, 0)
+ points = np.append(points, [points[0]], 0)
+ return polygon.SphericalPolygon(points, P.inside)
+
+ Aareas = []
+ Bareas = []
+ Careas = []
+ for i in xrange(nrepeat):
+ AS = roll_polygon(A, i)
+ BS = roll_polygon(B, i)
+
+ C = AS.intersection(BS)
+
+ Aareas.append(A.area())
+ Bareas.append(B.area())
+ Careas.append(C.area())
+
+ for j in xrange(nrepeat):
+ CS = roll_polygon(C, j)
+ Careas.append(CS.area())
+
+ Aareas = np.array(Aareas)
+ Bareas = np.array(Bareas)
+ Careas = np.array(Careas)
+ assert_array_almost_equal(Aareas[:-1], Aareas[1:])
+ assert_array_almost_equal(Bareas[:-1], Bareas[1:])
+ assert_array_almost_equal(Careas[:-1], Careas[1:])
+
+
if __name__ == '__main__':
if '--profile' not in sys.argv:
GRAPH_MODE = True