c++ - 生成与点等距的 vector

标签 c++ algorithm opengl openframeworks

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

以前,我遵循以下方法 1. 为x, y, z生成随机数Random(0-400, 0+400)
2. 归一化 vector
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) 等距。很高兴知道有更好的方法来生成这些点。
我只对算法没意见。

最佳答案

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

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

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

关于c++ - 生成与点等距的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14091986/

相关文章:

java - C/C++/Java中volatile说明符的使用

c++ - Eigen :修改稀疏矩阵的三元组列表,而不是使用 coeffRef

algorithm - 找到这种模式的任何方法/算法?

algorithm - 为什么E支配v?

c++ - 将 OpenGL 用于我的 QGraphicsItems 可以加速我的 QGraphicsView 中的显示吗?

c++ - 从 QVariant 接收未知的模板化对象

O(n.m^2) 的算法运行时间

c++ - OpenGL:点在无穷远的三角形

c++ - glClear()不服从剪刀区域

c++ - 如何使用 SIFT 特征/描述符作为 SVM 训练的输入?