向量

简单例子

向量:u=(u1,u2,u3) v=(v1,v2,v3)

叉乘公式:u x v = { u2v3-v2u3 , u3v1-v3u1 , u1v2-u2v1 }

求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标

点乘公式:u * v = u1v1+u2v2+u3v3

也可以是: uv=|u||v|*cos(向量夹角)

推导如下:

求两个tesor矩阵的夹角 两个矩阵夹角计算_转置_02


定义向量:c = a- b

根据三角形余弦定理有:

求两个tesor矩阵的夹角 两个矩阵夹角计算_点乘_03


根据关系c=a-b(a、b、c均为向量)有

求两个tesor矩阵的夹角 两个矩阵夹角计算_点乘_04


化解

求两个tesor矩阵的夹角 两个矩阵夹角计算_点乘_05


如果a向量和b向量都是已知的话,可以反过来求出夹角

求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_06


根据这个公式就可以计算向量a和向量b之间的夹角。从而就可以进一步判断这两个向量是否是同一方向,是否正交(也就是垂直)等方向关系,具体对应关系为:

a·b>0    方向基本相同,夹角在0°到90°之间

 a·b=0    正交,相互垂直  

 a·b<0    方向基本相反,夹角在90°到180°之间

//-----------------------------------------------------------------------------------------------------------------
1.1 点乘
两个n维向量点乘:
二维向量的点乘:向量的模长相乘再乘以夹角余弦值。
点乘的结果是一个数值(标量)。
几何意义:b向量再a向量上的投影长度。
要求:向量的维度必须相等
1.2 叉乘
结果:是一个向量(矢量)。
几何意义:向量a和向量b叉乘的得到的向量是同时垂直于向量a和向量b的向量,可以求法向量
要求:向量的维度必须相等

矩阵

矩阵是3D数学的重要基础,它主要用来描述两个坐标系间的关系,通过定义一种运算而将一个坐标系中的向量转换到另一个坐标系中.在线性代数中,矩阵就是以行和列形式组织的矩形数字块,向量是标量的数组,矩阵是向量的数组.

矩阵的加法与减法
  简言之,两个矩阵相加减,即它们相同位置的元素相加减!
  注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的

矩阵和矩阵的乘法:

一个A(m×a)的矩阵和一个B(a×n)的矩阵的相乘,最后的结果是C(m×n)的矩阵

两个矩阵能够相乘,前一个矩阵的列一定要等于后一个矩阵的列,否则相乘没有意义

对于C(m×n)矩阵来说,它的每一个元素Ci×j,都是用前一个矩阵的i行×后一个矩阵的j列累加得到

注意:这个相乘是过程是:i行的第m个元素和j列的第m个元素相乘,最后将结果累加

求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_07


举个例子

求两个tesor矩阵的夹角 两个矩阵夹角计算_求两个tesor矩阵的夹角_08


求两个tesor矩阵的夹角 两个矩阵夹角计算_点乘_09


矩阵和矩阵相乘,可以分解为矩阵和n维列向量相乘,最后形成一个新的矩阵,矩阵和列向量相乘,就是用后面的列向量的每个元素乘前面向量的每一列累加得到当前位置新的矩阵元素的值;形如上面,

2x-y+z*0=0,这是第一行第一列新的元素值

-x+2y-z=-1,这是第二行第一列新的元素值

0x-3y+4z=4,这是第三行第一列新的元素值

求两个tesor矩阵的夹角 两个矩阵夹角计算_转置_10


矩阵相乘简单来说,就是一个mxa矩阵和一个axn的矩阵相乘最后得到一个mxn的新矩阵,对于新矩阵的每一个元素Mixj,都是前一个矩阵的i行乘以后一个矩阵的j列求和得到
比如:

M1x1=第一个矩阵的第一行乘以第二个矩阵的第一列求和
M2x1=第一个矩阵的第二行行乘以第二个矩阵的第一列求和
M1x2=第一个矩阵的第一行乘以第二个矩阵的第二列求和
M2x2=第一个矩阵的第二行乘以第二个矩阵的第二列求和
...

求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_11

顶点着色器的主要工作是进行顶点的坐标变换,即将顶点从模型坐标转变到裁切空间坐标,具体过程如下:顶点的局部坐标—》模型矩阵(model)–》世界坐标–》视口矩阵(view)–》视口坐标–》投影矩阵(projection)–》裁切空间坐标,公式 pos = PVM*pos
从裁切空间坐标到屏幕坐标(NDC),这一步是GPU自动处理好的,用的是透视除法,这里无需关心

齐次坐标

求两个tesor矩阵的夹角 两个矩阵夹角计算_转置_12


求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_13


求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_14


齐次坐标可以理解为在原有坐标后面加一个“小尾巴”。将普通坐标转换为齐次坐标,通常就是在增加一个维度,这个维度上的数值为1。如图像坐标系(u,v)转换为(u,v,1)一样。对于无穷远点,小尾巴为0。注意,给零向量增加小尾巴,数学上无意义。

那么,为什么计算机视觉在坐标运算时要加上这个“小尾巴”呢?

我看来有两点原因:

1、 将投影平面扩展到无穷远点。如对消隐点(vanishing point)的描述。

2、 使得计算更加规整

如式(1)如果用普通坐标来表达的话,会是下面的样子:

这样的运算形式会给后与运算带来一定的麻烦,所以齐次坐标是一个更好的选择。

齐次坐标还有一个重要的性质,伸缩不变性。即:设齐次坐标M,则αM=M。方阵

方阵其实就是特殊的矩阵,当矩阵的行数与列数相等的时候,我们可以称它为方阵

单位矩阵

对于一个n阶方阵(行数等于列数的矩阵叫做方阵),若其主对角线上的元素都是1,其他地方的元素都为0,则称该矩阵为n阶单位矩阵,用In或En表示(有时也简写为I或E,在后面的文章中我们统一用I表示单位阵),如下图三阶矩阵

求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_15


单位阵的性质是任何矩阵乘上它都等于原矩阵,即AI=A,IA=A逆矩阵

引入逆矩阵的原因之一是用来实现矩阵的除法

I:表示单位矩阵

设有一个方阵A,若存在一个方阵B,使得AB=I或BA=I,则称B是A的逆矩阵,用A-1表示(事实上若AB=I,则必有BA=I)。

注意:并不是所有矩阵都有逆矩阵

如果我们拥有两个不共线的二维向量,那么我们可以用它们构成二维平面上的任一向量。但是,如果两个向量共线,那么无论怎样,我们都只能得到与他们共线的向量,就像一条直线无法确定一个平面一样

求两个tesor矩阵的夹角 两个矩阵夹角计算_点乘_16

转置矩阵

将原矩阵A的行与列交换得到的新矩阵就是转置矩阵,用AT表示。

比如:图2是图1的转置矩阵,图4是图3的转置矩阵

图1

求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_17


图2

求两个tesor矩阵的夹角 两个矩阵夹角计算_转置_18


图3

求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_19


图4

求两个tesor矩阵的夹角 两个矩阵夹角计算_齐次坐标_19

透视投影矩阵

求两个tesor矩阵的夹角 两个矩阵夹角计算_转置_21


1:Clip space中进行裁切

2:降低维度

3:近大远小