| Refresh | Home EGTry.com

off axis skew (shear) in x or y direction


skew skew

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;
		}
		
		

		
	}
}