All pastes #101932 Raw Edit

Mine

public cpp v1 · immutable
#101932 ·published 2006-07-27 07:25 UTC
rendered paste body
//-------------------------------------------------------------------------// A 2d point, for positions//-------------------------------------------------------------------------struct fPoint {	float x;	float y;};// -----------------------------------------------------------------------------------------// Get the area of a triangle// -----------------------------------------------------------------------------------------int AreaOfTriangle(fPoint p1, fPoint p2, fPoint p3) {	return abs((p2.x * p1.y - p1.x * p2.y) + (p3.x * p2.y - p2.x * p3.y) + (p1.x * p3.y - p2.x * p1.y)) / 2}// -----------------------------------------------------------------------------------------// Get a random point inside a triangle// -----------------------------------------------------------------------------------------fPoint RandInTriangle(fPoint p1, fPoint p2, fPoint p3) {	fPoint thispoint;	double a = 1.0;	double b = 1.0;	while (a+b>1) { a=rand(); b=rand(); }	double c = 1 - a - b;	thispoint.x = (p1.x*a)+(p2.x*b)+(p3.x*c);	thispoint.y = (p1.y*a)+(p2.y*b)+(p3.y*c);	return thispoint;}// -----------------------------------------------------------------------------------------// Get a random point inside a polygon// -----------------------------------------------------------------------------------------fPoint RandInPoly(fPoint p[], int pcount) {	int tval = 0;	int tnum = 0;	int totalarea = 0;	int areas[pcount-1];	for(int i=0; i<pcount-2; i++) {		totalarea += AreaOfTriangle(p[0], p[i+1], p[i+2]);		areas[i+1] = totalarea;	}	tval = rand() * totalarea / RAND_MAX;	for (tnum=1; tnum<pcount-1; tnum++) { if(tval<=areas[tnum]&&tval>areas[tnum-1]) break; }	return RandInTriangle(p[0], p[tnum], p[tnum+1]);}