/* ---- This file is part of SECONDO. Copyright (C) 2008, University in Hagen, Department of Computer Science, Database Systems for New Applications. SECONDO is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. SECONDO is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with SECONDO; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ---- //paragraph [1] Title: [{\Large \bf \begin {center}] [\end {center}}] //[TOC] [\tableofcontents] //[ue] [\"u] //[ae] [\"a] //[oe] [\"o] //[x] [$\times $] //[->] [$\rightarrow $] [1] Implementation of the MRegionOps3Algebra Mai - November 2017, U. Wiesecke for master thesis. [TOC] 1 Introduction 2 Defines and Includes */ #include "Selftest.h" using namespace std; namespace temporalalgebra { namespace mregionops3 { Selftest::Selftest(){ numberOfTestsRun=0; numberOfTestsFailed=0; }// Konstruktor Selftest::~Selftest(){ }// Destruktortor bool Selftest::run(){ Point3DTest1(); Point2DTest1(); RationalPoint3DTest1(); RationalPoint3DTest2(); RationalVector3DTest1(); RationalVector3DTest2(); RationalVector3DTest3(); Segment3DTest(); RationalSegment3DTest1(); RationalSegment3DTest2(); Point2DTest1(); RationalPoint2DTest1(); RationalVector2DTest1(); Segment2DTest1(); Segment2DTest2(); RationalSegment2DTest1(); RationalSegment2DTest2(); Point3DContainerTest(); RationalPoint3DExtTest(); RationalPoint3DExtSetTest1(); RationalPoint3DExtSetTest2(); RationalPoint3DExtSetTest3(); RationalPoint3DExtSetTest4(); RationalPlane3DTest1(); RationalPlane3DTest2(); RationalPlane3DTest3(); IntersectionPointTest(); IntersectionSegmentTest1(); IntersectionSegmentTest2(); IntersectionSegmentTest3(); IntSegContainerTest1(); IntSegContainerTest2(); PResultFaceTest1(); PResultFaceTest2(); CriticalPResultFaceTest1(); PFaceTest1(); PFaceTest2(); PFaceTest3(); PFaceTest4(); PFaceTest5(); PFaceTest6(); PFaceTest7(); PFaceTest8(); PFaceTest9(); PFaceTest10(); PFaceTest11(); PFaceTest12(); PFaceTest13(); GlobalTimeValuesTest1(); GlobalTimeValuesTest2(); SourceUnitTest1(); SourceUnitTest2(); SourceUnitTest3(); IntSegContainerTest3(); IntSegContainerTest4(); IntSegContainerTest5(); SegmentTest(); SegmentContainerTest1(); SourceUnitTest4(); UnitsTest1(); UnitsTest2(); UnitsTest3(); UnitsTest4(); UnitsTest5(); UnitsTest6(); UnitsTest7(); UnitsTest8(); UnitsTest9(); UnitsTest10(); SourceUnitPairTest1(); LayerTest1(); LayerTest2(); LayerTest3(); LayerContainerTest1(); LayerContainerTest2(); LayerContainerTest3(); LayerContainerTest4(); LayerContainerTest5(); LayerContainerTest6(); LayerContainerTest7(); LayerContainerTest8(); LayerContainerTest9(); cerr << endl; cerr << numberOfTestsRun << " tests run, "; cerr << numberOfTestsFailed << " tests failed." << endl < units = vector(timeValues.size()-1, ResultUnit()); for(size_t i = 0; i < timeValues.size()-1; i++){ pf0.getResultUnit(i,INNER,false,points,units[i],UNIT_A); pf1.getResultUnit(i,INNER,false,points,units[i],UNIT_A); pf2.getResultUnit(i,INNER,false,points,units[i],UNIT_A); pf3.getResultUnit(i,INNER,false,points,units[i],UNIT_B); pf4.getResultUnit(i,INNER,false,points,units[i],UNIT_B); pf5.getResultUnit(i,INNER,false,points,units[i],UNIT_B); }// for vector result = vector(5,ResultUnit()); Segment3D segment0(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(4.2, 2.6, 2.666666666667)); Segment3D segment1(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); Segment3D segment2(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(2.8, 2.6, 2.666666666667)); Segment3D segment3(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(4.2, 2.6, 2.666666666667)); Segment3D segment4(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); Segment3D segment5(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(2.8, 2.6, 2.666666666667)); PResultFace prf0(segment0,segment1); PResultFace prf1(segment2,segment3); PResultFace prf2(segment4,segment5); result[1].addPResultFace(prf0,false); result[1].addPResultFace(prf1,false); result[1].addPResultFace(prf2,false); Segment3D segment6(Point3D(4.2, 2.6, 2.666666666667), Point3D(3.666666666667, 3.666666666667, 4.444444444444)); Segment3D segment7(Point3D(3.5, 4, 2.666666666667), Point3D(3.5, 4, 4.444444444444)); Segment3D segment8(Point3D(3.5, 4, 2.666666666667), Point3D(3.5, 4, 4.444444444444)); Segment3D segment9(Point3D(2.8, 2.6, 2.666666666667), Point3D(3.333333333333, 3.666666666667, 4.444444444444)); Segment3D segment10(Point3D(2.8, 2.6, 2.666666666667), Point3D(3.333333333333, 3.666666666667, 4.444444444444)); Segment3D segment11(Point3D(4.2, 2.6, 2.666666666667), Point3D(3.666666666667, 3.666666666667, 4.444444444444)); PResultFace prf3(segment6,segment7); PResultFace prf4(segment8,segment9); PResultFace prf5(segment10,segment11); result[2].addPResultFace(prf3,false); result[2].addPResultFace(prf4,false); result[2].addPResultFace(prf5,false); Segment3D segment12(Point3D(3.5, 4, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment13(Point3D(3.333333333333, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment14(Point3D(3.333333333333, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment15(Point3D(3.666666666667, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment16(Point3D(3.666666666667, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment17(Point3D(3.5, 4, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); PResultFace prf6(segment12,segment13); PResultFace prf7(segment14,segment15); PResultFace prf8(segment16,segment17); result[3].addPResultFace(prf6,false); result[3].addPResultFace(prf7,false); result[3].addPResultFace(prf8,false); assert_("UnitsTest 1.1", " size of units vectors are different.", units.size() == result.size()); for(size_t i = 0; i < timeValues.size()-1; i++){ // cout << result[i]; // cout << units[i]; assert_("UnitsTest 1.2", " Unit are different.", units[i] == result[i]); }// for // cout << points << endl; // cout << segments << endl; // cout << pf0 << endl; // cout << pf1 << endl; // cout << pf2 << endl; // cout << pf3 << endl; // cout << pf4 << endl; // cout << pf5 << endl; }// UnitsTest1 void Selftest::UnitsTest2(){ GlobalTimeValues timeValues(5); timeValues.addStartAndEndtime(); Point3DContainer points; SegmentContainer segments; // points for unit 0 points.add(Point3D(2,1,0));// 0 points.add(Point3D(5,1,0)); points.add(Point3D(3.5,4,0)); points.add(Point3D(2,1,5)); points.add(Point3D(5,1,5)); points.add(Point3D(3.5,4,5)); // points for unit 0 points.add(Point3D(12,1,0));// 6 points.add(Point3D(15,1,0)); points.add(Point3D(13.5,4,0)); points.add(Point3D(12,1,5)); points.add(Point3D(15,1,5)); points.add(Point3D(13.5,4,5)); // points for unit 1 points.add(Point3D(6,1,0));// 12 points.add(Point3D(9,1,0)); points.add(Point3D(7.5,4,0)); points.add(Point3D(0,4,5)); points.add(Point3D(3,4,5)); points.add(Point3D(1.5,7,5)); // segments for pfaces 0, 1, 2 Segment segment0(0,3); Segment segment1(1,4); Segment segment2(2,5); // segments for pfaces 3, 4, 5 Segment segment3(6,9); Segment segment4(7,10); Segment segment5(8,11); // segments for Pfaces 6, 7, 8 Segment segment6(12,15); Segment segment7(13,16); Segment segment8(14,17); SourceUnit unit0; // Object 0 unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Object 1 unit0.addPFace(segment3,segment4,points); unit0.addPFace(segment4,segment5,points); unit0.addPFace(segment5,segment3,points); // Object 2 SourceUnit unit1; unit1.addPFace(segment6,segment7,points); unit1.addPFace(segment7,segment8,points); unit1.addPFace(segment8,segment6,points); unit0.reSort(); unit1.reSort(); // Intersection unit0.intersection(unit1, timeValues); // cout << unit0; // cout << unit1; // unit0.printFaceCycleEntrys(); // unit1.printFaceCycleEntrys(); // Finalize unit0.finalize(points,timeValues,OUTER,unit1); unit1.finalize(points,timeValues,INNER,unit0); // get result Units vector units = vector( timeValues.size()-1, ResultUnit()); for(size_t i = 0; i < timeValues.size()-1; i++){ unit0.getResultUnit(i,OUTER,false,points,units[i],UNIT_A); unit1.getResultUnit(i,INNER,true,points,units[i],UNIT_B); units[i].evaluateCriticalMSegmens(MINUS); units[i].finalize(); }// for // cout << unit0; // cout << unit1; // unit0.printFaceCycleEntrys(); // unit1.printFaceCycleEntrys(); ResultUnit result0 = units[0]; ResultUnit result1; Segment3D segment10(Point3D(2, 1, 0), Point3D(2, 1, 1.111111111111)); Segment3D segment11(Point3D(5, 1, 0), Point3D(5, 1, 1.111111111111)); PResultFace prf0(segment10,segment11,0,0,0,true,true); result1.addPResultFace(prf0,true); Segment3D segment12(Point3D(3.5, 4, 0), Point3D(3.5, 4, 1.111111111111)); Segment3D segment13(Point3D(2, 1, 0), Point3D(2, 1, 1.111111111111)); PResultFace prf1(segment12,segment13,0,0,1,true,false); result1.addPResultFace(prf1,true); Segment3D segment14(Point3D(5, 1, 0), Point3D(5, 1, 1.111111111111)); Segment3D segment15(Point3D(3.5, 4, 0), Point3D(3.5, 4, 1.111111111111)); PResultFace prf2(segment14,segment15,0,0,2,true,false); result1.addPResultFace(prf2,true); Segment3D segment16(Point3D(12, 1, 0), Point3D(12, 1, 1.111111111111)); Segment3D segment17(Point3D(15, 1, 0), Point3D(15, 1, 1.111111111111)); PResultFace prf3(segment16,segment17,1,0,0,true,true); result1.addPResultFace(prf3,true); Segment3D segment18(Point3D(13.5, 4, 0), Point3D(13.5, 4, 1.111111111111)); Segment3D segment19(Point3D(12, 1, 0), Point3D(12, 1, 1.111111111111)); PResultFace prf4(segment18,segment19,1,0,1,true,false); result1.addPResultFace(prf4,true); Segment3D segment20(Point3D(15, 1, 0), Point3D(15, 1, 1.111111111111)); Segment3D segment21(Point3D(13.5, 4, 0), Point3D(13.5, 4, 1.111111111111)); PResultFace prf5(segment20,segment21,1,0,2,true,false); result1.addPResultFace(prf5,true); assert_("UnitsTest 2.1", "ResultUnits don't equal.", result0 == result1); // cout << result0; // cout << result1; ResultUnit result2 = units[1]; ResultUnit result3; Segment3D segment22(Point3D(2, 1, 1.111111111111), Point3D(2, 1, 2.666666666667)); Segment3D segment23(Point3D(5, 1, 1.111111111111), Point3D(5, 1, 2.666666666667)); PResultFace prf6(segment22,segment23,0,0,0,true,true); result3.addPResultFace(prf6,true); Segment3D segment24(Point3D(3.5, 4, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); Segment3D segment25(Point3D(2, 1, 1.111111111111), Point3D(2, 1, 2.666666666667)); PResultFace prf7(segment24,segment25,0,0,1,true,false); result3.addPResultFace(prf7,true); Segment3D segment26(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); Segment3D segment27(Point3D(3.5, 4, 1.111111111111), Point3D (3.5, 4, 2.666666666667)); PResultFace prf8(segment26,segment27,0,0,2,true,false); result3.addPResultFace(prf8,true); Segment3D segment28(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(2.8, 2.6, 2.666666666667)); Segment3D segment29(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); PResultFace prf9(segment28,segment29,0,0,3,true,true); result3.addPResultFace(prf9,true); Segment3D segment30(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(4.2, 2.6, 2.666666666667)); Segment3D segment31(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(2.8, 2.6, 2.666666666667)); PResultFace prf10(segment30,segment31,0,0,4,true,false); result3.addPResultFace(prf10,true); Segment3D segment32(Point3D(5, 1, 1.111111111111), Point3D(5, 1, 2.666666666667)); Segment3D segment33(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D (4.2, 2.6, 2.666666666667)); PResultFace prf11(segment32,segment33,0,0,5,true,false); result3.addPResultFace(prf11,true); Segment3D segment34(Point3D(12, 1, 1.111111111111), Point3D(12, 1, 2.666666666667)); Segment3D segment35(Point3D(15, 1, 1.111111111111), Point3D(15, 1, 2.666666666667)); PResultFace prf12(segment34,segment35,1,0,0,true,true); result3.addPResultFace(prf12,true); Segment3D segment36(Point3D(13.5, 4, 1.111111111111), Point3D(13.5, 4, 2.666666666667)); Segment3D segment37(Point3D(12, 1, 1.111111111111), Point3D(12, 1, 2.666666666667)); PResultFace prf13(segment36,segment37,1,0,1,true,false); result3.addPResultFace(prf13,true); Segment3D segment38(Point3D(15, 1, 1.111111111111), Point3D(15, 1, 2.666666666667)); Segment3D segment39(Point3D(13.5, 4, 1.111111111111), Point3D(13.5, 4, 2.666666666667)); PResultFace prf14(segment38,segment39,1,0,2,true,false); result3.addPResultFace(prf14,true); assert_("UnitsTest 2.2", "ResultUnits don't equal.", result2 == result3); // cout << result2; // cout << result3; ResultUnit result4 = units[2]; ResultUnit result5; Segment3D segment40(Point3D(2, 1, 2.666666666667), Point3D(2, 1, 4.444444444444)); Segment3D segment41(Point3D(5, 1, 2.666666666667), Point3D(5, 1, 4.444444444444)); PResultFace prf15(segment40,segment41,0,0,0,true,true); result5.addPResultFace(prf15,true); Segment3D segment42(Point3D(2.8, 2.6, 2.666666666667), Point3D(3.333333333333, 3.666666666667, 4.444444444444)); Segment3D segment43(Point3D(2, 1, 2.666666666667), Point3D(2, 1, 4.444444444444)); PResultFace prf16(segment42,segment43,0,0,1,true,false); result5.addPResultFace(prf16,true); Segment3D segment44(Point3D(4.2, 2.6, 2.666666666667), Point3D(3.666666666667, 3.666666666667, 4.444444444444)); Segment3D segment45(Point3D(2.8, 2.6, 2.666666666667), Point3D(3.333333333333, 3.666666666667, 4.444444444444)); PResultFace prf17(segment44,segment45,0,0,2,true,false); result5.addPResultFace(prf17,true); Segment3D segment46(Point3D(5, 1, 2.666666666667), Point3D(5, 1, 4.444444444444)); Segment3D segment47(Point3D(4.2, 2.6, 2.666666666667), Point3D(3.666666666667, 3.666666666667, 4.444444444444)); PResultFace prf18(segment46,segment47,0,0,3,true,false); result5.addPResultFace(prf18,true); Segment3D segment48(Point3D(12, 1, 2.666666666667), Point3D(12, 1, 4.444444444444)); Segment3D segment49(Point3D(15, 1, 2.666666666667), Point3D(15, 1, 4.444444444444)); PResultFace prf19(segment48,segment49,1,0,0,true,true); result5.addPResultFace(prf19,true); Segment3D segment50(Point3D(13.5, 4, 2.666666666667), Point3D(13.5, 4, 4.444444444444)); Segment3D segment51(Point3D(12, 1, 2.666666666667), Point3D(12, 1, 4.444444444444)); PResultFace prf20(segment50,segment51,1,0,1,true,false); result5.addPResultFace(prf20,true); Segment3D segment52(Point3D(15, 1, 2.666666666667), Point3D(15, 1, 4.444444444444)); Segment3D segment53(Point3D(13.5, 4, 2.666666666667), Point3D(13.5, 4, 4.444444444444)); PResultFace prf21(segment52,segment53,1,0,2,true,false); result5.addPResultFace(prf21,true); assert_("UnitsTest 2.3", "ResultUnits don't equal.", result4 == result5); // cout << result4; // cout << result5; ResultUnit result6 = units[3]; ResultUnit result7; Segment3D segment54(Point3D(2, 1, 4.444444444444), Point3D(2, 1, 4.666666666667)); Segment3D segment55(Point3D(5, 1, 4.444444444444), Point3D(5, 1, 4.666666666667)); PResultFace prf22(segment54,segment55,0,0,0,true,true); result7.addPResultFace(prf22,true); Segment3D segment56(Point3D(3.333333333333, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment57(Point3D(2, 1, 4.444444444444), Point3D(2, 1, 4.666666666667)); PResultFace prf23(segment56,segment57,0,0,1,true,false); result7.addPResultFace(prf23,true); Segment3D segment58(Point3D(3.666666666667, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment59(Point3D(3.333333333333, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); PResultFace prf24(segment58,segment59,0,0,2,true,false); result7.addPResultFace(prf24,true); Segment3D segment60(Point3D(3.5, 4, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment61(Point3D(3.666666666667, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); PResultFace prf25(segment60,segment61,0,0,3,true,true); result7.addPResultFace(prf25,true); Segment3D segment62(Point3D(3.5, 4, 4.444444444444), Point3D(3.5, 4, 4.666666666667)); Segment3D segment63(Point3D(3.5, 4, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); PResultFace prf26(segment62,segment63,0,0,4,true,false); result7.addPResultFace(prf26,true); Segment3D segment64(Point3D(5, 1, 4.444444444444), Point3D(5, 1, 4.666666666667)); Segment3D segment65(Point3D(3.5, 4, 4.444444444444), Point3D(3.5, 4, 4.666666666667)); PResultFace prf27(segment64,segment65,0,0,5,true,false); result7.addPResultFace(prf27,true); Segment3D segment66(Point3D(12, 1, 4.444444444444), Point3D(12, 1, 4.666666666667)); Segment3D segment67(Point3D(15, 1, 4.444444444444), Point3D(15, 1, 4.666666666667)); PResultFace prf28(segment66,segment67,1,0,0,true,true); result7.addPResultFace(prf28,true); Segment3D segment68(Point3D(13.5, 4, 4.444444444444), Point3D(13.5, 4, 4.666666666667)); Segment3D segment69(Point3D(12, 1, 4.444444444444), Point3D(12, 1, 4.666666666667)); PResultFace prf29(segment68,segment69,1,0,1,true,false); result7.addPResultFace(prf29,true); Segment3D segment70(Point3D(15, 1, 4.444444444444), Point3D(15, 1, 4.666666666667)); Segment3D segment71(Point3D(13.5, 4, 4.444444444444), Point3D(13.5, 4, 4.666666666667)); PResultFace prf30(segment70,segment71,1,0,2,true,false); result7.addPResultFace(prf30,true); assert_("UnitsTest 2.4", "ResultUnits don't equal.", result6 == result7); // cout << result6; // cout << result7; ResultUnit result8 = units[4]; ResultUnit result9; Segment3D segment72(Point3D(2, 1, 4.666666666667), Point3D(2, 1, 5)); Segment3D segment73(Point3D(5, 1, 4.666666666667), Point3D(5, 1, 5)); PResultFace prf31(segment72,segment73,0,0,0,true,true); result9.addPResultFace(prf31,true); Segment3D segment74(Point3D(3.5, 4, 4.666666666667), Point3D(3.5, 4, 5)); Segment3D segment75(Point3D(2, 1, 4.666666666667), Point3D(2, 1, 5)); PResultFace prf32(segment74,segment75,0,0,1,true,false); result9.addPResultFace(prf32,true); Segment3D segment76(Point3D(5, 1, 4.666666666667), Point3D(5, 1, 5)); Segment3D segment77(Point3D(3.5, 4, 4.666666666667), Point3D(3.5, 4, 5)); PResultFace prf33(segment76,segment77,0,0,2,true,false); result9.addPResultFace(prf33,true); Segment3D segment78(Point3D(12, 1, 4.666666666667), Point3D(12, 1, 5)); Segment3D segment79(Point3D(15, 1, 4.666666666667), Point3D(15, 1, 5)); PResultFace prf34(segment78,segment79,1,0,0,true,true); result9.addPResultFace(prf34,true); Segment3D segment80(Point3D(13.5, 4, 4.666666666667), Point3D(13.5, 4, 5)); Segment3D segment81(Point3D(12, 1, 4.666666666667), Point3D(12, 1, 5)); PResultFace prf35(segment80,segment81,1,0,1,true,false); result9.addPResultFace(prf35,true); Segment3D segment82(Point3D(15, 1, 4.666666666667), Point3D(15, 1, 5)); Segment3D segment83(Point3D(13.5, 4, 4.666666666667), Point3D(13.5, 4, 5)); PResultFace prf36(segment82,segment83,1,0,2,true,false); result9.addPResultFace(prf36,true); assert_("UnitsTest 2.5", "ResultUnits don't equal.", result8 == result9); // cout << result8; // cout << result9; }// ResultUnitTest2 void Selftest::UnitsTest3(){ Point3DContainer points; GlobalTimeValues timeValues(5); timeValues.addStartAndEndtime(); // points for unit 0 points.add(Point3D(2,1,0));// 0 points.add(Point3D(5,1,0)); points.add(Point3D(3.5,4,0)); points.add(Point3D(2,1,5)); points.add(Point3D(5,1,5)); points.add(Point3D(3.5,4,5)); // points for unit 1 points.add(Point3D(6,1,0));// 6 points.add(Point3D(9,1,0)); points.add(Point3D(7.5,4,0)); points.add(Point3D(0,4,5)); points.add(Point3D(3,4,5)); points.add(Point3D(1.5,7,5)); // segments for pfaces 0, 1, 2 Segment segment0(0,3); Segment segment1(1,4); Segment segment2(2,5); // segments for pfaces 3, 4, 5 Segment segment3(6,9); Segment segment4(7,10); Segment segment5(8,11); // Build unit 0 SourceUnit unit0; unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Build unit 1 SourceUnit unit1; unit1.addPFace(segment3,segment4,points); unit1.addPFace(segment4,segment5,points); unit1.addPFace(segment5,segment3,points); // Intersection unit0.intersection(unit1,timeValues); // Finalize unit0.finalize(points,timeValues,INNER,unit1); unit1.finalize(points,timeValues,INNER,unit0); // get result Units vector units = vector(timeValues.size()-1, ResultUnit()); for(size_t i = 0; i < timeValues.size()-1; i++){ unit0.getResultUnit(i,INNER,false,points,units[i],UNIT_A); unit1.getResultUnit(i,INNER,false,points,units[i],UNIT_B); }// for vector result = vector(5,ResultUnit()); Segment3D segment10(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(4.2, 2.6, 2.666666666667)); Segment3D segment11(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); Segment3D segment12(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(2.8, 2.6, 2.666666666667)); Segment3D segment13(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(4.2, 2.6, 2.666666666667)); Segment3D segment14(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); Segment3D segment15(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(2.8, 2.6, 2.666666666667)); PResultFace prf0(segment10,segment11); PResultFace prf1(segment12,segment13); PResultFace prf2(segment14,segment15); result[1].addPResultFace(prf0,false); result[1].addPResultFace(prf1,false); result[1].addPResultFace(prf2,false); Segment3D segment16(Point3D(4.2, 2.6, 2.666666666667), Point3D(3.666666666667, 3.666666666667, 4.444444444444)); Segment3D segment17(Point3D(3.5, 4, 2.666666666667), Point3D(3.5, 4, 4.444444444444)); Segment3D segment18(Point3D(3.5, 4, 2.666666666667), Point3D(3.5, 4, 4.444444444444)); Segment3D segment19(Point3D(2.8, 2.6, 2.666666666667), Point3D(3.333333333333, 3.666666666667, 4.444444444444)); Segment3D segment20(Point3D(2.8, 2.6, 2.666666666667), Point3D(3.333333333333, 3.666666666667, 4.444444444444)); Segment3D segment21(Point3D(4.2, 2.6, 2.666666666667), Point3D(3.666666666667, 3.666666666667, 4.444444444444)); PResultFace prf3(segment16,segment17); PResultFace prf4(segment18,segment19); PResultFace prf5(segment20,segment21); result[2].addPResultFace(prf3,false); result[2].addPResultFace(prf4,false); result[2].addPResultFace(prf5,false); Segment3D segment22(Point3D(3.5, 4, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment23(Point3D(3.333333333333, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment24(Point3D(3.333333333333, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment25(Point3D(3.666666666667, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment26(Point3D(3.666666666667, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment27(Point3D(3.5, 4, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); PResultFace prf6(segment22,segment23); PResultFace prf7(segment24,segment25); PResultFace prf8(segment26,segment27); result[3].addPResultFace(prf6,false); result[3].addPResultFace(prf7,false); result[3].addPResultFace(prf8,false); assert_("UnitsTest 3.1", " size of units vectors are different.", units.size() == result.size()); for(size_t i = 0; i < result.size(); i++){ assert_("UnitTest 3.2", " Unit are different.", units[i] == result[i]); // cout << result[i]; // cout << units[i]; }// for // cout << unit0 << endl; // cout << unit1 << endl; }// UnitTest3 void Selftest::UnitsTest4(){ Point3DContainer points; GlobalTimeValues timeValues(5); timeValues.addStartAndEndtime(); // points for unit 0 size_t i0 = points.add(Point3D(6,1,0));// 0 size_t i1 = points.add(Point3D(9,1,0)); size_t i2 = points.add(Point3D(7.5,4,0)); size_t i3 = points.add(Point3D(0,4,5)); size_t i4 = points.add(Point3D(3,4,5)); size_t i5 = points.add(Point3D(1.5,7,5)); // points for unit 2 size_t i6 = points.add(Point3D(6,1,0));// 6 size_t i7 = points.add(Point3D(8,1,0)); size_t i8 = points.add(Point3D(7,3.5,0)); size_t i9 = points.add(Point3D(0,4,5)); size_t i10= points.add(Point3D(2,4,5)); size_t i11= points.add(Point3D(1,6.5,5)); // segments for pfaces 0, 1, 2 Segment segment0(i0,i3); Segment segment1(i1,i4); Segment segment2(i2,i5); // segments for pfaces 3, 4, 5 Segment segment3(i6,i9); Segment segment4(i7,i10); Segment segment5(i8,i11); // Build unit 0 SourceUnit unit0; unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Build unit 1 SourceUnit unit1; unit1.addPFace(segment3,segment4,points); unit1.addPFace(segment4,segment5,points); unit1.addPFace(segment5,segment3,points); // Intersection unit0.intersection(unit1,timeValues); // Finalize // cout << unit0; // cout << unit1; unit0.finalize(points,timeValues,OUTER,unit1); // cout << unit0; unit1.finalize(points,timeValues,INNER,unit0); // cout << points; // cout << unit1; // get result Units vector units = vector(timeValues.size()-1, ResultUnit()); for(size_t i = 0; i < timeValues.size()-1; i++){ unit0.getResultUnit(i,OUTER,false,points, units[i],UNIT_A); unit1.getResultUnit(i,INNER,true,points, units[i],UNIT_B); // cout << units[i]; units[i].evaluateCriticalMSegmens(MINUS); units[i].finalize(); }// for ResultUnit result; Segment3D segment10(Point3D(7.1111111111111, 3.2222222222222, 0), Point3D(1.1111111111111, 6.2222222222222, 5)); Segment3D segment11(Point3D(8, 1, 0), Point3D(2, 4, 5)); Segment3D segment12(Point3D(7.5, 4, 0), Point3D(1.5, 7, 5)); Segment3D segment13(Point3D(7.1111111111111, 3.2222222222222, 0), Point3D(1.1111111111111, 6.2222222222222, 5)); Segment3D segment14(Point3D(9, 1, 0), Point3D(3, 4, 5)); Segment3D segment15(Point3D(7.5, 4, 0), Point3D(1.5, 7, 5)); Segment3D segment16(Point3D(8, 1, 0), Point3D(2, 4, 5)); Segment3D segment17(Point3D(9, 1, 0), Point3D(3, 4, 5)); PResultFace prf0(segment10,segment11,0,0,0,true,true); PResultFace prf1(segment12,segment13,0,0,1,true,false); PResultFace prf2(segment14,segment15,0,0,2,true,false); PResultFace prf3(segment16,segment17,0,0,3,true,true); result.addPResultFace(prf0,true); result.addPResultFace(prf1,true); result.addPResultFace(prf2,true); result.addPResultFace(prf3,true); assert_("UnitsTest 4", "ResultUnits don't equal.", result == units[0]); // cout << unit0; // cout << unit1; // cout << units[0]; // cout << result; }// UnitsTest4 void Selftest::UnitsTest5(){ Point3DContainer points; SegmentContainer segments; GlobalTimeValues timeValues(5); timeValues.addStartAndEndtime(); // points for pface 0, 1, 2 points.add(Point3D(1,1,0)); points.add(Point3D(5,1,0)); points.add(Point3D(3,5,0)); points.add(Point3D(1,1,5)); points.add(Point3D(1,1,5)); points.add(Point3D(5,1,5)); points.add(Point3D(3,5,5)); // points for pface 3, 4, 5 points.add(Point3D(3,1,0)); points.add(Point3D(4,3,0)); points.add(Point3D(2,3,0)); points.add(Point3D(3,1,5)); points.add(Point3D(4,3,5)); points.add(Point3D(2,3,5)); // segments for pfaces 0, 1, 2 Segment segment0(0,3); Segment segment1(1,4); Segment segment2(2,5); // segments for pfaces 3, 4, 5 Segment segment3(6,9); Segment segment4(7,10); Segment segment5(8,11); // Build unit 0 SourceUnit unit0; unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Build unit 1 SourceUnit unit1; unit1.addPFace(segment3,segment4,points); unit1.addPFace(segment4,segment5,points); unit1.addPFace(segment5,segment3,points); // Intersection unit0.intersection(unit1,timeValues); // Finalize // cout << unit0; // cout << unit1; unit0.finalize(points,timeValues,OUTER,unit1); // cout << unit0; unit1.finalize(points,timeValues,OUTER,unit0); // cout << unit1; // cout << timeValues; vector units = vector( timeValues.size()-1, ResultUnit()); for(size_t i = 0; i < timeValues.size()-1; i++){ unit0.getResultUnit(i,OUTER,false,points,units[i],UNIT_A); unit1.getResultUnit(i,OUTER,false,points,units[i],UNIT_B); units[i].evaluateCriticalMSegmens(UNION); units[i].finalize(); // cout << units[i]; }// for ResultUnit result0 = units[0]; ResultUnit result1; PResultFace prf0(Segment3D(Point3D(1, 1, 0), Point3D(1, 1, 5)), Segment3D(Point3D(3, 1, 0), Point3D(3, 1, 5)), 0,0,0,true, true); result1.addPResultFace(prf0,true); PResultFace prf1(Segment3D(Point3D(2, 3, 0), Point3D(2, 3, 5)), Segment3D(Point3D(1, 1, 0), Point3D(1, 1, 5)), 0,0,1,true, false); result1.addPResultFace(prf1,true); PResultFace prf2(Segment3D(Point3D(3, 5, 0), Point3D(3, 5, 5)), Segment3D(Point3D(2, 3, 0), Point3D(2, 3, 5)), 0,0,2,true, false); result1.addPResultFace(prf2,true); PResultFace prf3(Segment3D(Point3D(4, 3, 0), Point3D(4, 3, 5)), Segment3D(Point3D(3, 5, 0), Point3D(3, 5, 5)), 0,0,3,true, false); result1.addPResultFace(prf3,true); PResultFace prf4(Segment3D(Point3D(5, 1, 0), Point3D(5, 1, 5)), Segment3D(Point3D(4, 3, 0), Point3D(4, 3, 5)), 0,0,4,true, false); result1.addPResultFace(prf4,true); PResultFace prf5(Segment3D(Point3D(3, 1, 0), Point3D(3, 1, 5)), Segment3D(Point3D(5, 1, 0), Point3D(5, 1, 5)), 0,0,5,true,true); result1.addPResultFace(prf5,true); assert_("UnitsTest 5", "ResultUnits don't be equal.", result0 == result1); // cout << result0; // cout << result1; }// UnitsTest5 void Selftest::UnitsTest6(){ Point3DContainer points; SegmentContainer segments; GlobalTimeValues timeValues(5); timeValues.addStartAndEndtime(); // points for pface 0, 1, 2 points.add(Point3D(1,1,0)); points.add(Point3D(5,1,0)); points.add(Point3D(3,5,0)); points.add(Point3D(1,1,5)); points.add(Point3D(1,1,5)); points.add(Point3D(5,1,5)); points.add(Point3D(3,5,5)); // points for pface 3, 4, 5 points.add(Point3D(3,1,0)); points.add(Point3D(4,3,0)); points.add(Point3D(2,3,0)); points.add(Point3D(3,1,5)); points.add(Point3D(4,3,5)); points.add(Point3D(2,3,5)); // segments for pfaces 0, 1, 2 Segment segment0(0,3); Segment segment1(1,4); Segment segment2(2,5); // segments for pfaces 3, 4, 5 Segment segment3(6,9); Segment segment4(7,10); Segment segment5(8,11); // Build unit 0 SourceUnit unit0; unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Build unit 1 SourceUnit unit1; unit1.addPFace(segment0,segment1,points); unit1.addPFace(segment1,segment2,points); unit1.addPFace(segment2,segment0,points); // Intersection unit0.intersection(unit1, timeValues); // Finalize unit0.finalize(points,timeValues,OUTER,unit1); unit1.finalize(points,timeValues,OUTER,unit0); // cout << unit0; // cout << unit1; // cout << timeValues; vector units = vector( timeValues.size()-1, ResultUnit()); for(size_t i = 0; i < timeValues.size()-1; i++){ unit0.getResultUnit(i,OUTER,false,points,units[i],UNIT_A); unit1.getResultUnit(i,OUTER,false,points,units[i],UNIT_B); units[i].evaluateCriticalMSegmens(UNION); units[i].finalize(); // cout << units[i]; }// for ResultUnit result0 = units[0]; ResultUnit result1; PResultFace prf0(Segment3D(Point3D (1, 1, 0), Point3D(1, 1, 5)), Segment3D(Point3D (5, 1, 0), Point3D(5, 1, 5)), 0,0,0,true, true); result1.addPResultFace(prf0,true); PResultFace prf1(Segment3D(Point3D (3, 5, 0), Point3D(3, 5, 5)), Segment3D(Point3D (1, 1, 0), Point3D(1, 1, 5)), 0,0,1,true, false); result1.addPResultFace(prf1,true); PResultFace prf2(Segment3D(Point3D (5, 1, 0), Point3D(5, 1, 5)), Segment3D(Point3D (3, 5, 0), Point3D(3, 5, 5)), 0,0,2,true, false); result1.addPResultFace(prf2,true); assert_("UnitsTest 6", "ResultUnits don't be equal.", result0 == result1); // cout << result0; // cout << result1; }// UnitsTest6 void Selftest::UnitsTest7(){ Point3DContainer points; SegmentContainer segments; GlobalTimeValues timeValues(5); timeValues.addStartAndEndtime(); // points for pface 0, 1, 2 points.add(Point3D(1,1,0)); points.add(Point3D(5,1,0)); points.add(Point3D(3,5,0)); points.add(Point3D(1,1,5)); points.add(Point3D(1,1,5)); points.add(Point3D(5,1,5)); points.add(Point3D(3,5,5)); // points for pface 3, 4, 5 points.add(Point3D(3,1,0)); points.add(Point3D(4,3,0)); points.add(Point3D(2,3,0)); points.add(Point3D(3,1,5)); points.add(Point3D(4,3,5)); points.add(Point3D(2,3,5)); // segments for pfaces 0, 1, 2 Segment segment0(0,3); Segment segment1(1,4); Segment segment2(2,5); // segments for pfaces 3, 4, 5 Segment segment3(6,9); Segment segment4(7,10); Segment segment5(8,11); // Build unit 0 SourceUnit unit0; unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Build unit 1 SourceUnit unit1; unit1.addPFace(segment5,segment4,points); unit1.addPFace(segment4,segment2,points); unit1.addPFace(segment2,segment5,points); // Intersection unit0.intersection(unit1,timeValues); // cout << unit0; // cout << unit1; // cout << timeValues; // Finalize unit0.finalize(points,timeValues,OUTER,unit1); unit1.finalize(points,timeValues,OUTER,unit0); // cout << unit0; // cout << unit1; // cout << timeValues; vector units = vector( timeValues.size()-1, ResultUnit()); for(size_t i = 0; i < timeValues.size()-1; i++){ unit0.getResultUnit(i,OUTER,false,points,units[i],UNIT_A); unit1.getResultUnit(i,OUTER,false,points,units[i],UNIT_B); units[i].evaluateCriticalMSegmens(UNION); units[i].finalize(); // cout << units[i]; }// for ResultUnit result0 = units[0]; ResultUnit result1; PResultFace prf0(Segment3D(Point3D(1, 1, 0), Point3D(1, 1, 5)), Segment3D(Point3D(5, 1, 0), Point3D(5, 1, 5)), 0,0,0,true, true); result1.addPResultFace(prf0,true); PResultFace prf1(Segment3D(Point3D(2, 3, 0), Point3D(2, 3, 5)), Segment3D(Point3D(1, 1, 0), Point3D(1, 1, 5)), 0,0,1,true, false); result1.addPResultFace(prf1,true); PResultFace prf2(Segment3D(Point3D(3, 5, 0), Point3D(3, 5, 5)), Segment3D(Point3D(2, 3, 0), Point3D(2, 3, 5)), 0,0,2,true, false); result1.addPResultFace(prf2,true); PResultFace prf3(Segment3D(Point3D(4, 3, 0), Point3D(4, 3, 5)), Segment3D(Point3D(3, 5, 0), Point3D(3, 5, 5)), 0,0,3,true, false); result1.addPResultFace(prf3,true); PResultFace prf4(Segment3D(Point3D(5, 1, 0), Point3D(5, 1, 5)), Segment3D(Point3D(4, 3, 0), Point3D(4, 3, 5)), 0,0,4,true, false); result1.addPResultFace(prf4,true); assert_("UnitsTest 7", "ResultUnits don't be equal.", result0 == result1); // cout << result0; // cout << result1; }// UnitsTest7 void Selftest::UnitsTest8() { Point3DContainer points; SegmentContainer segments; GlobalTimeValues timeValues(5); timeValues.addStartAndEndtime(); // points for pface 0, 1, 2 points.add(Point3D(1,1,0)); points.add(Point3D(5,1,0)); points.add(Point3D(3,5,0)); points.add(Point3D(1,1,5)); points.add(Point3D(5,1,5)); points.add(Point3D(3,5,5)); // points for pface 3, 4, 5 points.add(Point3D(3,3,0)); points.add(Point3D(3,3,5)); // segments for pfaces 0, 1, 2 Segment segment0(0,3); Segment segment1(1,4); Segment segment2(2,5); // segments for pfaces 3, 4, 5 Segment segment3(6,7); // Build unit 0 SourceUnit unit0; unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Build unit 1 SourceUnit unit1; unit1.addPFace(segment0,segment1,points); unit1.addPFace(segment1,segment3,points); unit1.addPFace(segment3,segment0,points); // Intersection unit0.reSort(); unit1.reSort(); unit0.intersection(unit1,timeValues); // cout << unit0; // cout << unit1; // unit0.printFaceCycleEntrys(); // unit1.printFaceCycleEntrys(); // Finalize unit0.finalize(points,timeValues,OUTER,unit1); unit1.finalize(points,timeValues,INNER,unit0); // cout << unit0; // cout << unit1; vector units = vector( timeValues.size()-1, ResultUnit()); for(size_t i = 0; i < timeValues.size()-1; i++){ unit0.getResultUnit(i,OUTER,false,points,units[i],UNIT_A); unit1.getResultUnit(i,INNER,true,points,units[i],UNIT_B); units[i].evaluateCriticalMSegmens(MINUS); units[i].finalize(); // cout << units[i]; }// for ResultUnit result0 = units[0]; ResultUnit result1; PResultFace prf0(Segment3D(Point3D(1, 1, 0), Point3D(1, 1, 5)), Segment3D(Point3D(3, 3, 0), Point3D(3, 3, 5)), 0,0,0,true, true); result1.addPResultFace(prf0,true); PResultFace prf1(Segment3D(Point3D(3, 5, 0), Point3D(3, 5, 5)), Segment3D(Point3D(1, 1, 0), Point3D(1, 1, 5)), 0,0,1,true, false); result1.addPResultFace(prf1,true); PResultFace prf2(Segment3D(Point3D(5, 1, 0), Point3D(5, 1, 5)), Segment3D(Point3D(3, 5, 0), Point3D(3, 5, 5)), 0,0,2,true, false); result1.addPResultFace(prf2,true); PResultFace prf3(Segment3D(Point3D(3, 3, 0), Point3D(3, 3, 5)), Segment3D(Point3D(5, 1, 0), Point3D(5, 1, 5)), 0,0,3,true, true); result1.addPResultFace(prf3,true); assert_("UnitsTest 8", "ResultUnits don't be equal.", result0 == result1); }// UnitsTest8 /* Test UnitPair */ void Selftest::SourceUnitPairTest1(){ SourceUnitPair unitPair(0,5,5); Segment3D segment0(Point3D(2,1,0), Point3D(2,1,5)); Segment3D segment1(Point3D(5,1,0), Point3D(5,1,5)); Segment3D segment2(Point3D(3.5,4,0), Point3D(3.5,4,5)); Segment3D segment3(Point3D(6,1,0), Point3D(0,4,5)); Segment3D segment4(Point3D(9,1,0), Point3D(3,4,5)); Segment3D segment5(Point3D(7.5,4,0), Point3D(1.5,7,5)); unitPair.addPFace(UNIT_A,segment0,segment1); unitPair.addPFace(UNIT_A,segment1,segment2); unitPair.addPFace(UNIT_A,segment2,segment0); unitPair.addPFace(UNIT_B,segment3,segment4); unitPair.addPFace(UNIT_B,segment4,segment5); unitPair.addPFace(UNIT_B,segment5,segment3); unitPair.operate(INTERSECTION); // cout << unitPair; // result ResultUnit result1 = unitPair.getResultUnit(0); ResultUnit result2(0,1.111111111111); assert_("SourceUnitPairTest 1.1", "ResultUnits don't equal.", result1 == result2); // cout << result1; // cout << result2; ResultUnit result3 = unitPair.getResultUnit(1); ResultUnit result4(1.111111111111,2.666666666667); Segment3D segment10(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(4.2, 2.6, 2.666666666667)); Segment3D segment11(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); Segment3D segment12(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(2.8, 2.6, 2.666666666667)); Segment3D segment13(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(4.2, 2.6, 2.666666666667)); Segment3D segment14(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(3.5, 4, 2.666666666667)); Segment3D segment15(Point3D(4.666666666667, 1.666666666667, 1.111111111111), Point3D(2.8, 2.6, 2.666666666667)); PResultFace prf2(segment10,segment11,0,0,2,true,false); PResultFace prf0(segment12,segment13,0,0,0,true,true); PResultFace prf1(segment14,segment15,0,0,1,true,false); result4.addPResultFace(prf0,true); result4.addPResultFace(prf1,true); result4.addPResultFace(prf2,true); assert_("SourceUnitPairTest 1.2", "ResultUnits don't equal.", result3 == result4); // cout << result3; // cout << result4; ResultUnit result5 = unitPair.getResultUnit(2); ResultUnit result6(2.666666666667,4.444444444444); Segment3D segment16(Point3D(4.2, 2.6, 2.666666666667), Point3D(3.666666666667, 3.666666666667, 4.444444444444)); Segment3D segment17(Point3D(3.5, 4, 2.666666666667), Point3D(3.5, 4, 4.444444444444)); Segment3D segment18(Point3D(3.5, 4, 2.666666666667), Point3D(3.5, 4, 4.444444444444)); Segment3D segment19(Point3D(2.8, 2.6, 2.666666666667), Point3D(3.333333333333, 3.666666666667, 4.444444444444)); Segment3D segment20(Point3D(2.8, 2.6, 2.666666666667), Point3D(3.333333333333, 3.666666666667, 4.444444444444)); Segment3D segment21(Point3D(4.2, 2.6, 2.666666666667), Point3D(3.666666666667, 3.666666666667, 4.444444444444)); PResultFace prf5(segment16,segment17,0,0,0,true,false); PResultFace prf4(segment18,segment19,0,0,1,true,false); PResultFace prf3(segment20,segment21,0,0,2,true,true); result6.addPResultFace(prf3,true); result6.addPResultFace(prf4,true); result6.addPResultFace(prf5,true); assert_("SourceUnitPairTest 1.3", "ResultUnits don't equal.", result5 == result6); // cout << result5; // cout << result6; ResultUnit result7 = unitPair.getResultUnit(3); ResultUnit result8(4.444444444444,4.666666666667); Segment3D segment22(Point3D(3.5, 4, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment23(Point3D(3.333333333333, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment24(Point3D(3.333333333333, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment25(Point3D(3.666666666667, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment26(Point3D(3.666666666667, 3.666666666667, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); Segment3D segment27(Point3D(3.5, 4, 4.444444444444), Point3D(3.4, 3.8, 4.666666666667)); PResultFace prf6(segment22,segment23,0,0,0,true,false); PResultFace prf7(segment24,segment25,0,0,1,true,true); PResultFace prf8(segment26,segment27,0,0,2,true,false); result8.addPResultFace(prf7,true); result8.addPResultFace(prf6,true); result8.addPResultFace(prf8,true); assert_("SourceUnitPairTest 1.4", "ResultUnits don't equal.", result7 == result8); // cout << result7; // cout << result8; ResultUnit result9 = unitPair.getResultUnit(4); ResultUnit result10(4.666666666667,5); assert_("SourceUnitPairTest 1.5", "ResultUnits don't equal.", result9 == result10); // cout << result9; // cout << result10; }// SourceUnitPairTest1 void Selftest::UnitsTest9(){ Point3DContainer points; GlobalTimeValues timeValues(5); timeValues.addStartAndEndtime(); std::vector predicates1,predicates2; // points for unit 0 points.add(Point3D(2,1,0));// 0 points.add(Point3D(5,1,0)); points.add(Point3D(3.5,4,0)); points.add(Point3D(2,1,5)); points.add(Point3D(5,1,5)); points.add(Point3D(3.5,4,5)); // points for unit 1 points.add(Point3D(6,1,0));// 6 points.add(Point3D(9,1,0)); points.add(Point3D(7.5,4,0)); points.add(Point3D(0,4,5)); points.add(Point3D(3,4,5)); points.add(Point3D(1.5,7,5)); // segments for pfaces 0, 1, 2 Segment segment0(0,3); Segment segment1(1,4); Segment segment2(2,5); // segments for pfaces 3, 4, 5 Segment segment3(6,9); Segment segment4(7,10); Segment segment5(8,11); // Build unit 0 SourceUnit unit0; unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Build unit 1 SourceUnit unit1; unit1.addPFace(segment3,segment4,points); unit1.addPFace(segment4,segment5,points); unit1.addPFace(segment5,segment3,points); // Intersection unit0.intersection(unit1,timeValues); unit0.reSort(); unit1.reSort(); // Prädikat intersects bestimmen unit0.intersects(points,timeValues,unit1,predicates1); // cout << unit0; std::vector predicates3 = {false, true, true, true, false}; bool result = true; for(size_t i = 0; i < predicates1.size(); i++){ if(predicates1[i] != predicates3[i]) result = false; // if(predicates1[i]){ // cout << "Predikat intersects for slide " << i; // cout << ", true" < predicates4 = {false, false, false, false, false}; result = true; for(size_t i = 0; i < predicates2.size(); i++){ if(predicates2[i] != predicates4[i]) result = false; // if(predicates2[i]){ // cout << "Predikat inside for slide " << i; // cout << ", true" < predicates1,predicates2; // points for unit 1 points.add(Point3D(6,1,0));// 6 points.add(Point3D(7,1,0)); points.add(Point3D(6.5,2,0)); points.add(Point3D(0,1,5)); points.add(Point3D(1,1,5)); points.add(Point3D(0.5,2,5)); // points for unit 0 points.add(Point3D(2,1,0));// 0 points.add(Point3D(5,1,0)); points.add(Point3D(3.5,4,0)); points.add(Point3D(2,1,5)); points.add(Point3D(5,1,5)); points.add(Point3D(3.5,4,5)); // segments for pfaces 0, 1, 2 Segment segment0(0,3); Segment segment1(1,4); Segment segment2(2,5); // segments for pfaces 3, 4, 5 Segment segment3(6,9); Segment segment4(7,10); Segment segment5(8,11); // Build unit 0 SourceUnit unit0; unit0.addPFace(segment0,segment1,points); unit0.addPFace(segment1,segment2,points); unit0.addPFace(segment2,segment0,points); // Build unit 1 SourceUnit unit1; unit1.addPFace(segment3,segment4,points); unit1.addPFace(segment4,segment5,points); unit1.addPFace(segment5,segment3,points); // Intersection unit0.intersection(unit1,timeValues); // cout << unit0 << endl; // cout << unit1 << endl; // Prädikat intersects bestimmen unit0.intersects(points,timeValues,unit1,predicates1); // cout << unit0; std::vector predicates3 = {false, true, true, true, false}; bool result = true; for(size_t i = 0; i < predicates1.size(); i++){ if(predicates1[i] != predicates3[i]) result = false; // if(predicates1[i]){ // cout << "Predikat intersects for slide " << i; // cout << ", true" < predicates4 = {false, false, true, false, false}; result = true; for(size_t i = 0; i < predicates2.size(); i++){ if(predicates2[i] != predicates4[i]) result = false; // if(predicates2[i]){ // cout << "Predikat inside for slide " << i; // cout << ", true" < predicate1(9),predicate2(9); std::vector predicate3(1),predicate4(1); // Outside layerContainer1.addNonOrthSegment(0,Segment(0,1,LEFT_IS_INNER)); layerContainer1.addNonOrthSegment(0,Segment(2,3,RIGHT_IS_INNER)); // Outside layerContainer1.addNonOrthSegment(1,Segment(4,5,LEFT_IS_INNER)); layerContainer1.addNonOrthSegment(1,Segment(6,7)); // Inside layerContainer1.addNonOrthSegment(2,Segment(8,9,RIGHT_IS_INNER)); layerContainer1.addNonOrthSegment(2,Segment(10,11)); // Inside layerContainer1.addNonOrthSegment(3,Segment(12,13)); layerContainer1.addNonOrthSegment(3,Segment(14,15,LEFT_IS_INNER)); // Outside layerContainer1.addNonOrthSegment(4,Segment(16,17,INTERSECT)); layerContainer1.addNonOrthSegment(4,Segment(18,19,RIGHT_IS_INNER)); // three segments layerContainer1.addNonOrthSegment(5,Segment(20,21,LEFT_IS_INNER)); layerContainer1.addNonOrthSegment(5,Segment(20,23,RIGHT_IS_INNER)); layerContainer1.addNonOrthSegment(5,Segment(22,23)); // three segments layerContainer1.addNonOrthSegment(6,Segment(24,25,RIGHT_IS_INNER)); layerContainer1.addNonOrthSegment(6,Segment(24,27,INTERSECT)); layerContainer1.addNonOrthSegment(6,Segment(26,27)); // Inside layerContainer1.addNonOrthSegment(7,Segment(28,29,INTERSECT)); layerContainer1.addNonOrthSegment(7,Segment(30,31,INNER)); // Outside layerContainer1.addNonOrthSegment(8,Segment(32,33)); layerContainer1.addNonOrthSegment(8,Segment(33,34,OUTER)); // Undefined layerContainer2.addNonOrthSegment(0,Segment(0,1)); layerContainer2.addNonOrthSegment(0,Segment(2,3)); // cout << layerContainer1; std::vector predicate5 = {false, false, true, true, true, true, true, true, false}; bool result = layerContainer1.intersects(predicate1); assert_("LayerContainerTest 8.1", "A intersection result are available.", (result)); result = true; for(size_t i = 0; i < predicate1.size(); i++){ if(predicate1[i] != predicate5[i]) result = false; // if(predicate1[i]){ // cout << "Predikat intersects for slide " << i; // cout << ", true" < predicate6 = {false, false, true, true, false, false, false, true, false}; result = layerContainer1.inside(predicate2); assert_("LayerContainerTest 8.4", "A intersection result is available.", (result)); result = true; for(size_t i = 0; i < predicate2.size(); i++){ if(predicate2[i] != predicate6[i]) result = false; // if(predicate2[i]){ // cout << "Predikat intersects for slide " << i; // cout << ", true" < predicate1(9),predicate2(9); std::vector predicate3(1),predicate4(1); // Inside - critical layerContainer1.addNonOrthSegment(0,Segment(0,1,RIGHT_IS_INNER)); layerContainer1.addNonOrthSegment(0,Segment(2,3,INTERSECT)); // Outside - critical layerContainer1.addNonOrthSegment(1,Segment(4,5,LEFT_IS_INNER)); layerContainer1.addNonOrthSegment(1,Segment(6,7,INTERSECT)); // Inside - critical layerContainer1.addNonOrthSegment(2,Segment(8,9,INTERSECT)); layerContainer1.addNonOrthSegment(2,Segment(10,11,LEFT_IS_INNER)); // Outside - critical layerContainer1.addNonOrthSegment(3,Segment(12,13,INTERSECT)); layerContainer1.addNonOrthSegment(3,Segment(14,15,RIGHT_IS_INNER)); // Outside/Inside layerContainer1.addNonOrthSegment(4,Segment(16,17)); layerContainer1.addNonOrthSegment(4,Segment(18,19,RIGHT_IS_INNER)); layerContainer1.addNonOrthSegment(4,Segment(20,21,INTERSECT)); // Inside/Outside layerContainer1.addNonOrthSegment(5,Segment(22,23,INTERSECT)); layerContainer1.addNonOrthSegment(5,Segment(24,25,LEFT_IS_INNER)); layerContainer1.addNonOrthSegment(5,Segment(26,27)); // Outside/Inside layerContainer1.addNonOrthSegment(6,Segment(28,29)); layerContainer1.addNonOrthSegment(6,Segment(30,31,NO_INTERSECT)); layerContainer1.addNonOrthSegment(6,Segment(32,33,RIGHT_IS_INNER)); layerContainer1.addNonOrthSegment(6,Segment(34,35,NO_INTERSECT)); layerContainer1.addNonOrthSegment(6,Segment(36,37,INTERSECT)); // Inside/Outside layerContainer1.addNonOrthSegment(7,Segment(38,39,INTERSECT)); layerContainer1.addNonOrthSegment(7,Segment(40,41,NO_INTERSECT)); layerContainer1.addNonOrthSegment(7,Segment(42,43,LEFT_IS_INNER)); layerContainer1.addNonOrthSegment(7,Segment(44,45,NO_INTERSECT)); layerContainer1.addNonOrthSegment(7,Segment(46,47)); // Outside layerContainer1.addNonOrthSegment(8,Segment(48,49,INTERSECT)); layerContainer1.addNonOrthSegment(8,Segment(50,51,NO_INTERSECT)); layerContainer1.addNonOrthSegment(8,Segment(52,53,NO_INTERSECT)); layerContainer1.addNonOrthSegment(8,Segment(54,55,RIGHT_IS_INNER)); // Undefined - critical layerContainer2.addNonOrthSegment(0,Segment(0,1,INTERSECT)); layerContainer2.addNonOrthSegment(0,Segment(2,3,INTERSECT)); // cout << factory1; std::vector predicate5 = {true, true, true, true, true, true, true, true, true}; bool result = layerContainer1.intersects(predicate1); assert_("LayerContainerTest 9.1", "A intersection result is available.", (result)); result = true; for(size_t i = 0; i < predicate1.size(); i++){ if(predicate1[i] != predicate5[i]) result = false; // if(predicate1[i]){ // cout << "Intersect predicate for layer " << i; // cout << ", true" < predicate6 = {true, false, true, false, false, false, false, false, false}; result = layerContainer1.inside(predicate2); assert_("LayerContainerTest 9.4", "A inside result is available.", (result)); result = true; for(size_t i = 0; i < predicate2.size(); i++){ if(predicate2[i] != predicate6[i]) result = false; // if(predicate2[i]){ // cout << "Inside predicate for layer " << i; // cout << ", true" <