2D Matrix coordinates to ISO coordinates
/**
* Copyright artjom ( http://wonderfl.net/user/artjom )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/3E1S
*/
// forked from artjom's flash on 2010-3-15
package {
import flash.display.Sprite;
import flash.geom.Point;
public class FlashTest extends Sprite {
private static const RECT_SIZE:int=20;
private static const CENTER:Point=new Point();
public function FlashTest() {
CENTER.x=RECT_SIZE*10/2;
CENTER.y=RECT_SIZE*10/2;
// write as3 code here..
for(var xx:int=0;xx<10;xx++) {
for(var yy:int=0;yy<10;yy++) {
var sp:Sprite=new Sprite();
sp.graphics.lineStyle(2,0x0);
sp.graphics.beginFill(0xFF0000);
sp.graphics.drawRect(-RECT_SIZE/2,-RECT_SIZE/2,RECT_SIZE,RECT_SIZE);
sp.graphics.endFill();
sp.alpha=0.6;
this.addChild(sp);
var pos:Point=this.getPosByMatrixCoord(xx,yy);
sp.x=pos.x;
sp.y=pos.y;
sp.rotation=45;
}
}
this.graphics.lineStyle(1,0x0);
this.graphics.moveTo(CENTER.x,0);
this.graphics.lineTo(CENTER.x, CENTER.y);
this.graphics.moveTo(0,CENTER.y);
this.graphics.lineTo(CENTER.x,CENTER.y);
}
private function getPosByMatrixCoord(xx:int,yy:int):Point
{
var mx:int=CENTER.x;
var my:int=CENTER.y;
var px:Number=xx*RECT_SIZE+RECT_SIZE/2;
var py:Number=yy*RECT_SIZE+RECT_SIZE/2;
var pt:Point=new Point();
var beta:Number=(Math.PI/180)*45;
var alpha:Number = Math.atan2((px-mx),(py-my));
var R:Number=Math.sqrt( Math.pow(py-my,2)+Math.pow(px-mx,2) );
var newAlpha:Number=alpha+beta;
var pxNeu:Number=R*Math.cos(newAlpha);
var pyNeu:Number=R*Math.sin(newAlpha);
pt.x=pxNeu+mx;
pt.y=pyNeu+my;
return pt;
}
}
}