All pastes #102025 Raw Edit

Unnamed

public cpp v1 · immutable
#102025 ·published 2006-07-27 07:57 UTC
rendered paste body
// -----------------------------------------------------------------------------------------// Get the area of a triangle// -----------------------------------------------------------------------------------------float 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;	float a = 1.0;	float b = 1.0;	while (a+b>1) { a=(float)(rand()*1.0/RAND_MAX); b=(float)(rand()*1.0/RAND_MAX); }	float 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 tnum = 0;	float tval = 0;	float totalarea = 0;	float* areas = new float[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]);}// -----------------------------------------------------------------------------------------// Get a random point inside a circle// -----------------------------------------------------------------------------------------fPoint RandInCircle(fPoint center, double radius){	fPoint thispoint;	float angle = (float)(rand() * ( pi * 2 ) / RAND_MAX);	float distance = (float)sqrt( rand() * 1.0 / RAND_MAX ) * 125;	thispoint.x = cos(angle) * distance + center.x;	thispoint.y = sin(angle) * distance + center.y;	return thispoint;}