Пример #1
0
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));
}
Пример #2
0
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));
}
Пример #3
0
// 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));
}
Пример #4
0
// 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));
}
Пример #5
0
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);
	}
}