前期知识

矩阵的乘法:左侧矩阵的iii行向量乘右侧矩阵的jjj列向量,依次对应,相乘后相加,得到的结果为矩阵第iii行,第jjj列的元素。
什么是齐次矩阵:行列相等。
矩阵的转置:行变列,列变行。角标TTT表示矩阵的转置。

简单的平移、旋转、对称

一个点的坐标为(x,y)(x,y)(x,y),使用矩阵中的列向量表示为M=(x,y,1)M=(x,y,1)M=(x,y,1)TTT

  1. 平移

假设该点在X轴方向上移动dx距离,在Y轴方向上移动dy距离。
根据矩阵乘法的特点,可以写出2x2的平移矩阵为:M1=[10dx01dy001]M_{1}=\left[ \begin{array}{ll} 1&0&dx\\ 0&1&dy\\ 0&0&1 \end{array}\right]M1= 100010dxdy1

计算M1∗MM_{1}*MM1MM′=[10dx01dy001]∗[xy1]=[x+dxy+dy1]M'=\left[ \begin{array}{ll} 1&0&dx\\ 0&1&dy\\ 0&0&1 \end{array}\right]*\left[ \begin{array}{ll} x\\ y\\ 1 \end{array}\right]=\left[ \begin{array}{ll} x+dx\\ y+dy\\1 \end{array}\right]M= 100010dxdy1 xy1 = x+dxy+dy1

可得平移后的坐标为(x+dx,y+dy)(x+dx,y+dy)(x+dx,y+dy)

  1. 旋转

旋转使用极坐标进行推导,得出2*2的旋转矩阵。ααα为点向量与X正半轴的夹角,θθθ为顺时针旋转的角度。

