1 // Copyright (C) 2007-2020 CEA/DEN, EDF R&D
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.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 // Author : Anthony Geay (CEA/DEN)
21 #include "QuadraticPlanarInterpTest.hxx"
22 #include "InterpKernelGeo2DQuadraticPolygon.hxx"
23 #include "InterpKernelGeo2DElementaryEdge.hxx"
24 #include "InterpKernelGeo2DEdgeArcCircle.hxx"
25 #include "InterpKernelGeo2DEdgeLin.hxx"
32 using namespace INTERP_KERNEL;
40 DoubleEqual(double eps):_eps(eps) { }
41 bool operator()(double x, double y) { return fabs(x-y)<_eps; }
46 void QuadraticPlanarInterpTest::checkNonRegressionOmar0000()
48 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
50 -0.383022221559489, 0.3213938048432697, -0.5745333323392334, 0.4820907072649046, 0.5745333323392335, 0.4820907072649044, 0.383022221559489, 0.3213938048432696,
51 -0.4787777769493612, 0.4017422560540872, 4.592273826833915e-17, 0.75, 0.4787777769493612, 0.401742256054087, 3.061515884555943e-17, 0.5 };
54 -0.383022221559489, -0.1786061951567303, -0.5745333323392334, -0.01790929273509539, 0.5745333323392335, -0.01790929273509556, 0.383022221559489, -0.1786061951567304,
55 -0.4787777769493612, -0.0982577439459128, 4.592273826833915e-17, 0.25, 0.4787777769493612, -0.09825774394591297, 3.061515884555943e-17, 0 };
58 0, 1, 2, 3, 4, 5, 6, 7 };
59 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
60 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
61 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
64 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
65 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
66 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
71 void QuadraticPlanarInterpTest::checkNonRegressionOmar0001()
73 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
75 -0.383022221559489, 0.3213938048432697, -0.5745333323392334, 0.4820907072649046, 0.5745333323392335, 0.4820907072649044, 0.383022221559489, 0.3213938048432696,
76 -0.4787777769493612, 0.4017422560540872, 4.592273826833915e-17, 0.75, 0.4787777769493612, 0.401742256054087, 3.061515884555943e-17, 0.5 };
79 -0.383022221559489, 0.3213938048432697, -0.5745333323392334, 0.4820907072649046, 0.5745333323392335, 0.4820907072649044, 0.383022221559489, 0.3213938048432696,
80 -0.4787777769493612, 0.4017422560540872, 4.592273826833915e-17, 0.75, 0.4787777769493612, 0.401742256054087, 3.061515884555943e-17, 0.5 };
83 0, 1, 2, 3, 4, 5, 6, 7 };
84 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
85 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
86 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.272708,pol1->intersectWith(*pol2),1.e-6);
89 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
90 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
91 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.272708,pol2->intersectWith(*pol1),1.e-6);
96 void QuadraticPlanarInterpTest::checkNonRegressionOmar0002()
98 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
100 -0.383022221559489, 0.3213938048432697, -0.5745333323392334, 0.4820907072649046, 0.5745333323392335, 0.4820907072649044, 0.383022221559489, 0.3213938048432696,
101 -0.4787777769493612, 0.4017422560540872, 4.592273826833915e-17, 0.75, 0.4787777769493612, 0.401742256054087, 3.061515884555943e-17, 0.5 };
104 -0.4979288880273356, 0.4178119462962507, -0.6128355544951823, 0.5142300877492316, 0.6128355544951825, 0.5142300877492314, 0.4979288880273357, 0.4178119462962505,
105 -0.555382221261259, 0.4660210170227412, 4.898425415289509e-17, 0.8, 0.5553822212612591, 0.466021017022741, 3.979970649922726e-17, 0.65 };
108 0, 1, 2, 3, 4, 5, 6, 7 };
109 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
110 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
111 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.122173,pol1->intersectWith(*pol2),1.e-6);
114 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
115 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
116 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.122173,pol2->intersectWith(*pol1),1.e-6);
121 void QuadraticPlanarInterpTest::checkNonRegressionOmar0003()
123 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
125 -0.3535533905932737, 0.3535533905932738, -0.5303300858899106, 0.5303300858899107, 0.5303300858899107, 0.5303300858899106, 0.3535533905932738, 0.3535533905932737,
126 -0.4419417382415922, 0.4419417382415922, 4.592273826833915e-17, 0.75, 0.4419417382415922, 0.4419417382415922, 3.061515884555943e-17, 0.5 };
129 -0.4979288880273356, 0.4178119462962507, -0.6128355544951823, 0.5142300877492316, 0.6128355544951825, 0.5142300877492314, 0.4979288880273357, 0.4178119462962505,
130 -0.555382221261259, 0.4660210170227412, 4.898425415289509e-17, 0.8, 0.5553822212612591, 0.466021017022741, 3.979970649922726e-17, 0.65 };
133 0, 1, 2, 3, 4, 5, 6, 7 };
134 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
135 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
136 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol1->intersectWith(*pol2),1.e-6);
139 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
140 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
141 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol2->intersectWith(*pol1),1.e-6);
146 void QuadraticPlanarInterpTest::checkNonRegressionOmar0004()
148 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
150 -0.4596194077712559, 0.4596194077712559, -0.5303300858899106, 0.5303300858899107, 0.5303300858899107, 0.5303300858899106, 0.4596194077712559, 0.4596194077712559,
151 -0.4949747468305832, 0.4949747468305833, 4.592273826833915e-17, 0.75, 0.4949747468305833, 0.4949747468305832, 3.979970649922726e-17, 0.65 };
154 -0.383022221559489, 0.3213938048432697, -0.6128355544951823, 0.5142300877492316, 0.6128355544951825, 0.5142300877492314, 0.383022221559489, 0.3213938048432696,
155 -0.4979288880273356, 0.4178119462962507, 4.898425415289509e-17, 0.8, 0.4979288880273357, 0.4178119462962505, 3.061515884555943e-17, 0.5 };
158 0, 1, 2, 3, 4, 5, 6, 7 };
159 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
160 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
161 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol1->intersectWith(*pol2),1.e-6);
164 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
165 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
166 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol2->intersectWith(*pol1),1.e-6);
171 void QuadraticPlanarInterpTest::checkNonRegressionOmar0005()
173 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
175 -0.383022221559489, 0.3213938048432697, -0.6128355544951823, 0.5142300877492316, 0.6128355544951825, 0.5142300877492314, 0.383022221559489, 0.3213938048432696,
176 -0.4979288880273356, 0.4178119462962507, 4.898425415289509e-17, 0.8, 0.4979288880273357, 0.4178119462962505, 3.061515884555943e-17, 0.5 };
179 -0.4596194077712559, 0.4596194077712559, -0.5303300858899106, 0.5303300858899107, 0.5303300858899107, 0.5303300858899106, 0.4596194077712559, 0.4596194077712559,
180 -0.4949747468305832, 0.4949747468305833, 4.592273826833915e-17, 0.75, 0.4949747468305833, 0.4949747468305832, 3.979970649922726e-17, 0.65 };
183 0, 1, 2, 3, 4, 5, 6, 7 };
184 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
185 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
186 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol1->intersectWith(*pol2),1.e-6);
189 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
190 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
191 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.109956,pol2->intersectWith(*pol1),1.e-6);
196 void QuadraticPlanarInterpTest::checkNonRegressionOmar0006()
198 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
200 -0.383022221559489, 0.3213938048432697, -0.5362311101832845, 0.4499513267805776, 0.5362311101832846, 0.4499513267805774, 0.383022221559489, 0.3213938048432696,
201 -0.4596266658713867, 0.3856725658119237, 4.28612223837832e-17, 0.7, 0.4596266658713868, 0.3856725658119236, 3.061515884555943e-17, 0.5 };
204 -0.1811733315717646, 0.6761480784023478, -0.2070552360820167, 0.7727406610312547, 0.2070552360820166, 0.7727406610312547, 0.1811733315717645, 0.6761480784023478,
205 -0.1941142838268906, 0.7244443697168013, 4.898425415289509e-17, 0.8, 0.1941142838268906, 0.7244443697168013, 4.28612223837832e-17, 0.7 };
208 0, 1, 2, 3, 4, 5, 6, 7 };
209 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
210 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
211 std::vector<double> val1,val2;
212 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
213 double test1_res[4]={0.,0.366519,0.,0.};
214 double test2_res[4]={0.,0.,0.,0.366519};
215 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
216 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
221 void QuadraticPlanarInterpTest::checkNonRegressionOmar0007()
223 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
225 -0.383022221559489, 0.3213938048432697, -0.5362311101832845, 0.4499513267805776, 0.5362311101832846, 0.4499513267805774, 0.383022221559489, 0.3213938048432696,
226 -0.4596266658713867, 0.3856725658119237, 4.28612223837832e-17, 0.7, 0.4596266658713868, 0.3856725658119236, 3.061515884555943e-17, 0.5 };
229 -0.4499513267805775, 0.5362311101832846, -0.5142300877492315, 0.6128355544951825, -0.1389185421335442, 0.7878462024097664, -0.1215537243668512, 0.6893654271085455,
230 -0.4820907072649045, 0.5745333323392335, -0.3380946093925595, 0.7250462296293201, -0.1302361332501977, 0.738605814759156, -0.2958327832184895, 0.634415450925655 };
233 0, 1, 2, 3, 4, 5, 6, 7 };
234 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
235 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
236 std::vector<double> val1,val2;
237 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
238 double test1_res[4]={0.,0.366519,0.,0.};
239 double test2_res[4]={0.,0.,0.,0.366519};
240 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
241 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
246 void QuadraticPlanarInterpTest::checkNonRegressionOmar0008()
248 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
250 -0.383022221559489, 0.3213938048432697, -0.5362311101832845, 0.4499513267805776, 0.5362311101832846, 0.4499513267805774, 0.383022221559489, 0.3213938048432696,
251 -0.4596266658713867, 0.3856725658119237, 4.28612223837832e-17, 0.7, 0.4596266658713868, 0.3856725658119236, 3.061515884555943e-17, 0.5 };
254 -0.6344154509256549, 0.2958327832184896, -0.72504622962932, 0.3380946093925596, -0.4588611490808367, 0.6553216354311937, -0.401503505445732, 0.5734064310022944,
255 -0.6797308402774874, 0.3169636963055246, -0.6128355544951823, 0.5142300877492316, -0.4301823272632844, 0.614364033216744, -0.5362311101832845, 0.4499513267805776 };
258 0, 1, 2, 3, 4, 5, 6, 7 };
259 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
260 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
261 std::vector<double> val1,val2;
262 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
263 double test1_res[4]={0.,0.18326,0.,0.};
264 double test2_res[4]={0.,0.,0.,0.18326};
265 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-5)));
266 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-5)));
271 void QuadraticPlanarInterpTest::checkNonRegressionOmar0009()
273 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
275 -0.3863703305156274, -0.1035276180410081, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512604, 0.3863703305156274, -0.1035276180410083,
276 -0.4346666218300808, -0.1164685702961342, 1.416374613080751e-16, 0.5, 0.4346666218300808, -0.1164685702961343, 1.133099690464601e-16, 0.4 };
278 0.5, -1.224606353822377e-16, 0.6, -1.469527624586853e-16, -0.6, 7.347638122934263e-17, -0.5, 6.123031769111886e-17,
279 0.55, -1.347066989204615e-16, -1.102145718440139e-16, -0.6, -0.55, 6.735334946023075e-17, -9.184547653667829e-17, -0.5 };
282 0, 1, 2, 3, 4, 5, 6, 7 };
283 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
284 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
285 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
288 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
289 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
290 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
295 void QuadraticPlanarInterpTest::checkNonRegressionOmar0010()
297 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
299 -0.3863703305156274, -0.1035276180410081, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512604, 0.3863703305156274, -0.1035276180410083,
300 -0.4346666218300808, -0.1164685702961342, 1.416374613080751e-16, 0.5, 0.4346666218300808, -0.1164685702961343, 1.133099690464601e-16, 0.4 };
302 0.4346666218300808, -0.1164685702961343, 0.579555495773441, -0.1552914270615124, -0.579555495773441, -0.1552914270615122, -0.4346666218300808, -0.1164685702961342,
303 0.5071110588017609, -0.1358799986788234, -1.102145718440139e-16, -0.6, -0.507111058801761, -0.1358799986788232, -8.266092888301047e-17, -0.45 };
306 0, 1, 2, 3, 4, 5, 6, 7 };
307 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
308 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
309 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
312 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
313 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
314 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
319 void QuadraticPlanarInterpTest::checkNonRegressionOmar0011()
321 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
323 -0.3863703305156274, -0.1035276180410081, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512604, 0.3863703305156274, -0.1035276180410083,
324 -0.4346666218300808, -0.1164685702961342, 1.416374613080751e-16, 0.5, 0.4346666218300808, -0.1164685702961343, 1.133099690464601e-16, 0.4 };
326 0.4829629131445342, -0.1294095225512603, 0.579555495773441, -0.1552914270615124, -0.579555495773441, -0.1552914270615122, -0.4829629131445342, -0.1294095225512602,
327 0.5312592044589877, -0.1423504748063864, -1.102145718440139e-16, -0.6, -0.5312592044589877, -0.1423504748063862, -9.184547653667829e-17, -0.5 };
330 0, 1, 2, 3, 4, 5, 6, 7 };
331 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
332 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
333 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
334 double val1,val2,val3;
335 pol1->intersectForPerimeter(*pol2,val1,val2,val3);
336 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val1,1.e-13);
337 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val2,1.e-13);
338 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val3,1.e-13);
339 std::vector<double> val4,val5;
340 pol1->intersectForPerimeterAdvanced(*pol2,val4,val5);
341 double test1_res[4]={0.,0.,0.,0.};
342 CPPUNIT_ASSERT(std::equal(val4.begin(),val4.end(),test1_res,DoubleEqual(1e-13)));
343 CPPUNIT_ASSERT(std::equal(val5.begin(),val5.end(),test1_res,DoubleEqual(1e-13)));
346 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
347 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
348 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
349 pol1->intersectForPerimeter(*pol2,val1,val2,val3);
350 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val1,1.e-13);
351 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val2,1.e-13);
352 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val3,1.e-13);
353 val4.clear(); val5.clear();
354 pol1->intersectForPerimeterAdvanced(*pol2,val4,val5);
355 CPPUNIT_ASSERT(std::equal(val4.begin(),val4.end(),test1_res,DoubleEqual(1e-13)));
356 CPPUNIT_ASSERT(std::equal(val5.begin(),val5.end(),test1_res,DoubleEqual(1e-13)));
361 void QuadraticPlanarInterpTest::checkNonRegressionOmar2511()
363 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
365 -0.3863703305156274, -0.1035276180410081, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512604, 0.3863703305156274, -0.1035276180410083,
366 -0.4346666218300808, -0.1164685702961342, 1.416374613080751e-16, 0.5, 0.4346666218300808, -0.1164685702961343, 1.133099690464601e-16, 0.4, };
369 0.579555495773441, -0.1552914270615124, -0.579555495773441, -0.1552914270615122, -0.4829629131445342, -0.1294095225512602, 0.4829629131445342, -0.1294095225512603,
370 -1.102145718440139e-16, -0.6, -0.5312592044589877, -0.1423504748063862, -9.184547653667829e-17, -0.5, 0.5312592044589877, -0.1423504748063864, };
373 0, 1, 2, 3, 4, 5, 6, 7 };
374 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
375 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
376 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
377 double val1,val2,val3;
378 pol1->intersectForPerimeter(*pol2,val1,val2,val3);
379 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val1,1.e-13);
380 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val2,1.e-13);
381 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val3,1.e-13);
382 std::vector<double> val4,val5;
383 pol1->intersectForPerimeterAdvanced(*pol2,val4,val5);
384 double test1_res[4]={0.,0.,0.,0.};
385 CPPUNIT_ASSERT(std::equal(val4.begin(),val4.end(),test1_res,DoubleEqual(1e-13)));
386 CPPUNIT_ASSERT(std::equal(val5.begin(),val5.end(),test1_res,DoubleEqual(1e-13)));
389 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
390 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
391 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
392 pol1->intersectForPerimeter(*pol2,val1,val2,val3);
393 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val1,1.e-13);
394 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val2,1.e-13);
395 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,val3,1.e-13);
396 val4.clear(); val5.clear();
397 pol1->intersectForPerimeterAdvanced(*pol2,val4,val5);
398 CPPUNIT_ASSERT(std::equal(val4.begin(),val4.end(),test1_res,DoubleEqual(1e-13)));
399 CPPUNIT_ASSERT(std::equal(val5.begin(),val5.end(),test1_res,DoubleEqual(1e-13)));
404 void QuadraticPlanarInterpTest::checkNonRegressionOmar0012()
406 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
408 -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
409 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
412 6.123031769111886e-18, 1.85, 1.224606353822377e-17, 1.95, 1.224606353822377e-17, 1.55, 6.123031769111886e-18, 1.65,
413 9.18454765366783e-18, 1.9, 0.2, 1.75, 9.18454765366783e-18, 1.6, 0.1, 1.75 };
416 0, 1, 2, 3, 4, 5, 6, 7 };
417 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
418 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
419 std::vector<double> val1,val2;
420 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
421 double test1_res[4]={0.,0.,0.05,0.};
422 double test2_res[4]={0.,0.,0.05,0.};
423 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
424 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
427 std::vector<int> val3;
428 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
429 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
430 pol1->intersectForPoint(*pol2,val3);
431 int test3_res[4]={0,0,1,0};
432 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
437 void QuadraticPlanarInterpTest::checkNonRegressionOmar0013()
439 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
441 -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
442 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
445 6.123031769111886e-18, 1.7, 1.224606353822377e-17, 1.8, 1.224606353822377e-17, 1.4, 6.123031769111886e-18, 1.5,
446 9.18454765366783e-18, 1.75, 0.2, 1.6, 9.18454765366783e-18, 1.45, 0.1, 1.6 };
449 0, 1, 2, 3, 4, 5, 6, 7 };
450 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
451 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
452 std::vector<double> val1,val2;
453 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
454 double test1_res[4]={0.,0.,0.1,0.};
455 double test2_res[4]={0.,0.,0.1,0.};
456 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
457 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
460 std::vector<int> val3;
461 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
462 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
463 pol1->intersectForPoint(*pol2,val3);
464 int test3_res[4]={0,0,2,0};
465 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
470 void QuadraticPlanarInterpTest::checkNonRegressionOmar0014()
472 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
474 -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
475 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
477 6.123031769111886e-18, 1.55, 1.224606353822377e-17, 1.65, 1.224606353822377e-17, 1.25, 6.123031769111886e-18, 1.35,
478 9.18454765366783e-18, 1.6, 0.2, 1.45, 9.18454765366783e-18, 1.3, 0.1, 1.45 };
481 0, 1, 2, 3, 4, 5, 6, 7 };
482 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
483 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
484 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
487 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
488 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
489 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
493 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
494 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
495 std::vector<double> val1,val2;
496 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
497 double test1_res[4]={0.,0.,0.15,0.};
498 double test2_res[4]={0.05,0.,0.1,0.};
499 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
500 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
503 std::vector<int> val3;
504 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
505 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
506 pol1->intersectForPoint(*pol2,val3);
507 int test3_res[4]={0,0,3,0};
508 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
513 void QuadraticPlanarInterpTest::checkNonRegressionOmar0015()
515 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
517 -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
518 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
520 6.123031769111886e-18, 1.4, 1.224606353822377e-17, 1.5, 1.224606353822377e-17, 1.1, 6.123031769111886e-18, 1.2,
521 9.18454765366783e-18, 1.45, 0.2, 1.3, 9.18454765366783e-18, 1.15, 0.1, 1.3 };
524 0, 1, 2, 3, 4, 5, 6, 7 };
525 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
526 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
527 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
530 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
531 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
532 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
536 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
537 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
538 std::vector<double> val1,val2;
539 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
540 double test1_res[4]={0.,0.,0.2,0.};
541 double test2_res[4]={0.1,0.,0.1,0.};
542 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
543 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
546 std::vector<int> val3;
547 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
548 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
549 pol1->intersectForPoint(*pol2,val3);
550 int test3_res[4]={0,0,4,0};
551 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
556 void QuadraticPlanarInterpTest::checkNonRegressionOmar0016()
558 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
560 -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
561 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
563 6.123031769111886e-18, 1.25, 1.224606353822377e-17, 1.35, 1.224606353822377e-17, 0.95, 6.123031769111886e-18, 1.05,
564 9.18454765366783e-18, 1.3, 0.2, 1.15, 9.18454765366783e-18, 0.9999999999999999, 0.1, 1.15 };
567 0, 1, 2, 3, 4, 5, 6, 7 };
568 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
569 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
570 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
573 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
574 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
575 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
579 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
580 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
581 std::vector<double> val1,val2;
582 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
583 double test1_res[4]={0.,0.,0.15,0.};
584 double test2_res[4]={0.1,0.,0.05,0.};
585 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
586 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
589 std::vector<int> val3;
590 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
591 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
592 pol1->intersectForPoint(*pol2,val3);
593 int test3_res[4]={0,0,3,0};
594 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
599 void QuadraticPlanarInterpTest::checkNonRegressionOmar0017()
601 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
604 -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
605 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
608 6.123031769111886e-18, 1.1, 1.224606353822377e-17, 1.2, 1.224606353822377e-17, 0.8, 6.123031769111886e-18, 0.9,
609 9.18454765366783e-18, 1.15, 0.2, 1, 9.18454765366783e-18, 0.85, 0.1, 1 };
612 0, 1, 2, 3, 4, 5, 6, 7 };
613 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
614 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
615 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
618 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
619 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
620 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
624 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
625 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
626 std::vector<double> val1,val2;
627 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
628 double test1_res[4]={0.,0.,0.1,0.};
629 double test2_res[4]={0.1,0.,0.,0.};
630 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
631 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
634 std::vector<int> val3;
635 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
636 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
637 pol1->intersectForPoint(*pol2,val3);
638 int test3_res[4]={0,0,2,0};
639 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
644 void QuadraticPlanarInterpTest::checkNonRegressionOmar0018()
646 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
649 -1, 1.224606353822377e-16, -1.6, 1.959370166115804e-16, 9.796850830579018e-17, 1.6, 6.123031769111886e-17, 1,
650 -1.3, 1.591988259969091e-16, -1.131370849898476, 1.131370849898476, 7.959941299845453e-17, 1.3, -0.7071067811865475, 0.7071067811865476 };
653 6.123031769111886e-18, 0.95, 1.224606353822377e-17, 1.05, 1.224606353822377e-17, 0.6499999999999999, 6.123031769111886e-18, 0.75,
654 9.18454765366783e-18, 1, 0.2, 0.85, 9.18454765366783e-18, 0.7, 0.1, 0.85 };
657 0, 1, 2, 3, 4, 5, 6, 7 };
658 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
659 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
660 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
663 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
664 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
665 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
669 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
670 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
671 std::vector<double> val1,val2;
672 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
673 double test1_res[4]={0.,0.,0.05,0.};
674 double test2_res[4]={0.05,0.,0.,0.};
675 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
676 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
679 std::vector<int> val3;
680 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
681 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
682 pol1->intersectForPoint(*pol2,val3);
683 int test3_res[4]={0,0,1,0};
684 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
689 void QuadraticPlanarInterpTest::checkNonRegressionOmar0019()
691 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
694 -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
695 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
698 0.9500000000000001, 1.836909530733566e-17, 0.8, 3.673819061467131e-17, 1.4, 0, 1.25, 0,
699 0.8750000000000001, 2.755364296100349e-17, 1.1, 0.3, 1.325, 0, 1.1, 0.15 };
702 0, 1, 2, 3, 4, 5, 6, 7 };
703 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
704 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
705 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
708 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
709 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
710 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
715 void QuadraticPlanarInterpTest::checkNonRegressionOmar0020()
717 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
720 -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
721 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
724 0.05000000000000002, 1.836909530733566e-17, -0.09999999999999998, 3.673819061467131e-17, 0.5, 0, 0.35, 0,
725 -0.02499999999999997, 2.755364296100349e-17, 0.2, 0.3, 0.425, 0, 0.2, 0.15 };
728 0, 1, 2, 3, 4, 5, 6, 7 };
729 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
730 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
731 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
734 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
735 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
736 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
740 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
741 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
742 std::vector<double> val1,val2;
743 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
744 double test1_res[4]={0.,0.,0.,0.};
745 double test2_res[4]={0.,0.,0.,0.};
746 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
747 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
750 std::vector<int> val3;
751 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
752 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
753 pol1->intersectForPoint(*pol2,val3);
754 int test3_res[4]={0,0,0,0};
755 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
760 void QuadraticPlanarInterpTest::checkNonRegressionOmar0021()
762 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
765 -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
766 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
769 -1, -0.07999999999999999, -1.15, -0.07999999999999996, -0.55, -0.08, -0.7, -0.08,
770 -1.075, -0.07999999999999997, -0.85, 0.22, -0.625, -0.08, -0.85, 0.06999999999999999 };
773 0, 1, 2, 3, 4, 5, 6, 7 };
774 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
775 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
776 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0311485,pol1->intersectWith(*pol2),1.e-7);
779 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
780 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
781 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0311485,pol2->intersectWith(*pol1),1.e-7);
785 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
786 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
787 std::vector<double> val1,val2;
788 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
789 double test1_res[4]={0.162251,0.151523,0.,0.};
790 double test2_res[4]={0.,0.311383,0.,0.0978193};
791 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
792 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
795 std::vector<int> val3;
796 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
797 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
798 pol1->intersectForPoint(*pol2,val3);
799 int test3_res[4]={2,2,0,0};
800 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
804 void QuadraticPlanarInterpTest::checkNonRegressionOmar0022()
806 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
809 -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
810 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
813 0.15, -0.07999999999999999, 0, -0.07999999999999996, 0.6, -0.08, 0.45, -0.08,
814 0.07500000000000001, -0.07999999999999997, 0.3, 0.22, 0.5249999999999999, -0.08, 0.3, 0.06999999999999999 };
817 0, 1, 2, 3, 4, 5, 6, 7 };
818 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
819 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
820 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00902229,pol1->intersectWith(*pol2),1.e-8);
823 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
824 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
825 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00902229,pol2->intersectWith(*pol1),1.e-8);
830 void QuadraticPlanarInterpTest::checkNonRegressionOmar0023()
832 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
835 -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
836 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5, };
839 0.4156854249492381, 0.5656854249492381, 0.2656854249492381, 0.5656854249492381, 0.8656854249492381, 0.5656854249492381, 0.7156854249492381, 0.5656854249492381,
840 0.3406854249492381, 0.5656854249492381, 0.5656854249492381, 0.8656854249492381, 0.7906854249492381, 0.5656854249492381, 0.5656854249492381, 0.7156854249492381 };
843 0, 1, 2, 3, 4, 5, 6, 7 };
844 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
845 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
846 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0215659,pol1->intersectWith(*pol2),1.e-7);
849 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
850 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
851 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0215659,pol2->intersectWith(*pol1),1.e-7);
856 void QuadraticPlanarInterpTest::checkNonRegressionOmar0024()
858 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
861 -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
862 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
864 0.5656854249492381, 0.5656854249492381, 0.4156854249492382, 0.5656854249492381, 1.015685424949238, 0.5656854249492381, 0.8656854249492382, 0.5656854249492381,
865 0.4906854249492382, 0.5656854249492381, 0.7156854249492381, 0.8656854249492381, 0.9406854249492381, 0.5656854249492381, 0.7156854249492381, 0.7156854249492381 };
868 0, 1, 2, 3, 4, 5, 6, 7 };
869 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
870 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
871 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00877657,pol1->intersectWith(*pol2),1.e-8);
874 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
875 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
876 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00877657,pol2->intersectWith(*pol1),1.e-8);
881 void QuadraticPlanarInterpTest::checkNonRegressionOmar2524()
883 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
886 -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
887 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
889 0.4156854249492382, 0.5656854249492381, 1.015685424949238, 0.5656854249492381, 0.8656854249492382, 0.5656854249492381, 0.5656854249492381, 0.5656854249492381,
890 0.7156854249492381, 0.8656854249492381, 0.9406854249492381, 0.5656854249492381, 0.7156854249492381, 0.7156854249492381, 0.4906854249492382, 0.5656854249492381 };
893 0, 1, 2, 3, 4, 5, 6, 7 };
894 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
895 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
896 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00877657,pol1->intersectWith(*pol2),1.e-8);
899 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
900 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
901 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00877657,pol2->intersectWith(*pol1),1.e-8);
906 void QuadraticPlanarInterpTest::checkNonRegressionOmar0025()
908 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
911 -0.5, 6.123031769111886e-17, -0.8, 9.796850830579018e-17, 0.8, 0, 0.5, 0,
912 -0.65, 7.959941299845453e-17, 4.898425415289509e-17, 0.8, 0.65, 0, 3.061515884555943e-17, 0.5 };
915 0.715685424949238, 0.5656854249492381, 0.565685424949238, 0.5656854249492381, 1.165685424949238, 0.5656854249492381, 1.015685424949238, 0.5656854249492381,
916 0.6406854249492381, 0.5656854249492381, 0.8656854249492381, 0.8656854249492381, 1.090685424949238, 0.5656854249492381, 0.8656854249492381, 0.7156854249492381 };
919 0, 1, 2, 3, 4, 5, 6, 7 };
920 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
921 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
922 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
925 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
926 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
927 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
931 std::vector<int> val3;
932 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
933 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
934 pol1->intersectForPoint(*pol2,val3);
935 int test3_res[4]={0,1,0,0};
936 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
941 void QuadraticPlanarInterpTest::checkNonRegressionOmar0026()
943 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
946 -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
947 -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
950 0.1, 0.95, 0.2, 0.95, -0.2, 0.95, -0.1, 0.95,
951 0.15, 0.95, 1.224606353822377e-17, 0.75, -0.15, 0.95, 6.123031769111886e-18, 0.85 };
954 0, 1, 2, 3, 4, 5, 6, 7 };
955 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
956 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
957 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
960 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
961 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
962 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
966 std::vector<int> val3;
967 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
968 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
969 pol1->intersectForPoint(*pol2,val3);
970 int test3_res[4]={0,1,0,0};
971 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
976 void QuadraticPlanarInterpTest::checkNonRegressionOmar0027()
978 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
981 -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
982 -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
985 -0.1, 0.7, -0.2, 0.7, 0.2, 0.7, 0.1, 0.7,
986 -0.15, 0.7, 1.224606353822377e-17, 0.8999999999999999, 0.15, 0.7, 6.123031769111886e-18, 0.7999999999999999 };
989 0, 1, 2, 3, 4, 5, 6, 7 };
990 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
991 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
992 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00712309,pol1->intersectWith(*pol2),1.e-8);
995 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
996 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
997 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00712309,pol2->intersectWith(*pol1),1.e-8);
1001 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1002 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1003 std::vector<double> val1,val2;
1004 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
1005 double test1_res[4]={0.,0.222704,0.,0.};
1006 double test2_res[4]={0.1,0.0465335,0.1,0.092554};
1007 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
1008 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
1011 std::vector<int> val3;
1012 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1013 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1014 pol1->intersectForPoint(*pol2,val3);
1015 int test3_res[4]={0,4,0,0};
1016 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
1021 void QuadraticPlanarInterpTest::checkNonRegressionOmar0028()
1023 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
1026 -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
1027 -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
1029 double coords2[16]={
1030 -0.07071067811865477, 0.4792893218813453, -0.1414213562373095, 0.4085786437626905, 0.1414213562373095, 0.6914213562373095, 0.07071067811865477, 0.6207106781186548,
1031 -0.1060660171779822, 0.4439339828220179, -0.1414213562373095, 0.6914213562373096, 0.1060660171779822, 0.6560660171779822, -0.07071067811865475, 0.6207106781186548 };
1034 0, 1, 2, 3, 4, 5, 6, 7 };
1035 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1036 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1037 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0471239,pol1->intersectWith(*pol2),1.e-7);
1040 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1041 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1042 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0471239,pol2->intersectWith(*pol1),1.e-7);
1046 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1047 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1048 std::vector<double> val1,val2;
1049 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
1050 double test1_res[4]={0.,0.,0.,0.};
1051 double test2_res[4]={0.1,0.628319,0.1,0.314159};
1052 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
1053 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
1056 std::vector<int> val3;
1057 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1058 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1059 pol1->intersectForPoint(*pol2,val3);
1060 int test3_res[4]={0,1,0,0};
1061 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
1066 void QuadraticPlanarInterpTest::checkNonRegressionOmar0029()
1068 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
1070 -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
1071 -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
1073 double coords2[16]={
1074 -0.07071067811865477, 0.1292893218813453, -0.1414213562373095, 0.05857864376269051, 0.1414213562373095, 0.3414213562373095, 0.07071067811865477, 0.2707106781186548,
1075 -0.1060660171779822, 0.09393398282201787, -0.1414213562373095, 0.3414213562373095, 0.1060660171779822, 0.3060660171779822, -0.07071067811865475, 0.2707106781186548 };
1078 0, 1, 2, 3, 4, 5, 6, 7 };
1079 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1080 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1081 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol1->intersectWith(*pol2),1.e-13);
1084 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1085 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1086 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.,pol2->intersectWith(*pol1),1.e-13);
1090 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1091 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1092 std::vector<double> val1,val2;
1093 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
1094 double test1_res[4]={0.,0.,0.,0.};
1095 double test2_res[4]={0.,0.,0.,0.};
1096 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-13)));
1097 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-13)));
1100 std::vector<int> val3;
1101 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1102 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1103 pol1->intersectForPoint(*pol2,val3);
1104 int test3_res[4]={0,0,0,1};
1105 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
1110 void QuadraticPlanarInterpTest::checkNonRegressionOmar0030()
1112 INTERP_KERNEL::QuadraticPlanarPrecision::setPrecision(1e-7);
1114 -0.4, 4.898425415289509e-17, -0.75, 9.184547653667829e-17, 0.75, 0, 0.4, 0,
1115 -0.575, 7.041486534478669e-17, 4.592273826833915e-17, 0.75, 0.575, 0, 2.449212707644755e-17, 0.4 };
1117 double coords2[16]={
1118 -0.4889087296526012, 0.3889087296526012, -0.5889087296526012, 0.3889087296526012, -0.1889087296526012, 0.3889087296526012, -0.2889087296526012, 0.3889087296526012,
1119 -0.5389087296526012, 0.3889087296526012, -0.3889087296526012, 0.5889087296526012, -0.2389087296526012, 0.3889087296526012, -0.3889087296526012, 0.4889087296526012 };
1122 0, 1, 2, 3, 4, 5, 6, 7 };
1123 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1124 QuadraticPolygon *pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1125 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0471239,pol1->intersectWith(*pol2),1.e-7);
1128 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1129 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1130 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0471239,pol2->intersectWith(*pol1),1.e-7);
1134 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1135 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1136 std::vector<double> val1,val2;
1137 pol1->intersectForPerimeterAdvanced(*pol2,val1,val2);
1138 double test1_res[4]={0.,0.,0.,0.};
1139 double test2_res[4]={0.1,0.628319,0.1,0.314159};
1140 CPPUNIT_ASSERT(std::equal(val1.begin(),val1.end(),test1_res,DoubleEqual(1e-6)));
1141 CPPUNIT_ASSERT(std::equal(val2.begin(),val2.end(),test2_res,DoubleEqual(1e-6)));
1144 std::vector<int> val3;
1145 pol1=buildQuadraticPolygonCoarseInfo(coords,tab8,8);
1146 pol2=buildQuadraticPolygonCoarseInfo(coords2,tab8,8);
1147 pol1->intersectForPoint(*pol2,val3);
1148 int test3_res[4]={0,1,0,0};
1149 CPPUNIT_ASSERT(std::equal(val3.begin(),val3.end(),test3_res));
1154 void QuadraticPlanarInterpTest::checkIsInOrOut()
1156 double coords[8]={ 0.30662641093707971, -0.47819928619088981,
1157 -0.47819928619088964, 0.30662641093707987,
1161 coords[4] = (coords[0] + coords[2]) / 2.0;
1162 coords[5] = (coords[1] + coords[3]) / 2.0;
1164 int tab4[4]={ 0, 1, 2, 3};
1165 QuadraticPolygon *pol1=buildQuadraticPolygonCoarseInfo(coords,tab4,4);
1166 Node * n = new Node(0.3175267678416348, -0.4890996430954449);
1168 CPPUNIT_ASSERT(! pol1->isInOrOut(n)); // node should be out
1173 void QuadraticPlanarInterpTest::checkGetMiddleOfPoints()
1175 { // from testIntersect2DMeshWith1DLine6()
1176 double p1[] = {0.51641754716735844, 2.0};
1177 double p2[] = {0.0, 1.0};
1178 double e_center[] = {-0.71, 2.0};
1179 double mid[] = {0.0,0.0}; // out
1181 Node * start = new Node(0.,0.); Node * end = new Node(0.,0.); // unused
1182 // start, end, center_x, center_y, radius, angle0, angle
1183 EdgeArcCircle e(start, end, e_center, 1.2264175471673588, -0.9533904350433241, 0.95339043504332388);
1185 e.getMiddleOfPoints(p1, p2, mid);
1186 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.37969180470645592, mid[0], 1.e-7);
1187 CPPUNIT_ASSERT_DOUBLES_EQUAL(1.4372640310451197, mid[1], 1.e-7);
1189 e.getMiddleOfPoints(p2, p1, mid);
1190 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.37969180470645592, mid[0], 1.e-7);
1191 CPPUNIT_ASSERT_DOUBLES_EQUAL(1.4372640310451197, mid[1], 1.e-7);
1193 start->decrRef(); end->decrRef();
1195 { // from testSwig2Intersect2DMeshWith1DLine11()
1196 double p1[] = {-1., 0.23453685964236054};
1197 double p2[] = {-0.23453685964235979, 1.0};
1198 double e_center[] = {-4.85, 4.85};
1199 double mid[] = {0.0,0.0}; // out
1201 Node * start = new Node(0.,0.); Node * end = new Node(0.,0.); // unused
1202 // start, end, center_x, center_y, radius, angle0, angle
1203 EdgeArcCircle e(start, end, e_center, 6.0104076400856474, -0.69522150912422953, -0.18035330854643861);
1205 e.getMiddleOfPoints(p1, p2, mid);
1206 CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.6, mid[0], 1.e-7);
1207 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.6, mid[1], 1.e-7);
1209 e.getMiddleOfPoints(p2, p1, mid);
1210 CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.6, mid[0], 1.e-7);
1211 CPPUNIT_ASSERT_DOUBLES_EQUAL(0.6, mid[1], 1.e-7);
1213 start->decrRef(); end->decrRef();
1215 { // from testSwig2Intersect2DMeshWith1DLine11()
1216 double p1[] = {-0.1303327636866019, -1.0};
1217 double p2[] = {-1.0, -0.1303327636866019};
1218 double e_center[] = {-1.9833333333333298, -1.9833333333333298};
1219 double mid[] = {0.0,0.0}; // out
1221 Node * start = new Node(0.,0.); Node * end = new Node(0.,0.); // unused
1222 // start, end, center_x, center_y, radius, angle0, angle
1223 EdgeArcCircle e(start, end, e_center, 2.0977501175200861, 1.0829141821052615, -0.59503203741562627);
1225 e.getMiddleOfPoints(p1, p2, mid);
1226 CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.5, mid[0], 1.e-7);
1227 CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.5, mid[1], 1.e-7);
1229 e.getMiddleOfPoints(p2, p1, mid);
1230 CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.5, mid[0], 1.e-7);
1231 CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.5, mid[1], 1.e-7);
1233 start->decrRef(); end->decrRef();
1237 void QuadraticPlanarInterpTest::checkGetMiddleOfPointsOriented()
1239 { // from testSwig2Colinearize2D3()
1240 double p1[] = {-0.70710678118654746, 0.70710678118654757};
1241 double p2[] = {-0.70710678118654768, -0.70710678118654746};
1242 double e_center[] = {0., 0.};
1243 double mid[] = {0.0,0.0}; // out
1245 Node * start = new Node(0.,0.); Node * end = new Node(0.,0.); // unused
1246 // start, end, center_x, center_y, radius, angle0, angle
1247 EdgeArcCircle e(start, end, e_center, 1.0, -0.7853981633974485, -1.5707963267948966);
1249 e.getMiddleOfPointsOriented(p1, p2, mid);
1250 CPPUNIT_ASSERT_DOUBLES_EQUAL(1., mid[0], 1.e-7);
1251 CPPUNIT_ASSERT_DOUBLES_EQUAL(0., mid[1], 1.e-7);
1253 e.getMiddleOfPoints(p1, p2, mid);
1254 CPPUNIT_ASSERT_DOUBLES_EQUAL(-1., mid[0], 1.e-7);
1255 CPPUNIT_ASSERT_DOUBLES_EQUAL(0., mid[1], 1.e-7);
1257 e.getMiddleOfPointsOriented(p2, p1, mid);
1258 CPPUNIT_ASSERT_DOUBLES_EQUAL(-1., mid[0], 1.e-7);
1259 CPPUNIT_ASSERT_DOUBLES_EQUAL(0., mid[1], 1.e-7);
1261 start->decrRef(); end->decrRef();