package { import flash.display.Graphics; import flash.display.Shape; import flash.display.Sprite; import flash.geom.Matrix; import flash.geom.Point; //rotate and scale around a point other than the orgin //step 1. translate. move point pc at the origin. //step 2. rotate/scale. //step 3. move origin at the pc public class ConcatMatrix extends Sprite { public function ConcatMatrix() { var p1:Point=new Point(10, 50); var p2:Point=new Point(200,100); var pc:Point=new Point( (p1.x+p2.x)/2, (p1.y+p2.y)/2 ); drawRect(p1, p2, 0.1); var shape:Shape=drawRect(p1, p2, 1); var m:Matrix=new Matrix; m.identity(); m.translate(-pc.x, -pc.y); m.rotate(90*Math.PI/180); m.scale(1,0.5); m.translate(pc.x,pc.y); trace("final matrix: "+m);//(a=0, b=0.5, c=-1, d=0, tx=180, ty=22.5) shape.transform.matrix=m; } public function drawRect(p1:Point, p2:Point, alpha:Number):Shape { var shape:Shape=new Shape(); var g:Graphics=shape.graphics; g.lineStyle(1, 0x000000, alpha); g.drawRect(p1.x, p1.y, Math.abs(p2.x-p1.x), Math.abs(p2.y-p1.y)); addChild(shape); return shape; } } }