从点开始等距离生成向量

时间:2012-12-30 15:35:44

标签: c++ algorithm opengl openframeworks

我试图从屏幕中心的一个点等距离生成矢量。

以前,我遵循以下方法 1.为x,y和z生成随机数随机(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)    );
}

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

1 个答案:

答案 0 :(得分:3)

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

如果您想在球体表面上均匀分布,请尝试例如Sphere Point Picking(基本上,独立生成角度,而不是x-y-z坐标)

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