WPF中MatrixTransform的理解与应用

MatrixTransform 主要通过点的矩阵变换来实现图形的改变,我们常看到的一些效果,如对称效果,就可以通过矩阵变换来实现。
首先,我们先来了解一下 MatrixTransform 的所有参数的意义, MatrixTransform 的参数如下: {M11, M 12, M 21, M22, OffesetX,OffsetY}
其中: { M11, M12, M21, M22} 构成一个矩阵 A, 用于坐标的变换 ,{ OffesetX,OffsetY } 构成平移向量 O, 用于坐标的平移。
例如:我们在屏幕坐标系下有一个点 Pt(x1,y1), 假设 MatrixTransform ,M11 = 1,M12 = 0,M21=0,M22=-1, OffsetX = 1, OffsetY = 2
MatrixTransform 的工作原理如下:
第一步:我们能够得到一个 2*2 的矩阵 A {M11 M12}
{M21 M22}
第二步:得到平移向量 O {OffsetX,OffsetY}.
第三步,用点 Pt 乘以矩阵 A ,通过简单的矩阵运算,我们得到 Pt 变换后的坐标 Pt1={x1*M11+y1*M21,x1*M12+y1*M22}={x1,-y1},
第四步,用平移变换 Pt1+O, 得到最终的点 Pt2 ={x1+ OffsetX,-y1+ OffsetY}= {x1+1,-y1+2}
到此,我们已经了解了 MatrixTransform 的基本原理,下面来看一个对称效果的具体例子:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name ="myWnd">
<Path Stroke="Black" StrokeThickness="1">
<Path.Data>
<GeometryGroup>
<!— 画相同两条线 A B ,利用 B 做矩阵变换,使得 B A 对称 -->
<LineGeometry StartPoint="10,20" EndPoint="100,100"/>
<LineGeometry StartPoint="10,20" EndPoint="100,100">
<LineGeometry.Transform>
<MatrixTransform>
<MatrixTransform.Matrix >
<!-- OffsetY = StartPoint.Y + EndPoint.Y-->
<Matrix OffsetX="0" OffsetY="120" M11="1" M12="0" M21="0" M22="-1"/>
</MatrixTransform.Matrix>
</MatrixTransform>
</LineGeometry.Transform>
</LineGeometry>
</GeometryGroup>
</Path.Data>
</Path>
</Page>
2007-1-8 Paul.Peng

你可能感兴趣的:(工作,Microsoft,WPF)