// ----------------------------------------------------------------------------------------- // 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; iareas[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; }