Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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?

like image 1000
Aina Avatar asked Mar 17 '12 14:03

Aina


1 Answers

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

like image 195
Jonas Avatar answered Sep 19 '22 14:09

Jonas