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)); }
void legalizeEdge(Trist &tri, int idx, int idx1, int idx2, int triangleIdx){ int triangleIdx2; int idx3 = getVertex(myTrist, idx, idx1,idx2, triangleIdx2); if(idx3==-1) return; int ans = myPointSet.inCircle(idx,idx1,idx2,idx3); //OrTri ef = myTrist.fnext(triangleIdx<<3); //cout<<"triangleIdx2 is "<<triangleIdx2<<endl; //cout<<"ef is "<<(ef>>3)<<endl; /* if(ans ==0){ cout<<"degenerate"<<endl; }*/ if(ans > 0){ // flip edge idx1idx2 with idxidx3 //int triIdx1 = tri.makeTri(idx,idx1,idx3); //int triIdx2 = tri.makeTri(idx,idx2,idx3); tri.flipping(triangleIdx,triangleIdx2,idx,idx1,idx2,idx3); legalizeEdge(tri,idx,idx1,idx3,triangleIdx); legalizeEdge(tri,idx,idx2,idx3,triangleIdx2); //tri.delTri(triangleIdx<<3); //tri.delTri(triangleIdx2<<3); } }