How to generate a unit vector pointing in a random direction with isotropic distribution of direction?

Aina picture Aina · Mar 17, 2012 · Viewed 16.3k times · Source

I need to create a method to generate a unit vector in three dimensions that points in a random direction using a random number generator. The distribution of direction MUST be isotropic.
Here is how I am trying to generate a random unit vector:
v = randn(1,3);
v = v./sqrt(v*v');

But I don't know how to complete the isotropic part. Any ideas?

Answer

Jonas picture Jonas · Mar 17, 2012

You're doing it right. A random normal distribution of coordinates gives you a uniform distribution of directions.

To generate 10000 uniform points on the unit sphere, you run

v = randn(10000,3);
v = bsxfun(@rdivide,v,sqrt(sum(v.^2,2)));

plot3(v(:,1),v(:,2),v(:,3),'.')
axis equal

enter image description here