在计算机科学中, 向量, Vector, 通常这么表示:
[ x y ] \left[ \begin{array}{cc} x\\ y \end{array} \right] [xy]
向量有两个 “基”, i ‾ \overline{i} i, 即 1 , 0 → \overrightarrow{1, 0} 1,0, j ‾ \overline{j} j, 即 0 , 1 → \overrightarrow{0, 1} 0,1
向量可以看作这些基乘以一组数的结果, 即: v ‾ = i ‾ × a + j ‾ × b \overline{v} = \overline{i} \times a + \overline{j} \times b v=i×a+j×b, 例如 [ 1 , 3 ] [1, 3] [1,3], 就是:
i ‾ × 1 + j ‾ × 3 = [ 1 , 0 ] × 1 + [ 0 , 1 ] × 3 = [ 1 , 0 ] + [ 0 , 3 ] = [ 1 , 3 ] \overline{i} \times 1 + \overline{j} \times 3 = [1, 0] \times 1 + [0, 1] \times 3 = [1, 0] + [0, 3] = [1, 3] i×1+j×3=[1,0]×1+[0,1]×3=[1,0]+[0,3]=[1,3]
当改变向量的基时, 由于向量是一组数与基的乘法, 所以向量也会随之变化.
例如我们设定两个基为它们顺时针旋转90°后的结果, 即: i ‾ = [ 0 , − 1 ] , j ‾ = [ 1 , 0 ] \overline i = [0, -1], \overline j = [1, 0] i=[0,−1],j=[1,0], 那么 [1, 3] 就变成了:
i ‾ × 1 + j ‾ × 3 = [ 0 , − 1 ] × 1 + [ 1 , 0 ] × 3 = [ 0 , − 1 ] + [ 3 , 0 ] = [ 3 , − 1 ] \overline i \times 1 + \overline j \times 3 = [0, -1] \times 1 + [1, 0] \times 3 = [0, -1] + [3, 0] =[3, -1] i×1+j×3=[0,−1]×1+[1,0]×3=[0,−1]+[3,0]=[3,−1]
你会发现, 这个向量也随之改变了, 而且恰好是顺时针旋转90°
在计算机科学中, 向量如此表示:
[ x y ] \left[ \begin{array}{c} x\\y \end{array} \right] [xy]
如果是两个向量, 则是这样, 竖着的, 是一个向量:
[ x 1 , x 2 y 1 , y 2 ] \left[ \begin{array}{c} x_1, & x_2\\ y_1, & y_2 \end{array} \right] [x1,y1,x2y2]
而, 我们刚刚进行的乘法, 其实也是矩阵乘法, 即:
[ 0 , − 1 1 , 0 ] × [ 1 3 ] = [ 3 − 1 ] \left[ \begin{array}{c} 0, & -1\\ 1, & 0 \end{array} \right] \times \left[ \begin{array}{c} 1\\ 3 \end{array} \right]= \left[ \begin{array}{c} 3 \\ -1 \end{array} \right] [0,1,−10]×[13]=[3−1]
在 WPF 中, 一个矩阵(Matrix)有以下属性: M11, M12, M21, M22, OffsetX, OffsetY.
其中, M11, M12, M21, M22 表示缩放旋转矩阵:
[ M 11 , M 12 M 21 , M 22 ] \left[ \begin{array}{c} M11, & M12 \\ M21, & M22 \end{array} \right] [M11,M21,M12M22]
它们的默认值是:
[ 1 , 0 0 , 1 ] \left[ \begin{array}{c} 1, & 0 \\ 0, & 1 \end{array} \right] [1,0,01]
而进行矩阵变换, 也就是将源图形的每一个点, 与这个矩阵相乘, 最终得到另一些点, 构成一个新的图形.
而与默认的这个矩阵相乘, 形状不会有任何变化.
这个矩阵的 M11 和 M21 值, 可以理解为 i ‾ \overline i i, M12 和 M22 可以理解为 j ‾ \overline j j, 之前我们提到, 如果变化这两个基的值, 那么最终向量也会发生变化, 而当我们将刚刚旋转 90° 后的 i ‾ \overline i i 和 j ‾ \overline j j 拿出来直接代入, 也可以发现, 图形直接旋转了 90°.
矩阵的基本原理就是矩阵的乘法, 但即便你不理解矩阵的乘法, 去改变 Matrix 中的两个基值, 形状也将跟随基值发生改变.
而 OffsetX 和 OffsetY, 这两个指定了这两个图形的平移, OffsetX 水平偏移量, OffsetY 垂直偏移量.