0

我正在尝试生成与屏幕中心点等距的向量。

以前,我遵循以下方法 1. 为 x、y 和 z 生成随机数 Random(0-400, 0+400)
2. 标准化向量
3. 将它们缩放到想要的任何距离

但是,这是我的原点为 0 的时候。现在,我必须从屏幕中心做这样的事情。我尝试采用以下方法,出于某种原因,这只是在正象限中给了我 x 和 y(z 结果很好)

//Origin (midpointX of screen, midPointY of screen,  z=0)
//vector<Vec3f> positions;
//positions.push_back(getPoint().scale(300);

getPoint{
Vec3f rVector;
rVector.set( Random(midPointX-100,midPointX+100), Random(midPointY-100,midPointY+100), Random(0-100,0+100)    );
}

假设所有这些点都位于某个半径的球面上。因此,它们与中心 (x,y,z) 等距。很高兴知道生成这些点的更好方法。
我只对算法很好。

4

1 回答 1

3

你关心角度的pdf(概率分布)吗?通过在立方体中生成均匀分布的随机点,您将倾向于选择立方体角的方向。这显然不同于在球体表面上随机采样点。

如果您想要球体表面上的均匀分布,请尝试例如球体点拾取(基本上,独立生成角度,而不是 xyz 坐标)

正如其他人所指出的那样,就将球体从原点移动到不同的点而言,这只是将常数添加到最终结果(从极坐标计算的 xyz 坐标)的问题。

于 2012-12-30T15:44:05.547 回答