VECTOR点乘怎么解决180度问题?有没有比点乘更好的求角度方法?
因为CosineTheta是在 1 ~ -1 之间,所以acos(CosineTheta)会被夹持到 0 ~ 180 度之间
解决的办法有很多,我是将旋转的VECTOR先与之前的VECTOR做一次DOT乘,得到CosineThetaCheck
if else 如果 CosineThetaCheck > 0.99f 是 true
或者 (acos(CosineThetaCheck)) < (D3DX_PI/180.0f) 是 true,
这样就认为得到的VECTOR与之前的VECTOR几乎趋向于重合
那么就认为旋转角度小于180度,就使用原角度
否则认为得到的VECTOR与之前的VECTOR是不同的VECTOR,已经超过了180度
角度大于180度,因此将得到的角度取负
这样虽然能解决问题,但是计算机总有个精度问题
虽然 CosineThetaCheck 和 acos(CosineThetaCheck) 都是 double 类型也还是会出现精度问题
精度出问题,计算机判断 true/false 就会出现偏差,这样角度就会在角度的正负值之间抖动
怎么解决这个问题呢