计算机图形学基础——罗德里格旋转公式

前言

  基于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θ)

以上,推导完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值