# Math in anywhere | Vector

# Vector

向量指一个同时具有大小和方向,且满足平行四边形法则的几何对象。我们用数据结构的视角来看,向量可以用数组或者链表来表达。常记为a\vec{a}或者a\bold{a},或者AB=BA\vec{AB} = B - A

image-20210427165942748

x=[a0a1an]x= \left[ \begin{matrix} a_{0} \\ a_{1} \\ \vdots \\ a_{n} \end{matrix}\right]

这里a0,a1,,ana_0,a_1,\cdots,a_n 表示向量中的每个元素,其中有 n 个数就代表向量的维。一个向量的长度我们记为 (1 范数):

a||\vec{a}||

而关于 这个概念,我可以把他理解为某个尺度 / 属性上的值。

一般来说特征有很多维,因此我们可以使用向量来表示某个物体的特征。其中,向量的每个元素就代表一维特征,而元素的值代表了相应特征的值,我们称这类向量为特征向量(Feature Vector)

矩阵的几何意义是坐标的变换。如果一个矩阵存在特征向量和特征值,那么这个矩阵的特征向量就表示了它在空间中最主要的运动方向。注意区分这两个概念

# Basic Operation

# Normalized

标准化操作能够让我们获得一个特定方向的单位向量,而这个单位向量我们就用来代表这个特定方向,我们通常记为:

a^=aa\hat{a} = \frac{\vec{a}}{||\vec{a}||}

# Addition

代数加法:首先需要满足维度相同,然后对应元素相加

a+b=[a0a1an]+[b0b1bn]=[a0+b0a1+b1an+bn]\vec{a} + \vec{b} = \left[ \begin{matrix} a_{0} \\ a_{1} \\ \vdots \\ a_{n} \end{matrix}\right] + \left[ \begin{matrix} b_{0} \\ b_{1} \\ \vdots \\ b_{n} \end{matrix}\right] = \left[ \begin{matrix} {a_{0}+b_{0}} \\ {a_{1}+b_{1}} \\ \vdots \\ {a_{n}+b_{n}} \end{matrix}\right]

几何相加:

  • 平行四边形法则:两个向量从起点相同,构成的平行四边形的对角线(夹在两个向量之间)
  • 三角形法则:一个向量的起点为一个向量的终点,构成三角形的第三条边。

image-20210427184324119

# Multiply

向量的乘法有两种类型:

  • 点乘(标量积) 也就是结果是一个数(标量)
  • 叉乘(向量积) 也就是结果是一个向量 (向量)

点乘:

image-20210427185817060

ab=abcosθif(unitvector){cosθ=a^b^}\vec{a} \cdot \vec{b} = ||\vec{a}|| \space ||\vec{b}|| \cos \theta \\ if(unit\space vector) \{\cos \theta = \hat{a} \cdot \hat{b}\}

cosθ=abab\cos \theta = \frac{\vec{a} \cdot \vec{b}}{||\vec{a}|| ||\vec{b}||}

作为标量积满足基本的运算:
ab=ba{\vec{a}\cdot\vec{b}=\vec{b}\cdot\vec{a} }

a(b+c)=ac+ba{\vec{a}\cdot(\vec{b}+\vec{c})=\vec{a}\cdot\vec{c}+\vec{b}\cdot\vec{a} }

(ka)b=akb=k(ab)(k\vec{a}) \cdot \vec{b} = \vec{a} \cdot k\vec{b} = k(\vec{a} \cdot \vec{b})

几何计算:

ab=[a0a1an][b0b1bn]=a0b0+a1b1++anbn\vec{a} \cdot \vec{b} = \left[ \begin{matrix} a_{0} \\ a_{1} \\ \vdots \\ a_{n} \end{matrix}\right] \cdot \left[ \begin{matrix} b_{0} \\ b_{1} \\ \vdots \\ b_{n} \end{matrix}\right] = {a_{0}b_{0}} + {a_{1}b_{1}} + \cdots + {a_{n}b_{n}}

投影计算:

image-20210427191951812

b=ka^k=b=bcosθ\vec{b}_{\bot} = k \hat{a} \\ k = ||\vec{b}_{\bot}|| = ||\vec{b}|| \cos \theta

