VECTOR点乘怎么解决180度问题?有没有比点乘更好的求角度方法?

renxu350 2011-04-16 07:35:52
因为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 就会出现偏差,这样角度就会在角度的正负值之间抖动
怎么解决这个问题呢
...全文
274 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
张赐 2011-04-24
  • 打赏
  • 举报
回复
如果旋转了180度,那么2个向量的方向完全相反,
只需要判断方向就是了,但还是有精度问题
renxu350 2011-04-20
  • 打赏
  • 举报
回复
没人回答就算了吧,版主回个贴子吧,咱们把分给分了吧

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