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轴。