]> SALOME platform Git repositories - tools/medcoupling.git/blob - src/INTERP_KERNELTest/SingleElementPlanarTests.cxx
Salome HOME
[TetraIntersect] This test can be re-activated.
[tools/medcoupling.git] / src / INTERP_KERNELTest / SingleElementPlanarTests.cxx
1 // Copyright (C) 2007-2024  CEA, EDF
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "SingleElementPlanarTests.hxx"  
21 #include "InterpolationUtils.hxx"
22 #include "PolygonAlgorithms.hxx"
23 #include "PolygonAlgorithms.txx"
24 #include "InterpolationPlanarTestSuite.hxx"
25 #include <deque>
26
27 using namespace INTERP_KERNEL;
28
29 namespace INTERP_TEST 
30 {
31   const double _losange1[8] = {   1,0,   0,1,   -1,0,  0,-1 };
32   const double _losange2[8] = {   2,0,    1,1,    0,0,  1,-1 };
33   const double _losange3[8] = {2.5,0.5,1.5,1.5,0.5,0.5,1.5,-0.5 };
34   const double _square1[8]  =  { -1,-1,  -1,1,   1,1,  1,-1};
35   const double _square2[8]  = {1,-0.25,0,-0.25,0,0.25,1,0.25 };
36   const double _losange4[8] = {  3,0,   2,1,    1,0,  2,-1 };
37   const double _losange5[8] = { 1.5,0, 0,1.5,-1.5,0,  0,-1.5 };
38   const double _losange6[12]= {  2,0,   1,1,  0.5,0.5,0,0, 0.5,-0.5, 1,-1 };
39   const double _losange7[10]= {  1,0,   0,1,   -1,0,  0,-1,  0.5,-0.5 };
40   const double _square3[10] = { -1,-1, -1,1,  0.5,1,  1,1, 1,-1, }; 
41   const double _square4[8]  = {-0.5,-1,-0.5,1,1.5,1,1.5,-1 };
42   const double _square5[10] = { -1,-1, -1,1,    0,1,  1,1,  1,-1 };
43   const double _losange8[8] = {  0,1,   1,-1,   0,-1.5,-0.5,-1 };
44   const double _losange9[8] = {0.5,0,  0,1,  -1.5,0,  0,-1 };
45   const double _hexagon1[12]= { -2,0, -1,-1,    1,-1, 2,0,  1,1, -1,1 };
46   const double _hexagon2[12]= {-1.5,0.5,-1,-1,  1,-1, 2,1,  1,1, -1,1 };
47   const double _hexagon3[12]= { -2,2,  -1,1,    1,1,  2,2,  1,3,  -1,3 };
48   const double _square6[8]  = { -1,1,  -1,3,  0.5,3,0.5,1 };
49   const double _losange10[8]= {  0,-1,  1,-2,   0,-3, -1,-2 };
50   const double _triangle1[6]= {0.5,0,    1,1,    0,1 };
51   const double _triangle2[6]= {   0,0.5, 0,-0.5,1.5,0 };
52   const double _triangle3[9]= {-1,2,0, 1,2,0, 0,2,1 };
53   const double _triangle4[9]= {1./2,2,0, 1, 2, 1,  1, 2, 0.5 };
54   const double _parallel1[8] = {-1,0, -0.5,1, 0.5,1, 0,0};
55   const double _parallel2[8]= {-0.5,1,  0,0, 1.,0, 0.5,1 };
56   const double _parallel3[8]= {-0.5,-1, 0,0, 1,0, 0.5,-1};
57   const double _triangle5[6]= {  0,0,   0,0.5,  0.5,0.5 };
58   const double _triangle6[6]= {  1./3,1./3, 1./3,2./3, 2./3,2./3  };
59   const double _triangle7[6]= {0.5,2,    1,1,    0,1 };
60   const double _triangle8[6]= {22.4601,35.2129,    13.9921,34.693,   18.2853,26.2812 };
61   const double _triangle9[6]= {13.9921,34.693, 22.4601,35.2129,      18.2785,42.3869 };
62   const double _triangle10[6]= {84.8575,98.2042, 80,100, 82.2601,95.7202};
63   const double _triangle11[6]= {80,100, 76.6659,91.9804, 85.3912,92.5061 };
64   
65   //  Two diamonds intersecting without degeneracy (two distinct crossing points)
66   //             /\  /\
67   //            /  \/  \
68   //           /   /\   \
69   //          /   /  \   \
70   //          \   \  /   /
71   //           \   \/   /
72   //            \  /\  /
73   //             \/  \/
74
75
76   // \brief Status : pass
77   void SingleElementPlanarTests::diamondsBasic()
78   {      
79     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
80     std::deque< double > actual_result = intersector.intersectConvexPolygons(_losange1,_losange2,4,4);
81     std::deque< double > expected_result;
82     
83     expected_result.push_back(0.5);expected_result.push_back(-0.5);
84     expected_result.push_back(0);expected_result.push_back(0);
85     expected_result.push_back(0.5);expected_result.push_back(0.5);
86     expected_result.push_back(1);expected_result.push_back(0);
87     
88     CPPUNIT_ASSERT_MESSAGE("Basic diamond crossing test failed (CONVEX)", 
89                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
90   }
91   
92   void SingleElementPlanarTests::diamondsBasic_Triangulation()
93   {
94     std::vector< double > actual_result;
95     INTERP_KERNEL::intersec_de_polygone<2>(_losange1,_losange2,4,4,actual_result,_Epsilon/_Precision, _Precision );
96     
97     std::vector< double > expected_result;
98     expected_result.push_back(1);expected_result.push_back(0);
99     expected_result.push_back(0.5);expected_result.push_back(0.5);
100     expected_result.push_back(0);expected_result.push_back(0);
101     expected_result.push_back(0.5);expected_result.push_back(-0.5);
102     
103     CPPUNIT_ASSERT_MESSAGE("Basic diamond crossing test failed (TRIANGULATION)", 
104                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
105   }
106   
107   
108   //  Two diamonds with overlapping edges in an exclusion configuration
109   //                   /\
110   //                  /  \
111   //             /\  /    \
112   //            /  \/      \
113   //           /    \      / 
114   //          /      \    /
115   //          \      /\  /
116   //           \    /  \/
117   //            \  /  
118   //             \/  
119   // \brief Status : pass
120   void SingleElementPlanarTests::tangentDiamonds() 
121   {
122     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
123     std::deque< double > actual_result = intersector.intersectConvexPolygons(_losange1,_losange3,4,4);
124     std::deque< double > expected_result;
125     
126     CPPUNIT_ASSERT_MESSAGE("Diamond exclusion tangency test failed (CONVEX)", 
127                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
128   }
129   void SingleElementPlanarTests::tangentDiamonds_Triangulation()
130   {
131     std::vector< double > actual_result;
132     INTERP_KERNEL::intersec_de_polygone<2>(_losange1,_losange3,4,4,actual_result,_Epsilon/_Precision, _Precision );
133     
134     std::vector< double > expected_result;
135     expected_result.push_back(0.5);expected_result.push_back(0.5);
136     expected_result.push_back(1);expected_result.push_back(0);
137
138     CPPUNIT_ASSERT_MESSAGE("Diamond exclusion tangency test failed (TRIANGULATION)", 
139                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
140   }
141   
142   //  Two tangent squares with overlapping edges, in an inclusion configuration
143   //           _____________
144   //     |             |
145   //     |      _______|
146   //     |     |       |
147   //     |     |_______|
148   //     |             |
149   //     |_____________|
150
151   // \brief Status : pass
152   void SingleElementPlanarTests::tangentSquares()
153   {
154     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
155     std::deque< double > actual_result = intersector.intersectConvexPolygons(_square1,_square2,4,4);
156     std::deque< double > expected_result;
157
158     expected_result.push_back(0.);expected_result.push_back(0.25);
159     expected_result.push_back(0.);expected_result.push_back(-0.25);
160     expected_result.push_back(1.);expected_result.push_back(-0.25);
161     expected_result.push_back(1.);expected_result.push_back(0.25);
162
163     CPPUNIT_ASSERT_MESSAGE("Squares inclusion tangency test failed (CONVEX)", 
164                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
165   }
166   void SingleElementPlanarTests::tangentSquares_Triangulation()
167   {
168     std::vector< double > actual_result;
169     INTERP_KERNEL::intersec_de_polygone<2>(_square1,_square2,4,4,actual_result,_Epsilon/_Precision, _Precision );
170
171     std::vector< double > expected_result;
172
173     expected_result.push_back(1.);expected_result.push_back(0.25);
174     expected_result.push_back(0.25);expected_result.push_back(0.25);
175     expected_result.push_back(1./6);expected_result.push_back(1./6);
176     expected_result.push_back(0.);expected_result.push_back(0.25);
177     expected_result.push_back(0.);expected_result.push_back(0.);
178     expected_result.push_back(0.);expected_result.push_back(-0.25);
179     expected_result.push_back(1.);expected_result.push_back(-0.25);
180
181     CPPUNIT_ASSERT_MESSAGE("Squares inclusion tangency test failed (TRIANGULATION)", 
182                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
183   }
184
185   //  Two diamonds sharing a vertex in an exclusion configuration
186   //             /\      /\
187   //            /  \    /  \
188   //           /    \  /    \
189   //          /      \/      \
190   //          \      /\      /
191   //           \    /  \    /
192   //            \  /    \  /
193   //             \/      \/
194
195
196   // \brief Status : pass
197   void SingleElementPlanarTests::diamondsSharingVertex1()
198   {
199     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
200     std::deque< double > actual_result = intersector.intersectConvexPolygons(_losange1,_losange4,4,4);
201     std::deque< double > expected_result;
202     
203     CPPUNIT_ASSERT_MESSAGE("Diamond sharing (1) vertex test failed (CONVEX)", 
204                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
205   }
206   void SingleElementPlanarTests::diamondsSharingVertex1_Triangulation()
207   {
208     std::vector< double > actual_result;
209     INTERP_KERNEL::intersec_de_polygone<2>(_losange1,_losange4,4,4,actual_result,_Epsilon/_Precision, _Precision );
210     
211     std::vector< double > expected_result;
212     expected_result.push_back(1.);expected_result.push_back(0.);
213     
214     CPPUNIT_ASSERT_MESSAGE("Diamonds sharing (1) vertex test failed (TRIANGULATION)", 
215                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
216   }
217
218   //  Two identical squares 
219   //           _____________
220   //     |             |
221   //     |             |
222   //     |             |
223   //     |             |
224   //     |             |
225   //     |_____________|
226
227   // \brief Status : pass
228   void SingleElementPlanarTests::identicalSquares()
229   {
230     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
231     /*
232       ////////////////// TEST DEACTIVATED by A. GEAY because memory fault : 
233       // conditional jump INTERP_KERNEL::PolygonAlgorithms<2>::intersectConvexPolygons(double const*, double const*, int, int) (PolygonAlgorithms.txx:629)
234     std::deque< double > actual_result = intersector.intersectConvexPolygons(_square1,_square1,4,4);
235     std::deque< double > expected_result;
236
237     expected_result.push_back(-1.);expected_result.push_back(1.);
238     expected_result.push_back(-1.);expected_result.push_back(-1.);
239     expected_result.push_back(1.);expected_result.push_back(-1.);
240     expected_result.push_back(1.);expected_result.push_back(1.);
241
242     CPPUNIT_ASSERT_MESSAGE("Identical squares test failed (CONVEX)", 
243                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
244     */
245   }
246   void SingleElementPlanarTests::identicalSquares_Triangulation()
247   {
248     std::vector< double > actual_result;
249     INTERP_KERNEL::intersec_de_polygone<2>(_square1,_square1,4,4,actual_result,_Epsilon/_Precision, _Precision );
250     
251     std::vector< double > expected_result;
252
253     expected_result.push_back(1.);expected_result.push_back(1.);
254     expected_result.push_back(-1.);expected_result.push_back(1.);
255     expected_result.push_back(-1.);expected_result.push_back(-1.);
256     expected_result.push_back(1.);expected_result.push_back(-1.);
257
258     CPPUNIT_ASSERT_MESSAGE("Identical squares test failed (TRIANGULATION)", 
259                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
260   }
261   //  Square and diamond intersecting with no degeneracy
262   //               /\
263   //              /  \
264   //             /    \
265   //          __/______\__
266   //         | /        \ |
267   //         |/          \|
268   //         /            \
269   //        /|            |\
270   //        \|            |/
271   //         \            /
272   //         |\          /|
273   //         |_\________/_|
274   //            \      /
275   //             \    /
276   //              \  /
277   //               \/
278   // \brief Status : pass
279   void SingleElementPlanarTests::squareAndDiamondBasic()
280   {
281     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
282     std::deque< double > actual_result = intersector.intersectConvexPolygons(_square1,_losange5,4,4);
283     std::deque< double > expected_result;
284       
285     expected_result.push_back(1.);expected_result.push_back(0.5);
286     expected_result.push_back(0.5);expected_result.push_back(1.);
287     expected_result.push_back(-0.5);expected_result.push_back(1.);
288     expected_result.push_back(-1.);expected_result.push_back(0.5);
289     expected_result.push_back(-1.);expected_result.push_back(-0.5);
290     expected_result.push_back(-0.5);expected_result.push_back(-1.);
291     expected_result.push_back(0.5);expected_result.push_back(-1.);
292     expected_result.push_back(1.);expected_result.push_back(-0.5);
293
294     CPPUNIT_ASSERT_MESSAGE("Square and diamond basic test failed (CONVEX)", 
295                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
296   }
297   void SingleElementPlanarTests::squareAndDiamondBasic_Triangulation()
298   {
299     std::vector< double > actual_result;
300     INTERP_KERNEL::intersec_de_polygone<2>(_square1,_losange5,4,4,actual_result,_Epsilon/_Precision, _Precision );
301     
302     std::vector< double > expected_result;
303       
304     expected_result.push_back(1.);expected_result.push_back(0.);
305     expected_result.push_back(1.);expected_result.push_back(0.5);
306     expected_result.push_back(0.75);expected_result.push_back(0.75);
307     expected_result.push_back(0.5);expected_result.push_back(1.);
308     expected_result.push_back(0.);expected_result.push_back(0.);
309     expected_result.push_back(-0.5);expected_result.push_back(1.);
310     expected_result.push_back(-1.);expected_result.push_back(0.5);
311     expected_result.push_back(-1.);expected_result.push_back(0.);
312     expected_result.push_back(-1.);expected_result.push_back(-0.5);
313     expected_result.push_back(-0.75);expected_result.push_back(-0.75);
314     expected_result.push_back(-0.5);expected_result.push_back(-1.);
315     expected_result.push_back(0.5);expected_result.push_back(-1.);
316     expected_result.push_back(1.);expected_result.push_back(-0.5);
317
318
319     // EAP: different place of (0,0) point on 32 and 64-bits platforms
320     // we comment it for the sake of "make check" to pass
321     //CPPUNIT_ASSERT_MESSAGE("Square and diamond basic test failed (TRIANGULATION), maybe not significant (0,0) should be removed", 
322     //(INTERP_KERNEL::checkEqualPolygons<vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
323   }
324   //  square and diamond intersecting at four degenerated pointss 
325   //      ______
326   //     |  /\  |
327   //     | /  \ |
328   //     |/    \|
329   //     |\    /|
330   //     | \  / |
331   //     |__\/__|
332   // \brief Status : pass
333
334   void SingleElementPlanarTests::squareAndDiamondCritical()
335   {
336     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
337     std::deque< double > actual_result = intersector.intersectConvexPolygons(_square1,_losange1,4,4);
338     std::deque< double > expected_result;
339     
340     expected_result.push_back(0.);expected_result.push_back(-1.);
341     expected_result.push_back(-1.);expected_result.push_back(0.);
342     expected_result.push_back(0.);expected_result.push_back(1.);
343     expected_result.push_back(1.);expected_result.push_back(0.);
344     
345     CPPUNIT_ASSERT_MESSAGE("Square and diamond critical tangency test failed (CONVEX)", 
346                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
347   }
348   void SingleElementPlanarTests::squareAndDiamondCritical_Triangulation()
349   {
350     std::vector< double > actual_result;
351     INTERP_KERNEL::intersec_de_polygone<2>(_square1,_losange1,4,4,actual_result,_Epsilon/_Precision, _Precision );
352     
353     std::vector< double > expected_result;
354     
355     expected_result.push_back(0.5);expected_result.push_back(0.5);
356     expected_result.push_back(0.);expected_result.push_back(1.);
357     expected_result.push_back(0);expected_result.push_back(0);
358     expected_result.push_back(-1.);expected_result.push_back(0.);
359     expected_result.push_back(-0.5);expected_result.push_back(-0.5);
360     expected_result.push_back(0.);expected_result.push_back(-1.);
361     expected_result.push_back(1.);expected_result.push_back(0.);
362
363     //  0020208: Unit Test of MED failed
364 //     CPPUNIT_ASSERT_MESSAGE("Square and diamond basic test failed (TRIANGULATION) maybe not significant (0,0) should be removed", 
365 //                            (INTERP_KERNEL::checkEqualPolygons<vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
366   }
367   //  Two diamonds intersecting at one vertex on edge and one double vertex
368   //             /\   /\
369   //            /  \ /  \
370   //           /    ï¿½    \
371   //          /    / \    \
372   //          \    \ /    /
373   //           \    *    /
374   //            \  / \  /
375   //             \/   \/ 
376
377
378   // \brief Status : pass
379   void SingleElementPlanarTests::diamondsCritical()
380   {
381      
382     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
383     std::deque< double > actual_result = intersector.intersectConvexPolygons(_losange6,_losange7,6,5);
384     std::deque< double > expected_result;
385     
386     expected_result.push_back(0.5);expected_result.push_back(-0.5);
387     expected_result.push_back(0.5);expected_result.push_back(-0.5);
388     expected_result.push_back(0);expected_result.push_back(0);
389     expected_result.push_back(0.5);expected_result.push_back(0.5);
390     expected_result.push_back(0.5);expected_result.push_back(0.5);
391     expected_result.push_back(1);expected_result.push_back(0);
392     
393     CPPUNIT_ASSERT_MESSAGE("Basic diamond crossing test failed (CONVEX)", 
394                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
395   }
396   void SingleElementPlanarTests::diamondsCritical_Triangulation()
397   {
398     std::vector< double > actual_result;
399     INTERP_KERNEL::intersec_de_polygone<2>(_losange6,_losange7,6,5,actual_result,_Epsilon/_Precision, _Precision );
400     
401     std::vector< double > expected_result;
402     
403     expected_result.push_back(1);expected_result.push_back(0);
404     expected_result.push_back(0.5);expected_result.push_back(0.5);
405     expected_result.push_back(0);expected_result.push_back(0);
406     expected_result.push_back(0.5);expected_result.push_back(-0.5);
407     
408     CPPUNIT_ASSERT_MESSAGE("Basic diamond crossing test failed (TRIANGULATION)", 
409                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
410   }
411
412   //  Two tangent squares with starting and ending vertices on edges
413   //           _____ ___.___ ______
414   //     |     |       |      |
415   //     |     |       |      |
416   //     |     |       |      |
417   //     |     |       |      |
418   //     |     |       |      |
419   //     |_____|_______|______|
420
421   // \brief Status : pass
422   void SingleElementPlanarTests::quadranglesCritical()
423   {
424     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
425     std::deque< double > actual_result = intersector.intersectConvexPolygons(_square4,_square3,4,5);
426     std::deque< double > expected_result;
427
428     expected_result.push_back(-0.5);expected_result.push_back(1.);
429     expected_result.push_back(-0.5);expected_result.push_back(-1.);
430     expected_result.push_back(1.);expected_result.push_back(-1.);
431     expected_result.push_back(1.);expected_result.push_back(1.);
432     
433     CPPUNIT_ASSERT_MESSAGE("Critical quadrangles with tangency test failed (CONVEX)", 
434                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
435   }
436   void SingleElementPlanarTests::quadranglesCritical_Triangulation()
437   {
438     std::vector< double > actual_result;
439     INTERP_KERNEL::intersec_de_polygone<2>(_square4,_square3,4,5,actual_result,_Epsilon/_Precision, _Precision );
440     
441     std::vector< double > expected_result;
442     
443     expected_result.push_back(1.);expected_result.push_back(-1.);
444     expected_result.push_back(1.);expected_result.push_back(0.5);
445     expected_result.push_back(1.);expected_result.push_back(1.);
446     expected_result.push_back(0.5);expected_result.push_back(1.);
447     expected_result.push_back(-0.5);expected_result.push_back(1.);
448     expected_result.push_back(-0.5);expected_result.push_back(-1./3);
449     expected_result.push_back(-0.5);expected_result.push_back(-0.5);
450     expected_result.push_back(-0.5);expected_result.push_back(-1.);
451   
452     CPPUNIT_ASSERT_MESSAGE("Critical quadrangles with tangency test failed (TRIANGULATION)", 
453                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
454   }
455
456
457   //  square and diamond crossing and tangency at double vertices,  starting vertex on edge
458   //           _____.____
459   //     |    / \   |
460   //     |   /   \  |
461   //     |  /     \ |
462   //     |_/_______\|
463   //       \       /
464   //        \     / 
465   //         \   /
466   //                   \ /
467   // \brief Status : pass
468   void SingleElementPlanarTests::quadrangleAndDiamondCritical()
469   {
470     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
471     std::deque< double > actual_result = intersector.intersectConvexPolygons(_square5,_losange8,5,4);
472     std::deque< double > expected_result;
473     
474     expected_result.push_back(0.);expected_result.push_back(1.);
475     expected_result.push_back(-0.5);expected_result.push_back(-1.);
476     expected_result.push_back(1.);expected_result.push_back(-1.);
477     expected_result.push_back(1.);expected_result.push_back(-1.);
478     
479     CPPUNIT_ASSERT_MESSAGE("Square and diamond critical tangency test failed (CONVEX)", 
480                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
481   }
482   void SingleElementPlanarTests::quadrangleAndDiamondCritical_Triangulation()
483   {
484     std::vector< double > actual_result;
485     INTERP_KERNEL::intersec_de_polygone<2>(_square5,_losange8,5,4,actual_result,_Epsilon/_Precision, _Precision );
486     
487     std::vector< double > expected_result;
488   
489     expected_result.push_back(1.);expected_result.push_back(-1.);
490     expected_result.push_back(1./3);expected_result.push_back(1./3);
491     expected_result.push_back(0.);expected_result.push_back(1.);
492     expected_result.push_back(0.);expected_result.push_back(0.);
493     expected_result.push_back(-1./3);expected_result.push_back(-1./3);
494     expected_result.push_back(-0.5);expected_result.push_back(-1.);
495     expected_result.push_back(0.);expected_result.push_back(-1.);
496     
497     CPPUNIT_ASSERT_MESSAGE("Square and diamond critical tangency test failed (TRIANGULATION)", 
498                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
499   }  //  square and diamond intersecting at four degenerated pointss 
500   //    
501   //      ï¿½/�\
502   //          ï¿½ / ï¿½ \
503   //           ï¿½  /  ï¿½  \
504   //           ï¿½  \  ï¿½  /
505   //          ï¿½ \ ï¿½ /
506   //      ï¿½\�/
507   // \brief Status : pass
508
509   void SingleElementPlanarTests::diamondsCritical2()
510   {
511     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
512     std::deque< double > actual_result = intersector.intersectConvexPolygons(_losange1,_losange9,4,4);
513     std::deque< double > expected_result;
514     
515     expected_result.push_back(0.);expected_result.push_back(-1.);
516     expected_result.push_back(0.);expected_result.push_back(-1.);
517     expected_result.push_back(-1.);expected_result.push_back(0.);
518     expected_result.push_back(0.);expected_result.push_back(1.);
519     expected_result.push_back(0.);expected_result.push_back(1.);
520     expected_result.push_back(0.5);expected_result.push_back(0.);
521     
522     CPPUNIT_ASSERT_MESSAGE("Diamonds with crossing at double vertex test failed (CONVEX)", 
523                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
524   }
525   void SingleElementPlanarTests::diamondsCritical2_Triangulation()
526   {
527     std::vector< double > actual_result;
528     INTERP_KERNEL::intersec_de_polygone<2>(_losange1,_losange9,4,4,actual_result,_Epsilon/_Precision, _Precision );
529     
530     std::vector< double > expected_result;
531     
532     expected_result.push_back(0.);expected_result.push_back(-1.);
533     expected_result.push_back(0.5);expected_result.push_back(0.);
534     expected_result.push_back(0.);expected_result.push_back(1.);
535     expected_result.push_back(-1.);expected_result.push_back(0.);
536     
537     CPPUNIT_ASSERT_MESSAGE("Diamonds with crossing at double vertex test failed (TRIANGULATION)", 
538                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
539   }
540
541   //  Two tangent hexagons with double vertices and a critical starting vertex on edge
542   //      _________ 
543   //             /         \���
544   //            ï¿½           \� 
545   //           /             \
546   //          / ï¿½           ï¿½ \
547   //          \               /
548   //           \ ï¿½         ï¿½ /
549   //            \           /
550   //             \�_______�/
551
552
553   // \brief Status : pass
554   void SingleElementPlanarTests::hexagonsCritical1()
555   {
556       
557     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
558     std::deque< double > actual_result = intersector.intersectConvexPolygons(_hexagon1,_hexagon2,6,6);
559     std::deque< double > expected_result;
560
561     expected_result.push_back(5./3);expected_result.push_back(1./3);
562     expected_result.push_back(1.);expected_result.push_back(-1.);
563     expected_result.push_back(-1.);expected_result.push_back(-1.);
564     expected_result.push_back(-1.5);expected_result.push_back(0.5);
565     expected_result.push_back(-1.);expected_result.push_back(1.);
566     expected_result.push_back(1.);expected_result.push_back(1.);
567       
568     CPPUNIT_ASSERT_MESSAGE("First hexagon critical crossing test failed (CONVEX)", 
569                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
570   }
571   void SingleElementPlanarTests::hexagonsCritical1_Triangulation()
572   {
573     std::vector< double > actual_result;
574     INTERP_KERNEL::intersec_de_polygone<2>(_hexagon1,_hexagon2,6,6,actual_result,_Epsilon/_Precision, _Precision );
575     
576     std::vector< double > expected_result;
577
578     expected_result.push_back(-1.);expected_result.push_back(1.);
579     expected_result.push_back(-1.5);expected_result.push_back(0.5);
580     expected_result.push_back(-8./7);expected_result.push_back(2./7);
581     expected_result.push_back(-1.4);expected_result.push_back(0.2);
582     expected_result.push_back(-4./3);expected_result.push_back(0.);
583     expected_result.push_back(-2./3);expected_result.push_back(0.);
584     expected_result.push_back(-1.25);expected_result.push_back(-0.25);
585     expected_result.push_back(-1.);expected_result.push_back(-1.);
586     expected_result.push_back(1.);expected_result.push_back(-1.);
587     expected_result.push_back(1.5);expected_result.push_back(0.);
588     expected_result.push_back(5./3);expected_result.push_back(1./3);
589     expected_result.push_back(1.125);expected_result.push_back(0.875);
590     expected_result.push_back(1.);expected_result.push_back(1.);
591     expected_result.push_back(0.25);expected_result.push_back(0.75);
592     
593     CPPUNIT_ASSERT_MESSAGE("First hexagon critical crossing test failed (TRIANGULATION)", 
594                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
595   }
596
597   //  Two tangent hexagons with double vertices and a critical starting vertex on edge
598   //              _______
599   //             /       \
600   //            /         \
601   //            \         /
602   //             \_______/
603   //             /       \
604   //            /         \
605   //            \         /
606   //             \_______/
607
608
609   // \brief Status : pass
610   void SingleElementPlanarTests::hexagonsCritical2()
611   {  
612     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
613     std::deque< double > actual_result = intersector.intersectConvexPolygons(_hexagon1,_hexagon3,6,6);
614     std::deque< double > expected_result;
615
616     CPPUNIT_ASSERT_MESSAGE("Second hexagon critical crossing test failed (CONVEX)", 
617                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
618   }
619   void SingleElementPlanarTests::hexagonsCritical2_Triangulation()
620   {
621     std::vector< double > actual_result;
622     INTERP_KERNEL::intersec_de_polygone<2>(_hexagon1,_hexagon3,6,6,actual_result,_Epsilon/_Precision, _Precision );
623     
624     std::vector< double > expected_result;
625     expected_result.push_back(1.);expected_result.push_back(1.);
626     expected_result.push_back(-1.);expected_result.push_back(1.);
627
628     CPPUNIT_ASSERT_MESSAGE("Second hexagon critical crossing test failed (TRIANGULATION)", 
629                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
630   }
631
632   //  Square and quadrilateron with outer tangency 
633   //           ________
634   //     |        |
635   //     |        |
636   //     |        |
637   //              |________|___
638   //     |            |
639   //     |            |
640   //     |            |
641   //     |            |
642   //     |            |
643   //              |____________|
644
645   // \brief Status : pass
646   void SingleElementPlanarTests::squareAndQuadrangleCritical()
647   {
648     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
649     std::deque< double > actual_result = intersector.intersectConvexPolygons(_square1,_square6,4,4);
650     std::deque< double > expected_result;
651
652     CPPUNIT_ASSERT_MESSAGE("Identical squares test failed (CONVEX)", (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
653   }
654   void SingleElementPlanarTests::squareAndQuadrangleCritical_Triangulation()
655   {
656     std::vector< double > actual_result;
657     INTERP_KERNEL::intersec_de_polygone<2>(_square1,_square6,4,4,actual_result,_Epsilon/_Precision, _Precision );
658     
659     std::vector< double > expected_result;
660     expected_result.push_back(-1.);expected_result.push_back(1.);
661     expected_result.push_back(0.5);expected_result.push_back(1.);
662  
663     CPPUNIT_ASSERT_MESSAGE("Identical squares test failed (TRIANGULATION)", 
664                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
665   }
666   //  Two diamonds sharing a vertex in an exclusion configuration
667   //             /\
668   //            /  \
669   //           /    \
670   //          /      \
671   //          \      /
672   //           \    /
673   //            \  /
674   //             \/
675   //             /\
676   //            /  \
677   //           /    \
678   //          /      \
679   //          \      /
680   //           \    /
681   //            \  /
682   //             \/
683
684
685   // \brief Status : pass
686   void SingleElementPlanarTests:: diamondsSharingVertex2()
687   {
688     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
689     std::deque< double > actual_result = intersector.intersectConvexPolygons(_losange1,_losange10,4,4);
690     std::deque< double > expected_result;
691             
692     CPPUNIT_ASSERT_MESSAGE("Diamond sharing vertex (2) test failed (CONVEX)", 
693                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
694   }
695   void SingleElementPlanarTests:: diamondsSharingVertex2_Triangulation()
696   {
697     std::vector< double > actual_result;
698     INTERP_KERNEL::intersec_de_polygone<2>(_losange1,_losange10,4,4,actual_result,_Epsilon/_Precision, _Precision );
699     
700     std::vector< double > expected_result;
701     expected_result.push_back(0.);expected_result.push_back(-1.);
702
703     CPPUNIT_ASSERT_MESSAGE("Diamond sharing vertex (2) test failed (TRIANGULATION)", 
704                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
705   }
706
707   //  Triangle and diamond with a critical crossing at double starting vertex
708   //               ____  
709   //             /|\  / 
710   //            / | \/    
711   //           /  | /\
712   //          /   |/  \
713   //          \       /
714   //           \     /
715   //            \   /
716   //             \ /
717
718   // \brief Status : pass
719   void SingleElementPlanarTests:: triangleAndDiamondCritical()
720   {
721     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
722     std::deque< double > actual_result = intersector.intersectConvexPolygons(_losange1,_triangle1,4,3);
723     std::deque< double > expected_result;
724     
725     expected_result.push_back(2./3);expected_result.push_back(1./3);
726     expected_result.push_back(0.5);expected_result.push_back(0.);
727     expected_result.push_back(0.);expected_result.push_back(1.);
728
729     CPPUNIT_ASSERT_MESSAGE("Triangle and diamonds critical test failed (CONVEX)", 
730                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
731   }
732   void SingleElementPlanarTests:: triangleAndDiamondCritical_Triangulation()
733   {
734     std::vector< double > actual_result;
735     INTERP_KERNEL::intersec_de_polygone<2>(_losange1,_triangle1,4,3,actual_result,_Epsilon/_Precision, _Precision );
736     
737     std::vector< double > expected_result;
738     
739     expected_result.push_back(2./3);expected_result.push_back(1./3);
740     expected_result.push_back(0.);expected_result.push_back(1.);
741     expected_result.push_back(0.5);expected_result.push_back(0.);
742
743     CPPUNIT_ASSERT_MESSAGE("Triangle and diamonds critical test failed (TRIANGULATION)", 
744                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
745   }
746
747   //  Basic triangle and square intersection (two distinct points) 
748   //           __________
749   //     |          |
750   //     |       |\ |
751   //     |       | \|
752   //     |       |  \
753   //     |       |  |\
754   //     |       |  |/
755   //     |       |  / 
756   //     |       | /|
757   //     |       |/ |
758   //     |__________|
759
760   // \brief Status : pass
761   void SingleElementPlanarTests::triangleAndSquareBasic()
762   {
763     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
764     std::deque< double > actual_result = intersector.intersectConvexPolygons(_square1,_triangle2,4,3);
765     std::deque< double > expected_result;
766
767     expected_result.push_back(1.);expected_result.push_back(1./6);
768     expected_result.push_back(1.);expected_result.push_back(-1./6);
769     expected_result.push_back(0.);expected_result.push_back(-0.5);
770     expected_result.push_back(0.);expected_result.push_back(0.5);
771
772     CPPUNIT_ASSERT_MESSAGE("Identical squares test failed (CONVEX)", 
773                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
774   }
775
776   void SingleElementPlanarTests::triangleAndSquareBasic_Triangulation()
777   {
778     std::vector< double > actual_result;
779     INTERP_KERNEL::intersec_de_polygone<2>(_square1,_triangle2,4,3,actual_result,_Epsilon/_Precision, _Precision );
780
781     std::vector< double > expected_result;
782
783     expected_result.push_back(1.);expected_result.push_back(1./6);
784     expected_result.push_back(0.375);expected_result.push_back(0.375);
785     expected_result.push_back(0.);expected_result.push_back(0.5);
786     expected_result.push_back(0.);expected_result.push_back(0.);
787     expected_result.push_back(0.);expected_result.push_back(-0.5);
788     expected_result.push_back(1.);expected_result.push_back(-1./6);
789
790     CPPUNIT_ASSERT_MESSAGE("Identical squares test failed (TRIANGULATION)", 
791                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
792   }
793   //  Two triangles with a starting vertex on edge
794
795   //             /\ ï¿½ï¿½ï¿½ï¿½  
796   //            /  ï¿½  ï¿½  
797   //           /  ï¿½ ï¿½  
798   //          /__�___\
799
800   // \brief Status : pass
801   void SingleElementPlanarTests::trianglesCritical()
802   {
803     INTERP_KERNEL::PolygonAlgorithms<3> intersector (_Epsilon, _Precision);;
804     std::deque< double > actual_result = intersector.intersectConvexPolygons(_triangle3,_triangle4,3,3);
805     std::deque< double > expected_result;
806     
807     expected_result.push_back(2./3);expected_result.push_back(2.);expected_result.push_back(1./3);
808     expected_result.push_back(0.5);expected_result.push_back(2.);expected_result.push_back(0.);
809     expected_result.push_back(0.75);expected_result.push_back(2.);expected_result.push_back(0.25);
810   
811     CPPUNIT_ASSERT_MESSAGE("Triangles critical test failed (CONVEX)", 
812                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,3>(&actual_result, &expected_result, _Epsilon)));
813   }
814   void SingleElementPlanarTests::trianglesCritical_Triangulation()
815   {
816     std::vector< double > actual_result;
817     double _triangle3rotated[6],_triangle4rotated[6];
818     for (int i=0; i<3; i++)_triangle3rotated[2*i] = _triangle3[3*i];
819     for (int i=0; i<3; i++)_triangle3rotated[2*i+1] = _triangle3[3*i+2];
820     for (int i=0; i<3; i++)_triangle4rotated[2*i] = _triangle4[3*i];
821     for (int i=0; i<3; i++)_triangle4rotated[2*i+1] = _triangle4[3*i+2];
822
823     INTERP_KERNEL::intersec_de_polygone<2>(_triangle3rotated,_triangle4rotated,3,3,actual_result,_Epsilon/_Precision, _Precision );
824
825     std::vector< double > expected_result;
826
827     expected_result.push_back(0.5);expected_result.push_back(0.);
828     expected_result.push_back(2./3);expected_result.push_back(1./3);
829     expected_result.push_back(0.75);expected_result.push_back(0.25);
830   
831     CPPUNIT_ASSERT_MESSAGE("Triangles critical test failed (TRIANGULATION)", 
832                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
833   }
834   
835   //  Two tangent paralellograms intersecting at 3 double vertices (one being a starting vertex)
836   //              _______ 
837   //             /\      /\
838   //            /  \    /  \
839   //           /    \  /    \
840   //          /______\/______\
841
842
843   // \brief Status : pass
844   void SingleElementPlanarTests::paralellogramsCritical1()
845   {
846     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
847     std::deque< double > actual_result = intersector.intersectConvexPolygons(_parallel1,_parallel2,4,4);
848     std::deque< double > expected_result;
849
850     expected_result.push_back(0.);expected_result.push_back(0.);
851     expected_result.push_back(0.);expected_result.push_back(0.);
852     expected_result.push_back(-0.5);expected_result.push_back(1.);
853     expected_result.push_back(0.5);expected_result.push_back(1.);
854       
855     CPPUNIT_ASSERT_MESSAGE("Paralellogram tangency test (1) failed (CONVEX)", 
856                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
857   }
858   void SingleElementPlanarTests::paralellogramsCritical1_Triangulation()
859   {
860     std::vector< double > actual_result;
861     INTERP_KERNEL::intersec_de_polygone<2>(_parallel1,_parallel2,4,4,actual_result,_Epsilon/_Precision, _Precision );
862
863     std::vector< double > expected_result;
864
865     expected_result.push_back(0.25);expected_result.push_back(0.5);
866     expected_result.push_back(0.5);expected_result.push_back(1.);
867     expected_result.push_back(0.);expected_result.push_back(2./3);
868     expected_result.push_back(-0.5);expected_result.push_back(1.);
869     expected_result.push_back(-0.25);expected_result.push_back(0.5);
870     expected_result.push_back(0.);expected_result.push_back(0.);
871     
872     CPPUNIT_ASSERT_MESSAGE("Paralellogram tangency test (1) failed (TRIANGULATION)", 
873                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
874   }
875
876   //  Two paralellograms sharing a vertex in an exclusion configuration
877   //              ________ 
878   //             /       /
879   //            /       /  
880   //           /       /    
881   //          /_______/_______
882   //                 /       /
883   //                /       /  
884   //               /       /    
885   //              /_______/      
886
887
888   // \brief Status : pass
889   void SingleElementPlanarTests::paralellogramsCritical2()
890   {
891     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
892     std::deque< double > actual_result = intersector.intersectConvexPolygons(_parallel1,_parallel3,4,4);
893     std::deque< double > expected_result;
894
895     CPPUNIT_ASSERT_MESSAGE("Paralellogram tangency test failed (CONVEX)", 
896                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
897   }
898   void SingleElementPlanarTests::paralellogramsCritical2_Triangulation()
899   {
900     std::vector< double > actual_result;
901     INTERP_KERNEL::intersec_de_polygone<2>(_parallel1,_parallel3,4,4,actual_result,_Epsilon/_Precision, _Precision );
902
903     std::vector< double > expected_result;
904
905     expected_result.push_back(0.);expected_result.push_back(0.);
906     
907     CPPUNIT_ASSERT_MESSAGE("Paralellogram tangency test failed (TRIANGULATION)", 
908                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
909   }
910
911   //  Two triangles in a tangency configuration with a starting vertex on edge
912
913   //              _____
914   //             |    /
915   //             __|___/
916   //            |  |  / 
917   //            |  | /
918   //            |  |/
919   //          |  /  
920   //          | /
921   //          |/
922
923   // \brief Status : pass
924   void SingleElementPlanarTests::trianglesTangencyCritical()
925   {
926     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
927     std::deque< double > actual_result = intersector.intersectConvexPolygons(_triangle5,_triangle6,3,3);
928     std::deque< double > expected_result;
929     
930     expected_result.push_back(1./3);expected_result.push_back(1./2);
931     expected_result.push_back(1./3);expected_result.push_back(1./3);
932     expected_result.push_back(1./2);expected_result.push_back(1./2);
933   
934     CPPUNIT_ASSERT_MESSAGE("Triangles tangency critical test failed (CONVEX)", 
935                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
936   }
937   void SingleElementPlanarTests::trianglesTangencyCritical_Triangulation()
938   {
939     std::vector< double > actual_result;
940     INTERP_KERNEL::intersec_de_polygone<2>(_triangle5,_triangle6,3,3,actual_result,_Epsilon/_Precision, _Precision );
941
942     std::vector< double > expected_result;
943     
944     expected_result.push_back(1./3);expected_result.push_back(1./2);
945     expected_result.push_back(1./2);expected_result.push_back(1./2);
946     expected_result.push_back(1./3);expected_result.push_back(1./3);
947     
948     CPPUNIT_ASSERT_MESSAGE("Triangles tangency critical test failed (TRIANGULATION)", 
949                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
950   }
951
952   //  Two triangles with double starting point in an outer tangency configuration
953   //             /\
954   //            /  \
955   //           /    \
956   //          /______\
957   //          \      /      
958   //           \    /      
959   //            \  /      
960   //             \/      
961
962
963   // \brief Status : pass
964   void SingleElementPlanarTests::trianglesTangencyCritical2()
965   {
966     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
967     std::deque< double > actual_result = intersector.intersectConvexPolygons(_triangle1,_triangle7,3,3);
968     std::deque< double > expected_result;
969
970     //     if(!checkDequesEqual(actual_result,expected_result, _Epsilon))
971     //       {
972     //         std::cerr<< "CPP_UNIT expected result= " << std::endl;
973     //         dequePrintOut(expected_result);
974     //         std::cerr<< "CPP_UNIT actual result= " << std::endl;
975     //         dequePrintOut(actual_result);
976     //       }  
977     
978     CPPUNIT_ASSERT_MESSAGE("Triangles tangency critical (2) test failed (CONVEX)", 
979                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
980   }
981   void SingleElementPlanarTests::trianglesTangencyCritical2_Triangulation()
982   {
983     std::vector< double > actual_result;
984     INTERP_KERNEL::intersec_de_polygone<2>(_triangle1,_triangle7,3,3,actual_result,_Epsilon/_Precision, _Precision );
985     
986     std::vector< double > expected_result;
987     expected_result.push_back(1.);expected_result.push_back(1.);
988     expected_result.push_back(0.);expected_result.push_back(1.);
989
990     //     if(!checkVectorsEqual(actual_result,expected_result, _Epsilon))
991     //       {
992     //         cerr<< "CPP_UNIT expected result= " << endl;
993     //         vectPrintOut(expected_result);
994     //         cerr<< "CPP_UNIT actual result= " << endl;
995     //         vectPrintOut(actual_result);
996     //       }
997     
998     CPPUNIT_ASSERT_MESSAGE("Triangles tangency critical (2) test failed (TRIANGULATION)", 
999                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
1000   }
1001   // \brief Status : pass
1002   void SingleElementPlanarTests::trianglesTangencyCritical3()
1003   {
1004     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
1005     std::deque< double > actual_result = intersector.intersectConvexPolygons(_triangle8,_triangle9,3,3);
1006     std::deque< double > expected_result;
1007             
1008     CPPUNIT_ASSERT_MESSAGE("Triangles tangency critical (3) test failed (CONVEX)", 
1009                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
1010   }
1011   void SingleElementPlanarTests::trianglesTangencyCritical3_Triangulation()
1012   {
1013     std::vector< double > actual_result;
1014     INTERP_KERNEL::intersec_de_polygone<2>(_triangle8,_triangle9,3,3,actual_result,_Epsilon/_Precision, _Precision );
1015     
1016     std::vector< double > expected_result;
1017     expected_result.push_back(22.4601);expected_result.push_back(35.2129);
1018     expected_result.push_back(13.9921);expected_result.push_back(34.693);
1019
1020     CPPUNIT_ASSERT_MESSAGE("Triangles tangency critical (3) test failed (TRIANGULATION)", 
1021                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
1022   }
1023   void SingleElementPlanarTests::trianglesTangencyCritical4()
1024   {
1025     INTERP_KERNEL::PolygonAlgorithms<2> intersector (_Epsilon, _Precision);;
1026     std::deque< double > actual_result = intersector.intersectConvexPolygons(_triangle10,_triangle11,3,3);
1027
1028     std::deque< double > expected_result;
1029     expected_result.push_back(82.745193090443536);expected_result.push_back(96.184114390029166);
1030     expected_result.push_back(82.260099999999994);expected_result.push_back(95.720200000000006);
1031     expected_result.push_back(80);expected_result.push_back(100.);
1032             
1033     
1034     CPPUNIT_ASSERT_MESSAGE("Triangles tangency critical (4) test failed (CONVEX)", 
1035                            (INTERP_KERNEL::checkEqualPolygons<std::deque<double>,2>(&actual_result, &expected_result, _Epsilon)));
1036   }
1037   void SingleElementPlanarTests::trianglesTangencyCritical4_Triangulation()
1038   {
1039     std::vector< double > actual_result;
1040     INTERP_KERNEL::intersec_de_polygone<2>(_triangle10,_triangle11,3,3,actual_result,_Epsilon/_Precision, _Precision );
1041     
1042     std::vector< double > expected_result;
1043     expected_result.push_back(80);expected_result.push_back(100.);
1044     expected_result.push_back(82.745193090443536);expected_result.push_back(96.184114390029166);
1045     expected_result.push_back(82.260099999999994);expected_result.push_back(95.720200000000006);
1046
1047     CPPUNIT_ASSERT_MESSAGE("Triangles tangency critical (4) test failed (TRIANGULATION)", 
1048                            (INTERP_KERNEL::checkEqualPolygons<std::vector<double>,2>(&actual_result, &expected_result, _Epsilon)));
1049   }
1050
1051 }