3D数学学习记录二

2D变换矩阵的逆矩阵:

平移矩阵的逆矩阵:[1,0,-tx][0,1,-ty][0,0,1]就相当于之前的是往前移动,现在是往后移动了。
缩放矩阵的逆矩阵:[1/Sx,0,0][0,1/Sy,0][0,0,1]就相当于把之前X,Y乘以的倍数,现在除以它的倍数的倒数。

旋转矩阵的逆矩阵:[cosx,sinx,0][-sinx,cosx,0][0,0,1]就相当于把之前旋转过去的,转回来。
(注意:一个平移(旋转、缩放)后的 点 再乘以相应的逆矩阵就等于原来没有平移(旋转、缩放)的点。)

如果一个点只是单纯的乘以逆矩阵,那么这个逆矩阵和普通的变换矩阵作用是一样的,只不过作用是相反的而已。

2D变换的物体变换和坐标系变换:
物体变换就是物体的坐标系没有发生变换的变化,如下:

F(b1,b2,b3,O)是三维坐标系位置,M是变换矩阵,c是点的齐次坐标。
F(Mc)是物体变化的数学表达形式,括号引起来的意思是M只会对c进行变化(平移、缩放、旋转),不会对坐标系原点进行变换。

坐标系变化的数学表达式:FMc,M对点进行变换,也对坐标系原点进行变换了。

复合变换:把平移、旋转、缩放结合起来,形成一个复杂的变化过程。
矩阵乘法不满足交换律,所以不同的变换顺序得到的结果可能是不一样的。

比如:FRTc,代表的是物体变换(先对点进行T变换(平移变换),然后对点进行R变换(旋转变换)。
如果换成FTRc,则代表先进行旋转,再进行平移变换,结果肯定是不一样的。

F(R(Tc)) ->F(Rc*) -> Fc** -> c***;
((FR)T)c ->(F*T)c -> (F**)c -> c***;

前者是对物体变换得到最终的c***点,后者是对坐标系原点的变换(既坐标变换)得到最终的c***点,结果是一样的。

3D变换:
平移矩阵:

1 0 0 tx
0 1 0 ty
0 0 1 tz
0 0 0 1
缩放矩阵 :

Sx 0 0 0
0 Sy 0 0
0 0 Sz 0
0 0 0 1
旋转矩阵:

点沿着x轴旋转,x的坐标不变。

 
1 0 0 0
0 cosx -sinx 0
0 sinx cosx 0
0 0 0 1

点沿着y轴旋转,y的坐标不变。

cosx 0 sinx 0
0 1 0 0
-sinx 0 cosx 0
0 0 0 1
点沿着z轴旋转,z的坐标不变。

cosx -sinx 0 0
sinx cosx 0 0
0 0 1 0
0 0 0 1
旋转这一部分有些难以理解,大概记住就OK了,如果研究下的话,可以自己画画,绕着Y转的话,你就不用管Y坐标了,因为它肯定不会变化的,只需作出一个XZ平面图,再这个平面图上对它进行研究,就跟2D旋转一样推理的。

在Unity中使用Matrix4x4.Translate(Vector3)创建一个平移矩阵。
Matrix4x4.Rotate(四元数)创建一个旋转矩阵。

Matrix4x4.Scale创建一个缩放矩阵。

Matrix4x4.TRS创建一个移动、旋转、缩放的复合矩阵。

使用Matrix4x4.MultiplyPoint或者Matrix4x4.MultiplyPoint3x4来变换一个点。
使用Matrix4x4.MultiplyVector来变换一个向量。

猜你喜欢

转载自blog.csdn.net/qq_39574690/article/details/79590974