Flash/Flex学习笔记(56):矩阵变换

简介: 先回顾一下Silvelright中的矩阵变换[转]WPF中的MatrixTransform,简单点讲:矩阵变换能改变对象的x,y坐标,x或y方向上的缩放,以及对象在x,y轴上的旋转(扭曲变形) 上面这个是WPF/Silverlight中的3*3变换矩阵,其中X,Y用于改变对象的坐标;M11,M22用于对象在x,y轴上的缩放;而M12,M21用于y轴,x轴上的扭曲。

先回顾一下Silvelright中的矩阵变换[转]WPF中的MatrixTransform,简单点讲:矩阵变换能改变对象的x,y坐标,x或y方向上的缩放,以及对象在x,y轴上的旋转(扭曲变形)

上面这个是WPF/Silverlight中的3*3变换矩阵,其中X,Y用于改变对象的坐标;M11,M22用于对象在x,y轴上的缩放;而M12,M21用于y轴,x轴上的扭曲。

 

As3.0中的Matix类跟这个类似:

只不过,这个矩阵旋转了一下(行列互换了),tx,ty仍然是用于坐标的平移;a,d用于x,y方向的缩放(前提是b,c设置为0);b,c用于y,x轴上的扭曲。当然这些元素可以组合起来使用。(更详细的用法,请参阅AS3.0 Matrix )

 

tx,ty的平移示例:

import fl.events.SliderEvent;

var box:Box = new Box();
var startX:Number = stage.stageWidth/2 ;
var startY:Number = stage.stageHeight/2 ;
box.x = startX;
box.y = startY;
addChild(box);

silder_tx.addEventListener(SliderEvent.CHANGE,slider_tx_ChangeHandler);
silder_ty.addEventListener(SliderEvent.CHANGE,slider_ty_ChangeHandler);

function slider_tx_ChangeHandler(e:SliderEvent):void{	
	txt_tx.text = e.value.toString();	
	var tempMatrix:Matrix = box.transform.matrix;
    tempMatrix.tx = startX + e.value;   
    box.transform.matrix = tempMatrix;

}

function slider_ty_ChangeHandler(e:SliderEvent):void{	
	txt_ty.text = e.value.toString();
	var tempMatrix:Matrix = box.transform.matrix;
    tempMatrix.ty = startY + e.value;   
    box.transform.matrix = tempMatrix;
}

a,d缩放示例:

import fl.events.SliderEvent;

var box:Box = new Box();
var startX:Number = stage.stageWidth/2;
var startY:Number = stage.stageHeight/2;
box.x = startX;
box.y = startY;
addChild(box);

silder_scaleX.addEventListener(SliderEvent.CHANGE,silder_scaleX_ChangeHandler);
silder_scaleY.addEventListener(SliderEvent.CHANGE,silder_scaleY_ChangeHandler);

function silder_scaleX_ChangeHandler(e:SliderEvent):void{	
	txt_tx.text = e.value.toString();	
	var tempMatrix:Matrix = box.transform.matrix;
    tempMatrix.a = e.value;//x轴缩放
    box.transform.matrix = tempMatrix;

}

function silder_scaleY_ChangeHandler(e:SliderEvent):void{	
	txt_ty.text = e.value.toString();
	var tempMatrix:Matrix = box.transform.matrix;
    tempMatrix.d = e.value; //y轴缩放  
    box.transform.matrix = tempMatrix;
}

a,b,c,d 旋转示例:

import fl.events.SliderEvent;

var box:Box = new Box(50,100,0x00ff00);
var startX:Number = stage.stageWidth/2 ;
var startY:Number = stage.stageHeight/2 ;
box.x = startX;
box.y = startY;
addChild(box);

var box2:Box = new Box(100,75,0xff6600);

box2.x = startX;
box2.y = startY;
addChild(box2);

silder_Angle.addEventListener(SliderEvent.CHANGE,silder_Angle_ChangeHandler);

function silder_Angle_ChangeHandler(e:SliderEvent):void{	
	txt_tx.text = e.value.toString();	
	
	var angle = e.value * Math.PI /180;
	//trace(angle);
	
	var sin = Math.sin(angle);
	var cos = Math.cos(angle);	
	
	var tempMatrix:Matrix = box.transform.matrix;
    tempMatrix.a = cos;
	tempMatrix.b = sin;
	tempMatrix.c = -sin;
	tempMatrix.d = cos;
	box.transform.matrix = tempMatrix;	
	box2.transform.matrix = tempMatrix;		
    
}

b,c 倾斜示例:

import fl.events.SliderEvent;

var box:Box = new Box(50,50);
var startX:Number = stage.stageWidth/2 ;
var startY:Number = stage.stageHeight/2 ;
box.x = startX;
box.y = startY;
addChild(box);

silder_skewX.addEventListener(SliderEvent.CHANGE,silder_skewX_ChangeHandler);

function silder_skewX_ChangeHandler(e:SliderEvent):void{	
	txt_tx.text = e.value.toString();		
	var angle = e.value * Math.PI /180;	
	var tan = Math.tan(angle);	
	var tempMatrix:Matrix = box.transform.matrix;    	
	tempMatrix.c = tan;	
	box.transform.matrix = tempMatrix;   
}


silder_skewY.addEventListener(SliderEvent.CHANGE,silder_skewY_ChangeHandler);

function silder_skewY_ChangeHandler(e:SliderEvent):void{	
	txt_ty.text = e.value.toString();		
	var angle = e.value * Math.PI /180;	
	var tan = Math.tan(angle);	
	var tempMatrix:Matrix = box.transform.matrix;    	
	tempMatrix.b = tan;	
	box.transform.matrix = tempMatrix;   
}

 

目录
相关文章
|
Linux 虚拟化
虚拟机:安装配置(VMware + centos 8 stream)(上)
虚拟机:安装配置(VMware + centos 8 stream)(上)
376 0
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 1
JSP的JSTL是用于简化页面逻辑的标签库,涵盖核心、格式化、SQL、XML和函数五大类标签。要安装,下载Apache的JSTL包,将jar文件放入WEB-INF/lib,tld文件复制到WEB-INF,并在web.xml中配置相应的taglib信息。JSTL促进了JSP页面的清洁和结构化。
135 5
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
588 3
|
关系型数据库 MySQL 数据挖掘
MySQL窗口函数详解(概念+练习+实战)
MySQL窗口函数详解(概念+练习+实战)
2582 1
|
小程序 IDE API
社区每周丨小程序基础库更新至 2.8.21及小程序商品新增商品营销功能(9.11-9.15)
社区每周丨小程序基础库更新至 2.8.21及小程序商品新增商品营销功能(9.11-9.15)
260 11
|
数据可视化 C++ Python
案例实战 | Python 玩转 AB 测试中的分层抽样与假设检验!(附代码和数据集)(下)
在电商网站 AB 测试非常常见,是将统计学与程序代码结合的经典案例之一。尽管如此,里面还是有许多值得学习和注意的地方。 A/B 测试用于测试网页的修改效果(浏览量,注册率等),测试需进行一场实验,实验中控制组为网页旧版本,实验组为网页新版本,实验还需选出一个指标 来衡量每组用户的参与度,然后根据实验结果来判断哪个版本效果更好。 通过这些测试,我们可以观察什么样的改动能最大化指标,测试适用的改动类型十分广泛,上到增加元素的大改动,下到颜色小变动都可使用这些测试。
513 0
案例实战 | Python 玩转 AB 测试中的分层抽样与假设检验!(附代码和数据集)(下)
|
6天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
17天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1327 7