How to generate a unit vector pointing in a random

2019-02-06 07:05发布

问题:

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?

回答1:

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



回答2:

I don't know anything much about Matlab but it seems to me like you might try generating two random polar coordinates (theta and phi) and then converting them into Cartesian coordinates using trig.