package { import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import flash.geom.Matrix; import flash.geom.Point; public class SkewMatrix extends Sprite { public function SkewMatrix() { var p1:Point=new Point(10,50); var w:Number=200; var h:Number=100; var origin:Shape=new Shape(); addChild(origin); origin.graphics.lineStyle(2, 0x000000,0.5); origin.graphics.drawRect(p1.x, p1.y, w,h); var xskew:Shape=new Shape(); addChild(xskew); var g:Graphics=xskew.graphics; g.lineStyle(1, 0xff0000,0.5); g.drawRect(p1.x, p1.y, w,h); var m:Matrix=skewX(p1.y+h, -30); xskew.transform.matrix=m; var yskew:Shape=new Shape(); addChild(yskew); g=yskew.graphics; g.lineStyle(1, 0x00ff00,0.5); g.drawRect(p1.x, p1.y, w,h); m=skewY(p1.x, 30); yskew.transform.matrix=m; } //create skew matrix along line y=yc (x direction) //x2=x1+c*(y1-yc) //y2=0*x1+y1+0 public static function skewX(yc:Number, angleDegree:Number):Matrix { var radian:Number=angleDegree*Math.PI/180; var c:Number=Math.tan(radian); var m:Matrix=new Matrix(1,0,c,1, -c*yc,0); return m; } public static function skewY(xc:Number, angleDegree:Number):Matrix { var radian:Number=angleDegree*Math.PI/180; var b:Number=Math.tan(radian); var m:Matrix=new Matrix(1,b,0,1, 0, -b*xc); return m; } } }