前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF中的MatrixTransform

WPF中的MatrixTransform

作者头像
菩提树下的杨过
发布2018-01-22 16:00:23
1.3K0
发布2018-01-22 16:00:23
举报

WPF中的MatrixTransform            周银辉 虽然在WPF中可以使用TranslateTransform、RotateTransform、ScaleTransform等进行几何变换,但我们也可以使用更底层的MatrixTransform(矩阵变换)来进行更复杂的复合变换。 首先我们矩阵如何影响几何变换的: 1,缩放操作 观察下面的矩阵乘法

matrix1.png
matrix1.png

如果我们用[2   5]代表点(2,5),我们发现其乘以一个矩阵后变成了[4,5],与之对应的点是(4,5),这相当与其X坐标变成了原来的两倍。 同理:

matrix2.png
matrix2.png

经过矩阵乘法后点(2,5)的Y坐标变成了原来的两倍(2,10)。 我们可以总结出这样的结论:

matrix3.png
matrix3.png

可以将矩阵的第二和第三个元素设置为0并用矩阵中M11和M22来进行缩放操作,其中M11是对X坐标进行缩放,M22是对Y坐标进行缩放 2,旋转操作 观察下面的矩阵乘法:

matrix4.png
matrix4.png

向量(-5,2)相当于是向量(2,5)按照顺时针方向旋转了90度。 但这里并没有总结出向缩放一样的简单结论,但我们可以知道,我们可以使用如下的2X2矩阵:

matrix5.png
matrix5.png

来对点进行线性变换(旋转,缩放。注意:平移变换不是线性变换),即将点对应的矩阵乘以该线性变换矩阵便可。 3,平移操作 在矩阵加法中:

matrix6.png
matrix6.png

我们可以发现点(3,5)实际是在点(2,5)的基础上想X方向平移1一个单位。 同理,

matrix7.png
matrix7.png

点(2,6)实际是在点(2,5)的基础上想Y方向平移1一个单位。 我们可以得到如下结论: 我们可以使用点对应的矩阵加上如下的矩阵

matrix8.png
matrix8.png

来实现平移操作,其中offsetX实现了X轴方向上的平移,offsetY实现了Y方向上的平移。 4,几种操作的融合 如果仅仅是简单的单一操作(仅旋转或仅平移等)我们就没有必要在这里进行讨论了。现在我们需要将几种几何变换揉合在一起,比如平移对象的同时旋转对象等,我们可以将矩阵乘法与加法揉合在一起进行混合运算。比如向量(2,3)先进行缩放和旋转后再分别在X与Y轴方向上平移了5个与6个单位

matrix9.png
matrix9.png

上面的这种变换称为仿射变换(affine transformation) 注意:这种几何变换在操作的先后顺序上是需要注意的,不同的操作次序可以带来不同的结果,比如上面的例子,如果我们先进行平移操作后进行缩放与旋转将得到如下结果:

matrix10.png
matrix10.png

其实我们更希望将仿射变换中的几个矩阵存储到一个矩阵中来,一种较好的方式是将变换用到的2X2矩阵变成3X3矩阵,这也就是为什么我们WPF中的变换矩阵是3X3的。 在如下矩阵中:

matrix11.png
matrix11.png

其中M11,M12,M21,M22就来自于线性变换矩阵,用于指示旋转缩放等线性变换;X, Y来自与平移矩阵,用于指示平移变换。 由于最右边一列始终是001,所以WPF中的MatrixTransform类的构造函数仅仅需要指定6个参数。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2007-07-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档