如何生成指向具有各向同性方向分布的随机方向的单位向量?
Posted
技术标签:
【中文标题】如何生成指向具有各向同性方向分布的随机方向的单位向量?【英文标题】:How to generate a unit vector pointing in a random direction with isotropic distribution of direction? 【发布时间】:2012-04-02 19:13:59 【问题描述】:我需要创建一种方法来使用随机数生成器生成指向随机方向的三维单位向量。方向分布必须是各向同性的。
以下是我尝试生成随机单位向量的方法:v = randn(1,3);
v = v./sqrt(v*v');
但我不知道如何完成各向同性部分。有什么想法吗?
【问题讨论】:
Uniform random (Monte-Carlo) distribution on unit sphere的可能重复 也有一些不错的答案here和here @finnw:问题是重复的,但不是答案。也许我们可以合并问题? 【参考方案1】:你做得对。随机正态坐标分布为您提供均匀的方向分布。
要在单位球面上生成 10000 个均匀点,请运行
v = randn(10000,3);
v = bsxfun(@rdivide,v,sqrt(sum(v.^2,2)));
plot3(v(:,1),v(:,2),v(:,3),'.')
axis equal
【讨论】:
哇,谢谢@Jonas!我对正态分布一无所知! @Aina:二维正态分布是旋转对称的。因此,3D 正态分布具有球对称性。 令人印象深刻。关于它为什么会发生的任何直观解释? @Andrey:你的意思是,为什么正态分布是旋转对称的? 3D 正态分布与exp(- (x^2+y^2+z^2))
成正比。如果您转换到球坐标,则对称性变得很明显,其中该表达式变为exp(-(r^2))
。换句话说,密度只是半径的函数,而不是角度的函数,这意味着点均匀分布在所有角度中。
@JASC:很遗憾,没有,因为我在 R 中几乎没有识字。但是,该算法实际上是(1)从 3D 正态分布中绘制一些点(即坐标列表,其中x、y 和 z 从均值为 0,标准差为 1) 的独立正态分布中得出,然后将每个坐标三元组除以其范数,使得 x^2+y^2+z^2 对于它们中的每一个都是 1。 以上是关于如何生成指向具有各向同性方向分布的随机方向的单位向量?的主要内容,如果未能解决你的问题,请参考以下文章