叉乘:

对于线性无关的两个向量 a\mathbf {a}b\mathbf {b} ,它们的外积写作a×b\mathbf {a} \times \mathbf {b},是a\mathbf {a}b\mathbf {b} 所在平面的法线向量,与 a\mathbf {a}b\mathbf {b} 都垂直,外积作为一个向量,其方向取决于右手定则

右手定则:
四指指向第一个向量的方向,四指往第二个向量方向握拳,此时大拇指的指向就是。这也意味着叉乘不支持乘法的交换律,因为和初始向量的位置有关。

image-20210427231239263

如上图演示了用法:

A×B=C\vec{A} \times \vec{B} = \vec{C}

image-20210427225630554

外积的定义为:

a×b=absin(θ)n{\displaystyle \mathbf {a} \times \mathbf {b} =\|\mathbf {a} \|\|\mathbf {b} \|\sin(\theta )\ \mathbf {n} }

其中 θ\theta 表示a\mathbf {a}b\mathbf {b} 在它们所定义的平面上的夹角0θ180{\displaystyle 0^{\circ }\leq \theta \leq 180^{\circ }}a{\displaystyle \|\mathbf {a} \|}b{\displaystyle \|\mathbf {b} \|} 是向量 a\mathbf {a}b\mathbf {b} 的模长,而 n\mathbf{n} 则是一个与 ab\mathbf {a} 、\mathbf {b} 所构成的平面垂直的单位向量,方向由右手定则决定。根据上述公式,当 a\mathbf {a}b\mathbf {b} 平行(即 {θ\theta 为 0° 或 180°)时,它们的外积为零向量 0\mathbf{0}

几何计算:

u×v=ijku1u2u3v1v2v3{\displaystyle \mathbf {u\times v} ={\begin{vmatrix}\mathbf {i} &\mathbf {j} &\mathbf {k} \\u_{1}&u_{2}&u_{3}\\v_{1}&v_{2}&v_{3}\\\end{vmatrix}}}

然后需要计算哪一个维度,就将该维度所在的行,所在的列去掉,剩下部分构成的行列式的结果即为系数。

u×v=u2u3v2v3iu1u3v1v3j+u1u2v1v2k=(u2v3u3v2)i(u1v3u3v1)j+(u1v2u2v1)k{\displaystyle {\begin{aligned}\mathbf {u\times v} &={\begin{vmatrix}u_{2}&u_{3}\\v_{2}&v_{3}\end{vmatrix}}\mathbf {i} -{\begin{vmatrix}u_{1}&u_{3}\\v_{1}&v_{3}\end{vmatrix}}\mathbf {j} +{\begin{vmatrix}u_{1}&u_{2}\\v_{1}&v_{2}\end{vmatrix}}\mathbf {k} \\&=(u_{2}v_{3}-u_{3}v_{2})\mathbf {i} -(u_{1}v_{3}-u_{3}v_{1})\mathbf {j} +(u_{1}v_{2}-u_{2}v_{1})\mathbf {k} \\ \end{aligned}}}

几何意义:

如果以向量a\mathbf {a}b\mathbf {b} 为边构成一个平行四边形,那么这两个向量外积的模长与这个平行四边形的正面积相等:

image-20210427233912209

a×b=absinθ.{\displaystyle \left\|\mathbf {a} \times \mathbf {b} \right\|=\left\|\mathbf {a} \right\|\left\|\mathbf {b} \right\|\sin \theta .}

# Vector Space

对一般域 F,V 记为 F - 向量空间。若 F 是实数域ℝ,则 V 称为实数向量空间

若 F 是复数域ℂ,则 V 称为复数向量空间

若 F 是有限域,则 V 称为有限域向量空间

image-20210428000743493

公理说明
向量加法的结合律u + (v + w) = (u + v) + w
向量加法的交换律u + v = v + u
向量加法的单位元存在一个叫做零向量的元素 0V,使得对任意 uV 都满足 u + 0 = u
向量加法的逆元素对任意 vV 都存在其逆元素−vV 使得 v + (−v) = 0
标量乘法与标量的域乘法相容a(bv) = (ab)v
标量乘法的单位元 F 存在乘法单位元 1 满足 1v = v
标量乘法对向量加法的分配律a(u + v) = au + av
标量乘法对域加法的分配律(a + b)v = av + bv

如果VV 满足上述的公理,我们就称VVFF 上的向量空间。

# Vector Distance

Manhattan Distance

曼哈顿距离,这个距离度量的名字来自美国曼哈顿地区,从一个十字路口开车到另外一个十字路口,驾驶距离是多少呢?当然不是两点之间的直线距离,因为你无法穿越挡在其中的高楼大厦。你只能驾车绕过这些建筑物,实际的驾驶距离就叫作曼哈顿距离。

image-20210428001903637

我们在二维空间中:假设两个点x(x1,x2)x(x_1,x_2)y(y1,y2)y(y_1,y_2)

MD(x,y)=x1y1+x2y2MD(x,y) = |x_1 - y_1| + |x_2 - y_2|

推广到 n 维空间,曼哈顿距离:

MD(x,y)=i=1nxiyiMD(x,y) = \sum_{i=1}^n |x_i - y_i|

从图里也能发现曼哈顿距离的特点:曼哈顿距离和路径无关,但是有多条路线。


Euclidean Distance

欧氏距离,其实就是欧几里得距离。欧氏距离是一个常用的距离定义,指在 n 维空间中两
个点之间的真实距离。

image-20210428002635573

我们在二维空间中:假设两个点d(p1,p1)d(p_1,p_1)q(q1,q2)q(q_1,q_2)

ED(x,y)=(q1p1)2+(q2p2)2ED(x,y) = \sqrt{(q_1 - p_1)^2 + (q_2 - p_2)^2}

推广到 n 维空间,欧式距离:

ED(x,y)=i=1n(piqi)2ED(x,y) = \sqrt{\sum_{i=1}^n(p_i - q_i)^2}

从图里也能发现欧式距离的特点:也就是直线距离,只有一种路线。


Chebyshev Distance

切比雪夫其实是在模拟国际象棋里国王的走法。国王可以走临近 8 个格子里的任何一个,那么国王从格子(x1,x2)(x_1,x_2) 走到格子(y1,y2)(y_1,y_2) 最少需要多少步呢?其实就是二维空间里的切比雪夫距离。一开始,为了走尽量少的步数,国王走的一定是斜线,所以横轴和纵轴方向都会减 1,直到国王的位置和目标位置在某个轴上没有差距,这个时候就改为沿另一个轴每次减 1。

image-20210428003634092

我们在二维空间中:假设两个点x(x1,x2)x(x_1,x_2)y(y1,y2)y(y_1,y_2)

CD(x,y)=max(x1y1,x2y2)CD(x,y) = max(|x_1 - y_1|,| x_2 - y_2|)

推广到 n 维空间,切比雪夫距离:

CD(x,y)=argi=1nmaxxiyiCD(x,y) = \arg_{i =1}^n max|x_i - y_i|

arg max :就是使后面这个式子达到最大值时的变量的取值


上述三种距离,都可以用一种通用的形式表示,那就是闵可夫斯基距离,也叫闵氏距离。

在二维空间中,两个点x(x1,x2)x(x_1,x_2)y(y1,y2)y(y_1,y_2) 间的闵氏距离:

MKD(x,y)=x1y1p+x2y2ppMKD(x,y) = \sqrt[p]{|x_1 - y_1|^p + |x_2 - y_2|^p}

推广到 n 维空间,闵氏距离:

MKD(x,y)=i=1nxiyippMKD(x,y) = \sqrt[p]{\sum_{i=1}^n|x_i - y_i|^p }

其中pp 是一个变参数,不同的 p 取值就能转化不同的距离:

  • p=1p = 1,曼哈顿距离
  • p=2p = 2,欧氏距离
  • p=p = \infty,切比雪夫距离

pp 趋近于无穷大的时候,就是切比雪夫距离。这是因为pp 当趋近于无穷大的时候,最大的xiyi|x_i -y_i|,会占到全部权重。

# Vector length

向量的长度,也叫向量的模,是向量所对应的点到空间原点的距离。通常我们使用欧氏距离来表示向量的长度。范数常常被用来衡量某个向量空间中向量的大小或者长度

  • L1L_1 范数x||x||,它是xx 向量各个元素绝对值之和,对应于向量和原点之间的曼哈顿距离
  • L2L_2 范数x2||x||_2,它是xx 向量各个元素平方和的12\frac{1}{2} 次方,对应于向量和原点之间的欧式距离
  • LpL_p 范数xp||x||_p,它是xx 向量各个元素绝对值pp 次方和的1p\frac{1}{p} 次方,对应于向量和原点之间的闵式距离
  • LL_{\infty} 范数x||x||_{\infty},它是xx 向量各个元素绝对值最大那个元素的绝对值,对应于向量和原点之间的切比雪夫距离

# Vector angle

向量夹角的余弦,它计算了空间中两个向量所形成夹角的余弦值:

Cosine(X,Y)=i=1n(xi×yi)i=1nxi2×i=1nyi2Cosine(X,Y)= \frac{\sum_{i=1}^n(x_i \times y_i)}{\sqrt{\sum_{i=1}^nx_i^2 \times \sum_{i=1}^n y_i^2}}

分子是两个向量的点乘,而分母是两者长度(或 L2 范数)的乘积,而 L2 范数可以使用向量点乘自身的转置来实现。夹角余弦的取值范围在 [-1,1],

  • 当两个向量的方向重合时夹角余弦取最大值 1,
  • 当两个向量的方向完全相反夹角余弦取最小值 -1
  • 值越大,说明夹角越小,两点相距就越近
  • 值越小,说明夹角越大,两点相距就越远

# Application

在 CG 领域,向量点乘的应用:

  • 测量两个向量的夹角(两个方向的距离)
  • 向量分解
  • 确定向量的朝向(向前 / 向后)

image-20210427204149335

在 CG 领域,向量叉乘的应用:

  • 确定向量的位置(左还是右)
  • 确定向量的位置(里还是外
    • image-20210427234653678

# Matrix

# Basic Transform

是指矩阵内的元素行索引和纵索引互换,例如xijx_{ij} 变为xjix_{ji},相应的,矩阵的形状由转置前的 n × m 变为转置后的 m × n。从几何的角度来说,矩阵的转置就是原矩阵以对角线为轴进行翻转后的结果。下面这张图展示了矩阵转置之后的矩阵

image-20210428012222044

在线性代数中,n 阶单位矩阵,是一个n×nn\times n 的方形矩阵,其主对角线元素为 1,其余元素为 0。单位矩阵以InI_n 表示:

I1=[1],I2=[1001],I3=[100010001],,In=[100010001]I_{1}={\begin{bmatrix}1\end{bmatrix}},\ I_{2}={\begin{bmatrix}1&0\\0&1\end{bmatrix}},\ I_{3}={\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}},\ \cdots ,\ I_{n}={\begin{bmatrix}1&0&\cdots &0\\0&1&\cdots &0\\\vdots &\vdots &\ddots &\vdots \\0&0&\cdots &1\end{bmatrix}}

逆矩阵:就是和原矩阵相乘结果是单位矩阵

X1X=InX^{-1}X = I_n

逆矩阵的一些基本性质:

(A1)1=A(λA)1=1λ×A1(AB)1=B1A1(AT)1=(A1)TATA的转置)det(A1)=1det(A)det为行列式)\left (A^{-1} \right )^{-1}=A \\ (\lambda A)^{-1}=\frac{1}{\lambda}\times A^{-1} \\ (AB)^{-1}=B^{-1}A^{-1} \\ {\displaystyle \left(A^{\mathrm {T} }\right)^{-1}=\left(A^{-1}\right)^{\mathrm {T} }}(A^{\mathrm{T}}为A的转置) \\ \det(A^{-1})=\frac{1}{\det(A)}(det为行列式)