{x=rcos(α−θ)y=rsin(α−θ)⇒{x=rcosαcosθ+rsinαsinθy=rsinαcosθ−rcosαsinθ⇒{x=xcosθ+ysinθy=ycosθ−xsinθ\left\{ \begin{array}{ll} x=rcos(α-θ)\\ \\y=rsin(α-θ) \end{array}\right. \Rightarrow\left\{ \begin{array}{ll} x=rcosαcosθ+rsinαsinθ\\ \\ y=rsinαcosθ-rcosαsinθ \end{array}\right.\Rightarrow\left\{ \begin{array}{ll} x=xcosθ+ysinθ\\ \\ y=ycosθ-xsinθ \end{array}\right. x=rcos(αθ)y=rsin(αθ) x=rcosαcosθ+rsinαsinθy=rsinαcosθrcosαsinθ x=xcosθ+ysinθy=ycosθxsinθ

根据推导出的公式,我们可以得到旋转矩阵为:M2=[cosθsinθ0−sinθcosθ0001]M_{2}=\left[ \begin{array}{ll} cosθ&sinθ&0\\ -sinθ&cosθ&0\\ 0&0&1 \end{array}\right]M2= cosθsinθ0sinθcosθ0001

计算M2∗MM_{2}*MM2MM′=[cosθsinθ0−sinθcosθ0001]∗[xy1]=[xcosθ+ysinθ−xsinθ+ycosθ1]M'=\left[ \begin{array}{ll} cosθ&sinθ&0\\ -sinθ&cosθ&0\\ 0&0&1 \end{array}\right]*\left[ \begin{array}{ll} x\\ y\\ 1 \end{array}\right]=\left[ \begin{array}{ll} xcosθ+ysinθ\\ -xsinθ+ycosθ\\1 \end{array}\right]M= cosθsinθ0sinθcosθ0001 xy1 = xcosθ+ysinθxsinθ+ycosθ1

可得旋转后的坐标为(xcosθ+ysinθ,−xsinθ+ycosθ)(xcosθ+ysinθ, -xsinθ+ycosθ)(xcosθ+ysinθ,xsinθ+ycosθ)

3.对称
考虑一个点关于X轴对称,那么它的对称矩阵为:M3=[1000−10001]M_{3}=\left[ \begin{array}{ll} 1&0&0\\ 0&-1&0\\ 0&0&1 \end{array}\right]M3= 100010001

进行矩阵运算M′=[1000−10001]∗[xy1]=[x−y1]M'=\left[ \begin{array}{ll} 1&0&0\\ 0&-1&0\\ 0&0&1 \end{array}\right]*\left[ \begin{array}{ll} x\\ y\\ 1 \end{array}\right]=\left[ \begin{array}{ll} x\\ -y\\1 \end{array}\right]M= 100010001 xy1 = xy1

可得关于X轴对称的坐标为(x,−y)(x,-y)(x,y)

求点关于任意直线的对称点

设直线方程为y=mx+by=mx+by=mx+b
我们考虑之前的平移、旋转、对称操作,这三个基本操作的组合运动其实可以完成关于任意直线的对称。
如果让直线与X轴重合,那么我们求点的对称将非常方便,那么继续考虑,如何让直线对于点来说是X轴呢?在y=mx+by=mx+by=mx+b中我们知道,直线在Y轴上距离原点的距离为bbb,因此我们先将点向下平移bbb,此时y=mx+by=mx+by=mx+b相对于X轴有个夹角θθθ,所以我们可以将点顺时针旋转θθθ,得到变换后的点关于X轴对称,然后将计算出的点,按照之前的动作,逆旋转、逆平移,最终的得到答案。

根据而我们的分析,得矩阵变换公式为:
M′=([10001b001]∗([cosθ−sinθ0sinθcosθ0001]∗([1000−10001]∗([cosθsinθ0−sinθcosθ0001]∗([10001−b001]∗[xy1]))))) M'= \left( \begin{array}{ll} \left[ \begin{array}{ll} 1&0&0\\ 0&1&b\\ 0&0&1 \end{array} \right]* \left( \begin{array}{ll} \left[ \begin{array}{ll} cosθ&-sinθ&0\\ sinθ&cosθ&0\\ 0&0&1 \end{array} \right]* \left( \begin{array}{ll} \left[ \begin{array}{ll} 1&0&0\\ 0&-1&0\\ 0&0&1 \end{array} \right]* \left( \begin{array}{ll} \left[ \begin{array}{ll} cosθ&sinθ&0\\ -sinθ&cosθ&0\\ 0&0&1 \end{array} \right]* \left( \begin{array}{ll} \left[ \begin{array}{ll} 1&0&0\\ 0&1&-b\\ 0&0&1 \end{array} \right]* \left[ \begin{array}{ll} x\\ y\\ 1 \end{array} \right] \end{array} \right) \end{array} \right) \end{array} \right) \end{array} \right) \end{array} \right) M= 1000100b1 cosθsinθ0sinθcosθ0001 100010001 cosθsinθ0sinθcosθ0001 1000100b1 xy1

按照括号依次计算

M0′=[xy−b1]M1′=[xcosθ+(y−b)sinθ−xsinθ+(y−b)cosθ1]M2′=[xcosθ+(y−b)sinθxsinθ−(y−b)cosθ1]M'_{0}=\left[ \begin{array}{ll} x\\ y-b\\ 1 \end{array} \right] M'_{1}=\left[ \begin{array}{ll} xcosθ+(y-b)sinθ\\ -xsinθ+(y-b)cosθ\\ 1 \end{array} \right]M'_{2}=\left[ \begin{array}{ll} xcosθ+(y-b)sinθ\\ xsinθ-(y-b)cosθ\\ 1 \end{array} \right]M0= xyb1 M1= xcosθ+(yb)sinθxsinθ+(yb)cosθ1 M2= xcosθ+(yb)sinθxsinθ(yb)cosθ1
M3′=[x(1−2sin2θ)+2(y−b)sinθcosθ2xsinθcosθ+(y−b)(1−2cos2θ)1]M4′=[x(1−2sin2θ)+2(y−b)sinθcosθ2xsinθcosθ+(y−b)(1−2cos2θ)+b1]M'_{3}=\left[ \begin{array}{ll} x(1-2sin^2θ)+2(y-b)sinθcosθ\\ 2xsinθcosθ+(y-b)(1-2cos^2θ)\\ 1 \end{array} \right]M'_{4}=\left[ \begin{array}{ll} x(1-2sin^2θ)+2(y-b)sinθcosθ\\ 2xsinθcosθ+(y-b)(1-2cos^2θ)+b\\ 1 \end{array} \right]M3= x(12sin2θ)+2(yb)sinθcosθ2xsinθcosθ+(yb)(12cos2θ)1 M4= x(12sin2θ)+2(yb)sinθcosθ2xsinθcosθ+(yb)(12cos2θ)+b1

最终得到得坐标为(x(1−2sin2θ)+2(y−b)sinθcosθ,2xsinθcosθ+2(y−b)(1−2cos2θ)+b)(x(1-2sin^2θ)+2(y-b)sinθcosθ,2xsinθcosθ+2(y-b)(1-2cos^2θ)+b)(x(12sin2θ)+2(yb)sinθcosθ,2xsinθcosθ+2(yb)(12cos2θ)+b)

根据y=mx+by=mx+by=mx+bsinθcosθ=m\frac{sinθ}{cosθ}=mcosθsinθ=m并且sin2θ+cos2θ=1sin^2θ+cos^2θ=1sin2θ+cos2θ=1,得出sin2θ=m2m2+1,cos2θ=1m2+1,sinθcosθ=mm2+1sin^2θ=\frac{m^2}{m^2+1},cos^2θ=\frac{1}{m^2+1},sinθcosθ=\frac{m}{m^2+1}sin2θ=m2+1m2,cos2θ=m2+11sinθcosθ=m2+1m,带入结果得
坐标为(x1−m2m2+1+2(y−b)mm2+1,2xmm2+1+(y−b)m2−1m2+1+b)(x\frac{1-m^2}{m^2+1}+2(y-b)\frac{m}{m^2+1},2x\frac{m}{m^2+1}+(y-b)\frac{m^2-1}{m^2+1}+b)(xm2+11m2+2(yb)m2+1m,2xm2+1m+(yb)m2+1m21+b)

得齐次反射矩阵

[1−m2m2+12mm2+1−2mbm2+12mm2+1m2−1m2+12bm2+1001] \left[ \begin{array}{ll} \frac{1-m^2}{m^2+1}&\frac{2m}{m^2+1}&-\frac{2mb}{m^2+1}\\ \frac{2m}{m^2+1}&\frac{m^2-1}{m^2+1}&\frac{2b}{m^2+1}\\ 0&0&1 \end{array} \right] m2+11m2m2+12m0m2+12mm2+1m210m2+12mbm2+12b1

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