void readFile(){ string line_noStr; string line; // each line of the file string command;// the command of each line string numberStr; // for single LongInt operation string outputAns = "Answer of your computation"; // the answer you computed ifstream inputFile("input.txt",ios::in); int delay=0; const int largeCoor=5000; myPointSet.eraseAllPoints(); myTrist.eraseAllTris(); noIPTrist.eraseAllTris(); myPointSet.addPoint(-largeCoor,largeCoor/2); myPointSet.addPoint(largeCoor,largeCoor/2); myPointSet.addPoint(0,-largeCoor/2); myTrist.makeTri(1,2,3); if(inputFile.fail()){ cerr << "Error: Cannot read input file \"" << "input.txt" << "\""; return; } while(inputFile.good()){ getline(inputFile,line); if(line.empty()) { command = ""; continue; }// in case the line has nothing in it stringstream linestream(line); linestream >> line_noStr; linestream >> command; // get the command if (delay>0) Sleep(delay); if(!command.compare("AP")){ linestream >> numberStr; LongInt p1 = LongInt::LongInt(numberStr.c_str()); linestream >> numberStr; LongInt p2 = LongInt::LongInt(numberStr.c_str()); int output = myPointSet.addPoint(p1, p2); } else if(!command.compare("OT")){
TEST(PointSetTest, InCircleTrivialOutside) { PointSetArray pointSet; int p1 = pointSet.addPoint(0, 0); int p2 = pointSet.addPoint(100, 0); // int p3 = pointSet.addPoint(100, 100); int p4 = pointSet.addPoint(0, 100); // int p5 = pointSet.addPoint(50, 50); int p6 = pointSet.addPoint(2000, 2000); // (200,200) is *outside* the circum-circle of <p1,p2,p4> EXPECT_EQ(-1, pointSet.inCircle(p1, p2, p4, p6)); }
TEST(PointSetTest, InCircleTrivialWithin) { PointSetArray pointSet; int p1 = pointSet.addPoint(0, 0); int p2 = pointSet.addPoint(100, 0); // int p3 = pointSet.addPoint(100, 100); int p4 = pointSet.addPoint(0, 100); int p5 = pointSet.addPoint(50, 50); // int p6 = pointSet.addPoint(2000, 2000); // (50,50) is *within* the circum-circle of <p1,p2,p4> EXPECT_EQ(1, pointSet.inCircle(p1, p2, p4, p5)); }
// Delaunay algorithm breaking, e.g. of invalid: // 1. (374,112) // 2. (-6514,-2005) // 3. (128,6768) // 4. (147,376) TEST(PointSetTest, InCircleOutsideDelaunayLegal) { PointSetArray pointSet; // abd is a tri, as is dbc. // abd doesn't contain c, // dbc doesn't contain a int p1 = pointSet.addPoint(374, 112); int p2 = pointSet.addPoint(-6514, -2005); int p3 = pointSet.addPoint(128, 6768); int p4 = pointSet.addPoint(147, 376); // Both triangles legal. EXPECT_EQ(-1, pointSet.inCircle(p1, p2, p4, p3)); EXPECT_EQ(-1, pointSet.inCircle(p4, p2, p3, p1)); }
// Delaunay algorithm breaking, e.g. of invalid: // 1. (425,342) // 2. (306,57) // 3. (120,31) // 4. (396,483) // *both* abd, dbc are illegal TEST(PointSetTest, InCircleOutsideDelaunayIllegal) { PointSetArray pointSet; // abd is a tri, as is dbc. // abd doesn't contain c, // dbc doesn't contain a int p1 = pointSet.addPoint(425, 342); int p2 = pointSet.addPoint(306, 57); int p3 = pointSet.addPoint(120, 31); int p4 = pointSet.addPoint(396, 483); // Both triangles illegal. (i.e. contains point) EXPECT_EQ(1, pointSet.inCircle(p1, p2, p4, p3)); EXPECT_EQ(1, pointSet.inCircle(p4, p2, p3, p1)); }
bool IPhelper(Trist &tri1, int x, int y, bool readfile){ int i,a,b,c,d, triangleIdx1, triangleIdx2, triangleIdx3; MyPoint pd; //cout<<x<<endl;cout<<y<<endl; x=x/scale[nowS]; y=y/scale[nowS]; pd.x=LongInt(x); pd.y=LongInt(y); d=myPointSet.addPoint(LongInt(x),LongInt(y)); for (i=1;i<=tri1.noTri();i++){ tri1.getVertexIdx(i<<3,a,b,c); if (myPointSet.inTri(a,b,c,pd)>0){ vec.push_back(d); if(readfile){ tri1.delTri(i<<3); triangleIdx1 = tri1.makeTri(a,b,d); triangleIdx2 = tri1.makeTri(b,c,d); triangleIdx3 = tri1.makeTri(a,c,d); legalizeEdge(tri1,d,a,b, triangleIdx1); legalizeEdge(tri1,d,b,c, triangleIdx2); legalizeEdge(tri1,d,a,c, triangleIdx3); } return 1; } } return 0; }
TEST(PointSetTest, PointSetInTriSimple) { PointSetArray ps; int p1 = ps.addPoint(0, 0); // 1 int p2 = ps.addPoint(0, 4); // 2 int p3 = ps.addPoint(4, 0); // 3 int p4 = ps.addPoint(4, 4); // 4 int p5 = ps.addPoint(1, 1); // 5 // (1, 1) IS in tri 123 EXPECT_EQ(1, ps.inTri(p1, p2, p3, p5)); // (1, 1) IS in tri 124 EXPECT_EQ(0, ps.inTri(p1, p2, p4, p5)); // (1, 1) IS NOT in tri 234 EXPECT_EQ(-1, ps.inTri(p2, p3, p4, p5)); }