Ejemplo n.º 1
0
void drawATriangle(int ix1, int ix2, int ix3)
{
	LongInt xl,yl;
	int x1,x2,x3,y1,y2,y3;
	myPointSet.getPoint(ix1,xl,yl);
	x1=atof(xl.printOut().c_str())*scale[nowS]+DX;
	y1=atof(yl.printOut().c_str())*scale[nowS]+DY;

	myPointSet.getPoint(ix2,xl,yl);
	x2=atof(xl.printOut().c_str())*scale[nowS]+DX;
	y2=atof(yl.printOut().c_str())*scale[nowS]+DY;

	myPointSet.getPoint(ix3,xl,yl);
	x3=atof(xl.printOut().c_str())*scale[nowS]+DX;
	y3=atof(yl.printOut().c_str())*scale[nowS]+DY;

	glBegin(GL_POLYGON);
	glColor3f(0,0.5,0);
	glVertex2d(x1,y1);
	glVertex2d(x2,y2);
	glVertex2d(x3,y3);
	glEnd();

	drawALine(x1,y1,x2,y2);
	drawALine(x1,y1,x3,y3);
	drawALine(x2,y2,x3,y3);

}
Ejemplo n.º 2
0
// It's slightly awkward, but we assume that the PointSet we're
// given is constant for rest of DAG;
DirectedGraph::DirectedGraph(const PointSetArray& inputPointSet) {
	// TODO: If keep a separate copy of inputPointSet,
	// then wouldn't need delaunay.cpp to use `- 3` magic.

	// XXX Should use copy-c'tor for PointSetArray (test first?).
	// Copy points from the input set to Delaunay point set
	for (int i = 1; i <= inputPointSet.noPt(); i++) {
		LongInt x, y;
		inputPointSet.getPoint(i, x, y);
		pointSet_.addPoint(x, y);
	}

	int numPoints = pointSet_.noPt();

	// Add a triangle which bounds all the points.
	findBoundingTri(pointSet_);

	// Construct root DAGNode as the bounding triangle.
	// (Delaunay Iteration algorithm can 'add' the 'actual' points,
	//  which is also slightly awkward, but whatever).

	// Points of bounding tri are the last three,
	// so, numPoints+1, numPoints+2, numPoints+3
	int boundingTriPt1 = numPoints + 1;
	TriRecord boundingTri(boundingTriPt1,
	                      boundingTriPt1 + 1,
	                      boundingTriPt1 + 2);
	root_ = shared_ptr<DAGNode>(new DAGNode(boundingTri));
	root_->fIndex_ = trist_.addLinkedTri(boundingTri);
	dagNodes_.push_back(root_);
}
Ejemplo n.º 3
0
void drawPointSetArray(const PointSetArray& pointSet) {
	// Draw input points
	for (int i = 1; i <= pointSet.noPt(); i++){
		LongInt px, py;
		pointSet.getPoint(i, px, py);
		drawAPoint(px.doubleValue(), py.doubleValue());
	}
}
Ejemplo n.º 4
0
void insert(Trist &tri1, int pIdx){
	int i,a,b,c,d, triangleIdx1, triangleIdx2, triangleIdx3;
	MyPoint pd;
	myPointSet.getPoint(pIdx,pd.x,pd.y);
	
	for (i=1;i<=tri1.noTri();i++){
		tri1.getVertexIdx(i<<3,a,b,c);
		if (myPointSet.inTri(a,b,c,pd)>0){					
			tri1.delTri(i<<3);
			triangleIdx1 = tri1.makeTri(a,b,pIdx);
			triangleIdx2 = tri1.makeTri(b,c,pIdx);
			triangleIdx3 = tri1.makeTri(a,c,pIdx);
			legalizeEdge(tri1,pIdx,a,b, triangleIdx1);			
			legalizeEdge(tri1,pIdx,b,c, triangleIdx2);
			legalizeEdge(tri1,pIdx,a,c, triangleIdx3);
			return;
		}
	}
}
Ejemplo n.º 5
0
void display(void)
{
	int i, ix1, ix2, ix3;
	LongInt x1,y1;
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glPushMatrix();

	for (i=1;i<=myTrist.noTri();i++){
		myTrist.getVertexIdx(i<<3,ix1,ix2,ix3);
		drawATriangle(ix1,ix2,ix3);
	}

	for (i=1;i<=myPointSet.noPt();i++){
		myPointSet.getPoint(i,x1,y1);
		drawAPoint(atof(x1.printOut().c_str()),atof(y1.printOut().c_str()));
	}

	glPopMatrix();
	glutSwapBuffers ();
}