SkewMatrix.as
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;
}
}
}