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