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;}