Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 生成与点等距的向量_C++_Algorithm_Opengl_Openframeworks - Fatal编程技术网

C++ 生成与点等距的向量

C++ 生成与点等距的向量,c++,algorithm,opengl,openframeworks,C++,Algorithm,Opengl,Openframeworks,我试图从屏幕中心的一个点生成等距的向量 在此之前,我遵循以下方法 1.为x、y和z生成随机数(0-400,0+400) 2.规范化向量 3.将它们缩放到所需的任意距离 然而,这是我的原点在0的时候。现在,我必须从屏幕中央做一些类似的事情。我试着用下面的方法,出于某种原因,这只给了我正象限中的x和y(z是好的) //原点(屏幕中点X,屏幕中点Y,z=0) //向量位置; //位置。向后推(getPoint()。刻度(300); getPoint{ Vec3f受体; rVector.set(随机(中

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

在此之前,我遵循以下方法 1.为x、y和z生成随机数(0-400,0+400)
2.规范化向量
3.将它们缩放到所需的任意距离

然而,这是我的原点在0的时候。现在,我必须从屏幕中央做一些类似的事情。我试着用下面的方法,出于某种原因,这只给了我正象限中的x和y(z是好的)

//原点(屏幕中点X,屏幕中点Y,z=0)
//向量位置;
//位置。向后推(getPoint()。刻度(300);
getPoint{
Vec3f受体;
rVector.set(随机(中点x-100,中点x+100),随机(中点y-100,中点y+100),随机(0-100,0+100));
}
假设所有这些点都位于某个半径的球体的表面上。因此,这些点与中心(x、y、z)的距离相等。如果知道生成这些点的更好方法,那就太好了。
我只对算法很满意。

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

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

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

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

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


至于将球体从原点移动到另一个点,这只是在最终结果中添加常量的问题(根据极坐标计算的x-y-z坐标),正如其他人所指出的。

将向量从原点0移动到屏幕中心等其他点是平移的作用。将向量从原点0移动到屏幕中心等其他点是平移的作用。
//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)    );
}