使用蒙特卡洛方法做半球面采样时遇到有这样的一个问题:默认产生的采样向量组所在的半球面是Y轴(或其它轴)所对应的方向,但是在使用时可能就需要根据法向量对其进行变换,于是就有了这样一个问题,给定两个向量V0和V1 计算出一旋转矩阵R得到:
R V0 =V1
这个问题其实蛮简单,可以直接用两个向量的点积与叉乘计算出对应的夹角与旋转轴,然后组合出旋转矩阵即可(http://en.wikipedia.org/wiki/Rotation_matrix)。不过搜了下发现了另外一种方法:Rodrigues Rotation matrix(罗德里格旋转矩阵),虽然这种方法可能并没有速度上的优势,但之前却没什么了解(没准儿也学过,但干脆地忘了^_^)。其关于R的计算如下:
其中的I是一个单位阵,r其实也就是由两个向量叉乘得到的单位旋转向量,而Theta也就是两个向量之间的夹角。它还有的其它一些属性可以参考:http://en.wikipedia.org/wiki/Rodrigues'_rotation_formula