The code performs the follows the reasoning: for a chosen and , select a random with and with . If and only if the equation of the ellipse in standard form:
is satisfied, then the generated and values describe a point which lies within the ellipse's perimeter. Otherwise, select new values for and and loop until the equation is satisfied.
/////////////////////////////////////////////////////////////////////////// // Copyright (C) 2015 Wizardry and Steamworks - License: GNU GPLv3 // /////////////////////////////////////////////////////////////////////////// vector wasEllipsePoint(float a, float b) { float x = llPow(-1, 1 + (integer) llFrand(2)) * llFrand(a); float y = llPow(-1, 1 + (integer) llFrand(2)) * llFrand(b); if(llPow(x/a,2) + llPow(y/b,2) <= 1) return <x, y, 0>; return wasEllipsePoint(a, b); }