Table of Contents

Graph

Theory

The code performs the follows the reasoning: for a chosen $a$ and $b$, select a random $x$ with $x \in [0, a)$ and $y$ with $y \in [0, b)$. If and only if the equation of the ellipse in standard form:

\begin{eqnarray*}
(\frac{x}{a})^{2}+(\frac{y}{b})^{2} &\le& 1
\end{eqnarray*}

is satisfied, then the generated $x$ and $y$ values describe a point $(x, y)$ which lies within the ellipse's perimeter. Otherwise, select new values for $x$ and $y$ and loop until the equation is satisfied.

Code

wasEllipsePoint.lsl
///////////////////////////////////////////////////////////////////////////
//    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);
}