Silverlight 中MatrixTransform和其他Transform的数值转换
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Silverlight 中MatrixTransform和其他Transform的数值转换,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2117字,纯文字阅读大概需要4分钟。
内容图文

对各种transform的讲解已经很多了,但是有时MatrixTransform和其他transform变换效果之间需要转换时,变换量的转换又如何呢?下面的类就完成了Matrix和其他transform的转换方法。
public static ScaleTransform GetScaleByMatrix(Matrix matrix) { ScaleTransform scaleTransform = new ScaleTransform(); scaleTransform.ScaleX = matrix.M22; scaleTransform.ScaleY = matrix.M11; return scaleTransform; } publicstaticdouble GetRotateByMatrix(Matrix matrix) { double rotate = Math.Acos(matrix.M11); return rotate; } publicstatic TranslateTransform GetTranslateByMatrix(Matrix matrix) { TranslateTransform translate = new TranslateTransform(); translate.X = matrix.OffsetX; translate.Y = matrix.OffsetY; return translate; } publicstatic Matrix GetMatrixByScale(ScaleTransform scale) { returnnew Matrix(scale.ScaleY, 0, 0, scale.ScaleX, 0, 0);// x or y ??? } publicstatic Matrix GetMatrixByRotate(double rotate) { returnnew Matrix(Math.Cos(rotate), -Math.Sin(rotate), Math.Sin(rotate), Math.Cos(rotate), 0, 0); } publicstatic Matrix GetMatrixByTranslate(TranslateTransform translate) { returnnew Matrix(1, 0, 0, 1, translate.X, translate.Y); }
在二位平面的平移变换中, TranslateTransform中的 X 和 Y 值分别对用MatrixTransform 中的OffsetX 和OffsetY, 但是对于RotateTransform 进行平面旋转的时候,他的三个参数Angle,CenterX,CenterY怎么对应到MatrixTransform中呢?在上面的函数 GetMatrixByRotate(a)可以把角度映射到Matrix中,但如果这做了Angle的转换,图片的旋转是默认的左上角点,但是我们的需求并不是左上角,那怎么按照我们设定的centerX 和CenterY来旋转呢?经过研究,找到一个比较笨拙的办法,目前还未找到更好的算法。
private Matrix GetMatrixByPrimaryCenterRotate(Point primaryCenter, Matrix target) { MatrixTransform mt = new MatrixTransform() { Matrix = target }; Point newCenter = mt.Transform(primaryCenter); target.OffsetX = primaryCenter.X - newCenter.X; target.OffsetY = primaryCenter.Y - newCenter.Y; return target; }
通过GetMatrixByRotate(a)方法我们可以计算出旋转angle后的Matrix,然后通过translateTransform 把旋转对象移回到中心旋转的效果,上面的方法可以计算出指定旋转中心的旋转效果。
对于同时进行ScaleTransform和RotateTransform的效果怎么计算呢?
对这样的效果我们对得到的不同的Matrix进行相加即可得到混合变换合并之后的MatrixTransform.
See Also: http://msdn.microsoft.com/en-us/library/8667dchf(v=vs.110).aspx
原文:http://www.cnblogs.com/anthonyBlog/p/3578152.html
内容总结
以上是互联网集市为您收集整理的Silverlight 中MatrixTransform和其他Transform的数值转换全部内容,希望文章能够帮你解决Silverlight 中MatrixTransform和其他Transform的数值转换所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。