《Efficiently building a matrix to rotate one vector to another》, moller 1999
优点:
计算过程:
f --> t
v=f×t,u=v/∥v∥,c=f⋅t,θ=arccos(c)
R =
(ux2+(1−ux2)cosθuxuy(1−cosθ)+uzsinθuxuz(1−cosθ)−uysinθuxuy(1−cosθ)−uzsinθuy2+(1−uy2)cosθuyuz(1−cosθ)+uxsinθuxuz+uysinθuyuz(1−cosθ)−uxsinθuz2+(1−ux2)cosθ)
h=1−c21−c=v⋅v1−c
R =
(c+hvx2hvxvy+vzhvxvz−vyhvxvy−vzuc+hvy2hvyvz+vxhvxvz+vyhvyvz−vxc+hvz2)
HouseHolder Matrix:
H(u)=I−u⋅u2uut