# Basic operation

# Addition

相同 n X m 矩阵,对应元素相加

# Multiply

image-20210428013552138

# Application

# From A Example

首先我们看一个例子:

image-20210506135229995

这是我们的目标变换:

[xy]=[s00s][xy]\left[ \begin{matrix} x^{'} \\ y^{'} \end{matrix}\right] = \left[ \begin{matrix} s&0 \\ 0&s \\ \end{matrix}\right] \left[ \begin{matrix} x \\ y \end{matrix}\right]

推广到各种变换,都能转化成线性矩阵何向量的乘积,一般性的:

[xy]=[abcd][xy]x=Mx\left[ \begin{matrix} x^{'} \\ y^{'} \end{matrix}\right] = \left[ \begin{matrix} a&b \\ c&d \\ \end{matrix}\right] \left[ \begin{matrix} x \\ y \end{matrix}\right] \\ x^{'} = M x

Scale

Reflection

image-20210507130703030

Shear

image-20210507131315815

Rotation

Note:旋转的轴点我们默认使用原点

image-20210507131439010

# Homogeneous Coordinates

貌似一个 2 x 2 的矩阵就能表示大多数点 / 向量的变换,但思考以下的问题:

image-20210507132234247

此时矩阵无法处理平移的问题,需要额外计算:

[xy]=[abcd][xy]+[txty]\left[ \begin{matrix} x^{'} \\ y^{'} \end{matrix}\right] = \left[ \begin{matrix} a&b \\ c&d \\ \end{matrix}\right] \left[ \begin{matrix} x \\ y \end{matrix}\right] + \left[ \begin{matrix} t_x \\ t_y \end{matrix}\right]

这使得看起来非常臃肿,同时也证明了平移变换不是线性变换。

为了解决无法统一的问题,我们引入了齐次坐标系:通过增加的一个维度的信息,来将我们的平移变换统一起来。

齐次坐标:就是将一个原本是 n 维的向量用一个 n+1 维向量来表示,是指一个用于投影几何里的坐标系统,如同用于欧氏几何里的笛卡儿坐标一般。

我们做出以下定义:

Point=(xy1)Vector=(xy0)Point = \left( \begin{matrix} x \\ y \\ 1 \end{matrix}\right) Vector= \left( \begin{matrix} x \\ y \\ 0 \end{matrix}\right)

多出一维的信息,我们用来区分是向量还是点,因为如果作为点,有唯一性,当第三维维 1 是,就是该点坐标。有了这些定义后,我们就能推出以下的关系:

vector+vector=vectorpointpoint=vectorpoint+vector=pointpoint+point=mid_pointvector + vector = vector \\ point - point = vector \\ point + vector = point \\ point + point = mid\_point

我们可以将公式(27)进行转化为以下:

[xy1]=[abtxcdty001][xy1]\left[ \begin{matrix} x^{'} \\ y^{'} \\ 1 \end{matrix}\right] = \left[ \begin{matrix} a&b&t_x \\ c&d&t_y \\ 0&0&1 \end{matrix}\right] \left[ \begin{matrix} x \\ y \\ 1 \end{matrix}\right]

于是线性变换和平移变换在齐次坐标系就统一了:

image-20210507134408024

逆转换

当我们知道一个点 / 向量的变换矩阵后,我们就能通过这个变换矩阵的逆矩阵使得变换后的点 / 向量回复原样

image-20210507134718656

目标转化

如果我们有一个起始图像和目标图像的关系如下:
image-20210507135052398

这里有两种思路:

  • 先进行平移再进行线性变换(此时要注意到旋转轴点是原点)
  • 先进行线性变换再进行平移

image-20210507135352906

我们可以看到先进行线性变换才能获得正确的目标,因为大多数线性变换是基于原点进行的,如果先进行平移则会导致图像坐标到原点左边的距离改变。这也再次体现了矩阵计算不遵守交换律:

R45T(1,0)T(1,0)R45R_{45} \cdot T_{(1,0)} \neq T_{(1,0)} \cdot R_{45}

image-20210507140153348

目标转化分解

上面我们提到都是图像初始点在原点的情况,如果我们的起始图像不是在原点那怎么处理呢,主要分为以下三步:

  1. 平移到原点
  2. 线性变换
  3. 平移回去

image-20210507140604239

矩阵表示:

T(c)R(a)T(c)T(c) \cdot R(a) \cdot T(-c)

# Generalize to high-dimensional

3D_Point=(xyz1)3D_Vector=(xyz0)3D\_Point = \left( \begin{matrix} x \\ y \\ z \\ 1 \end{matrix}\right) 3D\_Vector= \left( \begin{matrix} x \\ y \\ z \\ 0 \end{matrix}\right)

Scale

S(sx,sy,sz)=(sx0000sy0000sz00001)S(s_x,s_y,s_z) = \left( \begin{matrix} s_x & 0 & 0 & 0 \\ 0 & s_y & 0 & 0 \\ 0 & 0 & s_z & 0 \\ 0 & 0 & 0 & 1 \end{matrix}\right)

Translation

S(sx,sy,sz)=(100tx010ty001tz0001)S(s_x,s_y,s_z) = \left( \begin{matrix} 1 & 0 & 0 & t_x \\ 0 & 1 & 0 & t_y \\ 0 & 0 & 1 & t_z \\ 0 & 0 & 0 & 1 \end{matrix}\right)

Rotation

image-20210507142831812

旋转和 2 维的有一些不同,此时会有不同的旋转轴,要分情况讨论:

绕 x 轴旋转:

Rx(a)=(10000cosasina00sinacosa00001)R_x(a) = \left( \begin{matrix} 1 & 0 & 0 & 0 \\ 0 & \cos a & -\sin a & 0 \\ 0 & \sin a & \cos a & 0 \\ 0 & 0 & 0 & 1 \end{matrix}\right)

绕 z 轴旋转:

Rz(a)=(cosasina00sinacosa0000100001)R_z(a) = \left( \begin{matrix} \cos a & -\sin a & 0 & 0 \\ \sin a & \cos a & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{matrix}\right)

绕 y 轴旋转:

Ry(a)=(cosa0sina00100sina0cosa00001)R_y(a) = \left( \begin{matrix} \cos a & 0 & \sin a & 0 \\ 0 & 1 & 0 & 0 \\ -\sin a & 0 & \cos a & 0 \\ 0 & 0 & 0 & 1 \end{matrix}\right)

Note: y 轴的旋转部分和 x,y 都不一样。

任何 3D 旋转都能分解为:

Rx,y,z(α,β,γ)=Rx(α)Ry(β)Rz(γ)R_{x,y,z}(\alpha,\beta,\gamma) = R_x(\alpha)R_y(\beta)R_z(\gamma)

image-20210507145735927

Rodrigues’ Rotation

vrot=vcosθ+(k×v)sinθ+k(kv)(1cosθ){\displaystyle \mathbf {v} _{\mathrm {rot} }=\mathbf {v} \cos \theta +(\mathbf {k} \times \mathbf {v} )\sin \theta +\mathbf {k} ~(\mathbf {k} \cdot \mathbf {v} )(1-\cos \theta )\,}

这个公式中vrotv_{rot} 是我们的目标向量,vv 是我们的初始向量,kk 是我们给定一个方向的单位向量,这个公式的推导过程如下,首先我们来看一个变换。

image-20210508230332872

已知初始向量vv 和给定的方向的单位向量kk,我们可以把向量vv 分解为平行和垂直于向量kk 的向量,记为(因为垂直叉乘后模等于原来模本身):

v=(vk)kv=k×(k×v)v_{\parallel} = (v \cdot k) k \\ v_{\bot} = -k \times (k \times v) \\

然后我们可以把目标向量vrotv_{rot} 也分解到平行和垂直于向量kk 的向量,我们可以得出:

vrot=v{\displaystyle \mathbf {v} _{\parallel \mathrm {rot} }=\mathbf {v} _{\parallel }}

因为在平行于kk 的方向上,旋转不改变,接着来看垂直方向:

vrot=v,vrot=cos(θ)v+sin(θ)k×v{\displaystyle {\begin{aligned}\left|\mathbf {v} _{\perp \mathrm {rot} }\right|&=\left|\mathbf {v} _{\perp }\right|\,,\\\mathbf {v} _{\perp \mathrm {rot} }&=\cos(\theta )\mathbf {v} _{\perp }+\sin(\theta )\mathbf {k} \times \mathbf {v} _{\perp }\end{aligned}}}

image-20210508231733926

最后我们将公式进行化简:

vrot=vrot+vrot=v+cos(θ)v+sin(θ)k×v=v+cos(θ)(vv)+sin(θ)k×v=cos(θ)v+(1cosθ)v+sin(θ)k×v=cos(θ)v+(1cosθ)(kv)k+sin(θ)k×v{\displaystyle {\begin{aligned}\mathbf {v} _{\mathrm {rot} } &=v_{\parallel rot} + v_{\bot rot} \\ &=\mathbf {v} _{\parallel }+\cos(\theta )\,\mathbf {v} _{\perp }+\sin(\theta )\,\mathbf {k} \times \mathbf {v} \\&=\mathbf {v} _{\parallel }+\cos(\theta )\left(\mathbf {v} -\mathbf {v} _{\parallel }\right)+\sin(\theta )\,\mathbf {k} \times \mathbf {v} \\&=\cos(\theta )\,\mathbf {v} +(1-\cos \theta )\mathbf {v} _{\parallel }+\sin(\theta )\,\mathbf {k} \times \mathbf {v} \\&=\cos(\theta )\,\mathbf {v} +(1-\cos \theta )(\mathbf {k} \cdot \mathbf {v} )\mathbf {k} +\sin(\theta )\,\mathbf {k} \times \mathbf {v} \end{aligned}}}

进一步,我们讨论k×vk \times v 的矩阵表示形式KK

K=k×v=k2k3v2v3ik1k3v1v3j+k1k2v1v2k=(k2v3k3v2)i(k1v3k3v1)j+(k1v2k2v1)k=[kyvzkzvykzvxkxvzkxvykyvx]=[0kzkykz0kxkykx0][vxvyvz]K={\displaystyle {\begin{aligned}\mathbf {k\times v} &={\begin{vmatrix}k_{2}&k_{3}\\v_{2}&v_{3}\end{vmatrix}}\mathbf {i} -{\begin{vmatrix}k_{1}&k_{3}\\v_{1}&v_{3}\end{vmatrix}}\mathbf {j} +{\begin{vmatrix}k_{1}&k_{2}\\v_{1}&v_{2}\end{vmatrix}}\mathbf {k} \\&=(k_{2}v_{3}-k_{3}v_{2})\mathbf {i} -(k_{1}v_{3}-k_{3}v_{1})\mathbf {j} +(k_{1}v_{2}-k_{2}v_{1})\mathbf {k} \\ &={\begin{bmatrix}k_{y}v_{z}-k_{z}v_{y}\\k_{z}v_{x}-k_{x}v_{z}\\k_{x}v_{y}-k_{y}v_{x}\end{bmatrix}}\\ &={\begin{bmatrix}0&-k_{z}&k_{y}\\k_{z}&0&-k_{x}\\-k_{y}&k_{x}&0\end{bmatrix}}{\begin{bmatrix}v_{x}\\v_{y}\\v_{z}\end{bmatrix}} \end{aligned}}}

最后我们就能得到我们的计算公式:

R(k,θ)=cos(θ)k+(1cos(θ))kk+sin(θ)(0kzkykz00kykx0)R(k,\theta) = \cos(\theta) \cdot k + (1-\cos (\theta))k\cdot k_{\bot} + \sin (\theta) \left( \begin{matrix} 0 & -k_z & k_y \\ k_z & 0 & 0 \\ -k_y & k_x & 0 \\ \end{matrix}\right)

同样可以推出:

R=kcosθ+(sinθ)K+(1cosθ)K2{\displaystyle \mathbf {R} =k\cos \theta +(\sin \theta )\mathbf {K} +(1-\cos \theta )\mathbf {K} ^{2}}

更新于

请我喝[茶]~( ̄▽ ̄)~*

Junwide Xiao 微信支付

微信支付

Junwide Xiao 支付宝

支付宝