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)(上)
590 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页面的清洁和结构化。
246 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开发者的关键技能。
754 3
|
关系型数据库 MySQL 数据挖掘
MySQL窗口函数详解(概念+练习+实战)
MySQL窗口函数详解(概念+练习+实战)
3002 2
|
小程序 IDE API
社区每周丨小程序基础库更新至 2.8.21及小程序商品新增商品营销功能(9.11-9.15)
社区每周丨小程序基础库更新至 2.8.21及小程序商品新增商品营销功能(9.11-9.15)
301 11
|
数据可视化 C++ Python
案例实战 | Python 玩转 AB 测试中的分层抽样与假设检验!(附代码和数据集)(下)
在电商网站 AB 测试非常常见,是将统计学与程序代码结合的经典案例之一。尽管如此,里面还是有许多值得学习和注意的地方。 A/B 测试用于测试网页的修改效果(浏览量,注册率等),测试需进行一场实验,实验中控制组为网页旧版本,实验组为网页新版本,实验还需选出一个指标 来衡量每组用户的参与度,然后根据实验结果来判断哪个版本效果更好。 通过这些测试,我们可以观察什么样的改动能最大化指标,测试适用的改动类型十分广泛,上到增加元素的大改动,下到颜色小变动都可使用这些测试。
665 0
案例实战 | Python 玩转 AB 测试中的分层抽样与假设检验!(附代码和数据集)(下)
|
7天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
11006 87
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
7天前
|
人工智能 IDE API
2026年国内 Codex 安装教程和使用教程:GPT-5.4 完整指南
Codex已进化为AI编程智能体,不仅能补全代码,更能理解项目、自动重构、执行任务。本文详解国内安装、GPT-5.4接入、cc-switch中转配置及实战开发流程,助你从零掌握“描述需求→AI实现”的新一代工程范式。(239字)
4421 129

热门文章

最新文章