[SciPy-User] random points within an ellipse
Erin Sheldon
erin.sheldon at gmail.com
Thu Aug 5 12:32:20 EDT 2010
Excerpts from Benjamin Root's message of Wed Aug 04 19:38:51 -0400 2010:
> Hi,
>
> For a project, I need to create sets of random coordinates within a 2d
> domain. To start, I have been creating random x and y coordinates, which
> has worked very nicely. However, I would like to start doing some fancier
> domains like ellipses and crescents. Does anybody know of any useful tricks
> for doing this?
>
> Thanks,
> Ben Root
Hi Ben -
A simple way is to generate random x and y coordinates in a bounding box
and then trim back to the shape you want using your constraint. E.g.
for an ellipse:
# equation of ellipse:
# (x/x0)^2 + (y/y0)^2 = 1
# or
x=2*x0*(random.random(n-nkeep) - 0.5)
y=2*y0*(random.random(n-nkeep) - 0.5)
# get points that fall within constraint
w,=where( ( (x/x0)**2 + (y/y0)**2 ) < 1 )
You can put this in a while loop to get the desired number:
import numpy
from numpy import random, where, cos, sin, arctan2, abs
def get_random_ellipse(n, x0, y0):
xout = numpy.zeros(n)
yout = numpy.zeros(n)
nkeep=0
while nkeep < n:
x=2*x0*(random.random(n-nkeep) - 0.5)
y=2*y0*(random.random(n-nkeep) - 0.5)
w,=where( ( (x/x0)**2 + (y/y0)**2 ) < 1 )
if w.size > 0:
xout[nkeep:nkeep+w.size] = x[w]
yout[nkeep:nkeep+w.size] = y[w]
nkeep += w.size
return xout,yout
More information about the SciPy-User
mailing list