Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.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++_Path_Trace - Fatal编程技术网

C++ 在另一个半球中旋转方向

C++ 在另一个半球中旋转方向,c++,path,trace,C++,Path,Trace,作为蒙特卡罗路径跟踪的一部分,我在这样的半球中生成方向 double theta = acos(1 - 2 * uniformRandom01()); double phi = 2 * M_PI * uniformRandom01(); Vec direction(cos(theta) * cos(phi), sin(theta) * cos(phi), sin(phi)); 然而,这些方向是在半球中生成的,其中心是一个向量(0,1,0) 现在,我有一个与法线的交点。如何旋转生成的方向,以便

作为蒙特卡罗路径跟踪的一部分,我在这样的半球中生成方向

double theta = acos(1 - 2 * uniformRandom01());
double phi = 2 * M_PI * uniformRandom01();
Vec direction(cos(theta) * cos(phi), sin(theta) * cos(phi), sin(phi)); 
然而,这些方向是在半球中生成的,其中心是一个向量(0,1,0)

现在,我有一个与法线的交点。如何旋转生成的方向,以便将其放置在以交点法线为中心的半球中

这张照片是从

例如,生成方向的半球是底部半球。我想把这个方向放到另一个半球,像2OU3反弹半球

如果不清楚,请告诉我


谢谢你

我似乎无法使它工作。这是你的问题陈述-也许你应该向我们展示你的尝试。你所说的“上升”是什么意思?@erip好的,这不清楚上面的代码在一个半球内均匀地生成一个随机方向。该半球的中心是一个方向(0,1,0)。我这样假设是因为没有使用另一个向量。假设在一个交点处,有一个法线N(0.5,0.2,0)和它的半球。如何旋转第一个生成的方向,以便将其放置在以N为中心的半球中?@Beta我的意思是“向上”,仅指向y轴。