前言
基于GAMES101——闫令琪老师的视频为基础,整理,总结而来。感谢闫老师带来如此好的一份教学,视频链接:https://www.bilibili.com/video/BV1X7411F744
正文
罗德里格旋转公式是一个可以求得任意向量沿着任意轴旋转任意角度后的向量的一个公式,在游戏开发中经常有使用到。
公式介绍
公式:👇
分别解释上面的变量:
- V rot:旋转后向量
- V :原始向量
- θ:旋转角度
- k:旋转轴的向量,且是单位向量
推导
我们都知道,,某个向量都可以由其它向量相加得来,那么,原始向量V也可以拆分为延轴的一条向量v∣∣,和一条垂直于旋转轴的向量v⊥,如下图所示👇

如上图,我们可以知道:V = V∥ + V⊥。同理,在旋转后的Vrot = V∥ + V rot⊥。

V∥的推导:
有了前面铺垫,我们根据上图推导,首先,已知量只有θ旋转角度,已知向量V,已知旋转轴单位向量K,根据向量点乘,我们可以知道V∥ = K (K · V)。括号外的单位向量K提供方向,括号内K·V提供向量V在单位向量K上的投影长度。
V⊥的推导:

已知了V∥后,根据V = V∥ + V⊥,可知:V⊥= V - V∥。也就是说,V⊥也是已知的了。
V rot⊥的推导:
由于向量V绕旋转轴K旋转,可知和K轴平行的V∥方向与长度都是不变的,我们需要求的就是变化后的V⊥,设置一个变量V rot⊥表示变化后的V⊥。

由上图,我们可以知道只要求出V1向量和V2向量,就可以求出来对应的V rot⊥。
接下来就是求V1,V2向量:

由上图推导,我们可以得知:V rot⊥ = V⊥*Cosθ + (K×V)Sinθ 带入V⊥后,可以得出:
V rot⊥ = [V - (K·V)] * Cosθ + (K×V)Sinθ
又!因为前面推导出,旋转后的Vrot = V∥ + V rot⊥,所以最后得公式:
V rot = (K·V)+ [V - (K·V)] * Cosθ + (K×V)Sinθ = V*Cosθ + (K×V)Sinθ + K(K·V)(1-Cosθ)。
以上,推导完成。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/13796.html