diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2016-03-04 11:52:01 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:52:56 +0300 |
commit | 40e5f2ecfa5b55e81933a60a0d8a5cb128e5f98e (patch) | |
tree | 87d3457bfbf5c1162ebd7bfca82a4a96f35c9f4a /geometry/geometry_tests | |
parent | 45426f3f16be2187f283e33ada9a1404ef9280ef (diff) |
Clipping triangles by rect algorithm changed.
Diffstat (limited to 'geometry/geometry_tests')
-rw-r--r-- | geometry/geometry_tests/clipping_test.cpp | 65 |
1 files changed, 52 insertions, 13 deletions
diff --git a/geometry/geometry_tests/clipping_test.cpp b/geometry/geometry_tests/clipping_test.cpp index bfe740d296..212dbc7051 100644 --- a/geometry/geometry_tests/clipping_test.cpp +++ b/geometry/geometry_tests/clipping_test.cpp @@ -81,7 +81,7 @@ UNIT_TEST(Clipping_ClipTriangleByRect) result2.push_back(p2); result2.push_back(p3); }); - vector<m2::PointD> expectedResult2 = { m2::PointD(1.0, 1.0), m2::PointD(1.0, -1.0), m2::PointD(0.0, 0.0) }; + vector<m2::PointD> expectedResult2 = { m2::PointD(0.0, 0.0), m2::PointD(1.0, 1.0), m2::PointD(1.0, -1.0) }; TEST(CompareTriangleLists(result2, expectedResult2), (result2, expectedResult2)); // 2 points inside. @@ -93,8 +93,8 @@ UNIT_TEST(Clipping_ClipTriangleByRect) result3.push_back(p2); result3.push_back(p3); }); - vector<m2::PointD> expectedResult3 = { m2::PointD(1.0, 0.25), m2::PointD(1.0, -0.25), m2::PointD(0.0, -0.5), - m2::PointD(1.0, 0.25), m2::PointD(0.0, -0.5), m2::PointD(0.0, 0.5) }; + vector<m2::PointD> expectedResult3 = { m2::PointD(0.0, 0.5), m2::PointD(1.0, 0.25), m2::PointD(1.0, -0.25), + m2::PointD(0.0, 0.5), m2::PointD(1.0, -0.25), m2::PointD(0.0, -0.5) }; TEST(CompareTriangleLists(result3, expectedResult3), (result3, expectedResult3)); // 2 edges clipping. @@ -106,9 +106,9 @@ UNIT_TEST(Clipping_ClipTriangleByRect) result4.push_back(p2); result4.push_back(p3); }); - vector<m2::PointD> expectedResult4 = { m2::PointD(0.0, 1.0), m2::PointD(0.5, 1.0), m2::PointD(1.0, 0.5), - m2::PointD(0.0, 1.0), m2::PointD(1.0, 0.5), m2::PointD(1.0, 0.0), - m2::PointD(0.0, 1.0), m2::PointD(1.0, 0.0), m2::PointD(0.0, 0.0) }; + vector<m2::PointD> expectedResult4 = { m2::PointD(0.0, 0.0), m2::PointD(0.0, 1.0), m2::PointD(0.5, 1.0), + m2::PointD(0.0, 0.0), m2::PointD(0.5, 1.0), m2::PointD(1.0, 0.5), + m2::PointD(0.0, 0.0), m2::PointD(1.0, 0.5), m2::PointD(1.0, 0.0) }; TEST(CompareTriangleLists(result4, expectedResult4), (result4, expectedResult4)); // 3 edges clipping. @@ -120,10 +120,10 @@ UNIT_TEST(Clipping_ClipTriangleByRect) result5.push_back(p2); result5.push_back(p3); }); - vector<m2::PointD> expectedResult5 = { m2::PointD(-0.5, 1.0), m2::PointD(0.5, 1.0), m2::PointD(1.0, 0.5), - m2::PointD(-0.5, 1.0), m2::PointD(1.0, 0.5), m2::PointD(1.0, 0.0), - m2::PointD(-0.5, 1.0), m2::PointD(1.0, 0.0), m2::PointD(-1.0, 0.0), - m2::PointD(-0.5, 1.0), m2::PointD(-1.0, 0.0), m2::PointD(-1.0, 0.5) }; + vector<m2::PointD> expectedResult5 = { m2::PointD(-1.0, 0.5), m2::PointD(-0.5, 1.0), m2::PointD(0.5, 1.0), + m2::PointD(-1.0, 0.5), m2::PointD(0.5, 1.0), m2::PointD(1.0, 0.5), + m2::PointD(-1.0, 0.5), m2::PointD(1.0, 0.5), m2::PointD(1.0, 0.0), + m2::PointD(-1.0, 0.5), m2::PointD(1.0, 0.0), m2::PointD(-1.0, 0.0) }; TEST(CompareTriangleLists(result5, expectedResult5), (result5, expectedResult5)); // Completely outside. @@ -147,8 +147,8 @@ UNIT_TEST(Clipping_ClipTriangleByRect) result7.push_back(p2); result7.push_back(p3); }); - vector<m2::PointD> expectedResult7 = { m2::PointD(0.5, 1.0), m2::PointD(1.0, 1.0), m2::PointD(1.0, 0.5), - m2::PointD(0.5, 1.0), m2::PointD(1.0, 0.5), m2::PointD(0.5, 0.5) }; + vector<m2::PointD> expectedResult7 = { m2::PointD(0.5, 0.5), m2::PointD(0.5, 1.0), m2::PointD(1.0, 1.0), + m2::PointD(0.5, 0.5), m2::PointD(1.0, 1.0), m2::PointD(1.0, 0.5) }; TEST(CompareTriangleLists(result7, expectedResult7), (result7, expectedResult7)); // Triangle covers rect. @@ -161,8 +161,47 @@ UNIT_TEST(Clipping_ClipTriangleByRect) result8.push_back(p3); }); vector<m2::PointD> expectedResult8 = { m2::PointD(-1.0, 1.0), m2::PointD(1.0, 1.0), m2::PointD(1.0, -1.0), - m2::PointD(-1.0, 1.0), m2::PointD(1.0, -1.0), m2::PointD(-1.0, -1.0) }; + m2::PointD(1.0, -1.0), m2::PointD(-1.0, -1.0), m2::PointD(-1.0, 1.0) }; TEST(CompareTriangleLists(result8, expectedResult8), (result8, expectedResult8)); + + // Clip with an angle of rect. + vector<m2::PointD> result9; + m2::ClipTriangleByRect(r, m2::PointD(1.5, 0.0), m2::PointD(1.5, -1.5), m2::PointD(0.0, -1.5), + [&result9](m2::PointD const & p1, m2::PointD const & p2, m2::PointD const & p3) + { + result9.push_back(p1); + result9.push_back(p2); + result9.push_back(p3); + }); + vector<m2::PointD> expectedResult9 = { m2::PointD(0.5, -1.0), m2::PointD(1.0, -0.5), m2::PointD(1.0, -1.0) }; + TEST(CompareTriangleLists(result9, expectedResult9), (result9, expectedResult9)); + + // Clip with an angle of rect. + vector<m2::PointD> result10; + m2::ClipTriangleByRect(r, m2::PointD(-2.0, -0.5), m2::PointD(-0.5, -0.5), m2::PointD(-0.5, -2.0), + [&result10](m2::PointD const & p1, m2::PointD const & p2, m2::PointD const & p3) + { + result10.push_back(p1); + result10.push_back(p2); + result10.push_back(p3); + }); + vector<m2::PointD> expectedResult10 = { m2::PointD(-1.0, -0.5), m2::PointD(-0.5, -0.5), m2::PointD(-0.5, -1.0), + m2::PointD(-1.0, -0.5), m2::PointD(-0.5, -1.0), m2::PointD(-1.0, -1.0) }; + TEST(CompareTriangleLists(result10, expectedResult10), (result10, expectedResult10)); + + // Clip with 3 angles of rect. + vector<m2::PointD> result11; + m2::ClipTriangleByRect(r, m2::PointD(2.0, -3.0), m2::PointD(-2.0, 1.0), m2::PointD(2.0, 2.0), + [&result11](m2::PointD const & p1, m2::PointD const & p2, m2::PointD const & p3) + { + result11.push_back(p1); + result11.push_back(p2); + result11.push_back(p3); + }); + vector<m2::PointD> expectedResult11 = { m2::PointD(0.0, -1.0), m2::PointD(-1.0, 0.0), m2::PointD(-1.0, 1.0), + m2::PointD(0.0, -1.0), m2::PointD(-1.0, 1.0), m2::PointD(1.0, 1.0), + m2::PointD(0.0, -1.0), m2::PointD(1.0, 1.0), m2::PointD(1.0, -1.0) }; + TEST(CompareTriangleLists(result11, expectedResult11), (result11, expectedResult11)); } UNIT_TEST(Clipping_ClipSplineByRect) |