图形学中一些旋转矩阵推导

一、2D中向量旋转公式推导

已知向量(x,y)旋转θ角之后得到向量(x',y')

如下图所示
图形学中一些旋转矩阵推导
这时我可以看到的是信息是

旋转后的向量与之前的向量长度r它是不变的

第一个向量所具有的信息是
图形学中一些旋转矩阵推导
旋转后的向量所具有的信息是
图形学中一些旋转矩阵推导
根据三角函数公式
图形学中一些旋转矩阵推导
将此关系式拆开就可以得到
图形学中一些旋转矩阵推导
最后可以得到
图形学中一些旋转矩阵推导
写成矩阵形式
图形学中一些旋转矩阵推导

二、从局部空间变换到世界空间SRT矩阵中R的推导记忆

我这里是unity的左手坐标系,所以接下来我都用左手定则来阐述
图形学中一些旋转矩阵推导
首先我们先看,绕z轴的3维坐标变换
图形学中一些旋转矩阵推导
z坐标保持不变,旋转x、y坐标,这可不就是我们上面推导的二维坐标系的旋转公式吗

这样我们可以直接得到
图形学中一些旋转矩阵推导
除了y轴旋转有点不同,x轴与z轴都是在相应位置的二维旋转变换

那么为什么y轴会不同

看旋转方向

绕z轴旋转,是从x轴开始,绕原点逆时针旋转(你也可以想成x叉乘y,正好等于z轴)

绕x轴旋转,是从y轴开始,也绕原点逆时针旋转(你也可以想成y叉乘z,正好等于x轴)

可是绕y轴旋转,是从x轴开始,绕原点逆时针旋转(x叉乘z,等于-y)

所以相当于把角度向反方向旋转,这就等于了绕y轴旋转,旋转矩阵不同的记忆方法

害,之前硬啃《Unity Shader入门精要》的时候没多想,直接硬记,果然这些东西还是自己有能力推一遍会更加深刻吧

三、绕任意轴旋转矩阵

在图形学中,我们经常会遇到绕轴旋转的问题,这里先记录下欧拉角公式里的绕任意轴旋转

下面是我学习笔记,思路可能结果和思路都有可能出错,不代表绝对,仅供参考。
图形学中一些旋转矩阵推导

假设一个向量n(0,0,1),并将它看作旋转轴,再假设一点v(x,y,z),绕n向量(轴),旋转θ角,得到v’(x1,y1,z1).

首先我先找到它们共有的信息:

显然||v||模是等于||v’||模的.

根据向量加减,我们可以得到图形学中一些旋转矩阵推导
(向量v等于水平方向v//加竖直方向v⊥)
图形学中一些旋转矩阵推导
由这张图我们可以想到,图形学中一些旋转矩阵推导,那么我们先求出向量图形学中一些旋转矩阵推导
图形学中一些旋转矩阵推导向量v投影到向量n的长度再乘于**单位向量n **得到的。
图形学中一些旋转矩阵推导

非常好,我已经得到一个已知量了,只要再求个v'⊥就可以了,
我们不妨求个垂直于v//v'⊥的向量w
图形学中一些旋转矩阵推导
图形学中一些旋转矩阵推导
根据图形学中一些旋转矩阵推导
这些都是我们已知的了,代入方程式1;
图形学中一些旋转矩阵推导
自此我们得到了x基向量v'⊥
很好,再来求个y基向量也就是向量w,我们就可以知道旋转后的v'⊥
根据方程式2:
图形学中一些旋转矩阵推导
同轴同向叉乘无意义,最后得
图形学中一些旋转矩阵推导
完事了,最后将方程填完就可以得到v'⊥
图形学中一些旋转矩阵推导
图形学中一些旋转矩阵推导
图形学中一些旋转矩阵推导

仅供参考

四、Unity中解决万向节锁

1、首先什么是万向节锁1、首先什么是万向节锁

按我的理解就是,正常情况直接使用transform.localEulerAngles是没问题的,但是根据Unity的zxy的旋转规则,当你是先绕x轴(pitch俯仰)旋转90度后,这时再去单独旋转y(Yaw偏航),和单独旋转z,效果都是绕z轴(Roll桶滚)旋转,这就不是我们要的结果了。

然后解决的办法就是用四元数(Quaternion)

2、什么是四元数

这个我推荐去b站搜四元数

3、结论

通过了解与实际操作后,将欧拉角带入unity四元数Quaternion.Euler()中即可。

Unity官方文档关于Quaternion的描述:
https://docs.unity3d.com/ScriptReference/Quaternion.html

本人之前在搞摄像机跟随旋转视角和人物转向的时候踩过一次坑,之后通过各种资源知道了用四元数,所以在这按自己的想法记录下,同时也推荐朋友们去了解,共同进步

上一篇:如何在Unity中复制多个组件并粘贴到另一个GameObject上


下一篇:相机视野范围内限定拖拽(动态计算)