Code: Select all
Point2F randomPointInCircle( F32 radius )
{
AssertFatal( radius > 0.0f, "MathUtils::randomPointInRadius - radius must be positive" );
#define MAX_TRIES 20
Point2F out;
F32 radiusSq = radius * radius;
for ( S32 i = 0; i < MAX_TRIES; i++ )
{
out.x = sgRandom.randF(-radius,radius);
out.y = sgRandom.randF(-radius,radius);
if ( out.lenSquared() < radiusSq )
return out;
Con::errorf("radius: %f, coord:(%f,%f), squares: %f>=%f",radius,out.x,out.y, out.lenSquared(), radiusSq);
}
AssertFatal( false, "MathUtils::randomPointInRadius - something is wrong, should not fail this many times." );
radius: 5.000000, coord:(12.564140,5.486708), squares: 187.961578>=25.000000
radius: 5.000000, coord:(5.096106,10.246315), squares: 130.957260>=25.000000
radius: 5.000000, coord:(9.821218,5.205967), squares: 123.558426>=25.000000
radius: 5.000000, coord:(6.688040,5.880724), squares: 79.312790>=25.000000
radius: 5.000000, coord:(7.324609,14.703672), squares: 269.847870>=25.000000
radius: 5.000000, coord:(14.631927,8.820086), squares: 291.887207>=25.000000
radius: 5.000000, coord:(9.185753,14.953035), squares: 307.971313>=25.000000
radius: 5.000000, coord:(5.667538,14.292549), squares: 236.397949>=25.000000
radius: 5.000000, coord:(14.871305,12.033293), squares: 365.955872>=25.000000
radius: 5.000000, coord:(13.559505,14.593695), squares: 396.836121>=25.000000
radius: 5.000000, coord:(6.238934,7.759239), squares: 99.130081>=25.000000
radius: 5.000000, coord:(9.548182,6.286511), squares: 130.687988>=25.000000
radius: 5.000000, coord:(7.388700,11.892736), squares: 196.030075>=25.000000
radius: 5.000000, coord:(11.225512,7.160976), squares: 177.291687>=25.000000
radius: 5.000000, coord:(14.532150,11.854084), squares: 351.702698>=25.000000
radius: 5.000000, coord:(11.582703,10.503599), squares: 244.484589>=25.000000
radius: 5.000000, coord:(14.001133,7.045525), squares: 245.671143>=25.000000
radius: 5.000000, coord:(14.128210,12.840799), squares: 364.492432>=25.000000
radius: 5.000000, coord:(5.306587,7.801613), squares: 89.025032>=25.000000
radius: 5.000000, coord:(11.712645,14.402870), squares: 344.628723>=25.000000
Best I can say is throwing https://github.com/GarageGames/Torque3D ... ian.h#L110
at
https://github.com/GarageGames/Torque3D ... m.cpp#L105 doesn't seem to cut it.