前期知识

矩阵的乘法:左侧矩阵的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​=​100​010​dxdy1​​。

计算M1∗MM_{1}*MM1​∗M为M′=[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′=​100​010​dxdy1​​∗​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θ0​sinθcosθ0​001​​。

计算M2∗MM_{2}*MM2​∗M为M′=[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θ0​sinθcosθ0​001​​∗​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​=​100​0−10​001​​

进行矩阵运算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′=​100​0−10​001​​∗​xy1​​=​x−y1​​

可得关于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′=​​100​010​0b1​​∗​​cosθsinθ0​−sinθcosθ0​001​​∗​​100​0−10​001​​∗​​cosθ−sinθ0​sinθcosθ0​001​​∗​​100​010​0−b1​​∗​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′​=​xy−b1​​M1′​=​xcosθ+(y−b)sinθ−xsinθ+(y−b)cosθ1​​M2′​=​xcosθ+(y−b)sinθxsinθ−(y−b)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(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​​

最终得到得坐标为(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(1−2sin2θ)+2(y−b)sinθcosθ,2xsinθcosθ+2(y−b)(1−2cos2θ)+b)

根据y=mx+by=mx+by=mx+b得sinθ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+11​,sinθ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+11−m2​+2(y−b)m2+1m​,2xm2+1m​+(y−b)m2+1m2−1​+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+11−m2​m2+12m​0​m2+12m​m2+1m2−1​0​−m2+12mb​m2+12b​1​​

Logo

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

更多推荐