How to generate a unit vector pointing in a random

2019-02-06 07:07发布

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?

2条回答
小情绪 Triste *
2楼-- · 2019-02-06 07:48

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.

查看更多
我想做一个坏孩纸
3楼-- · 2019-02-06 08:00

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

查看更多
登录 后发表回答