import E3DPack.*; class E3DPack.E3DNode extends EObject { public var x:Number; public var y:Number; public var z:Number; public function E3DNode(inX:Number,inY:Number,inZ:Number) { x=inX; y=inY; z=inZ; } public function resetXYZ(inX:Number,inY:Number,inZ:Number) { x=inX; y=inY; z=inZ; } public function getPerspective(viewDistance:Number):Number { if(viewDistance==undefined||viewDistance==null) viewDistance=200; return viewDistance/(viewDistance+z); } public function transTo2DNode(viewDistance:Number):E2DNode { var tmp2DNode:E2DNode=new E2DNode(undefined,undefined); var pers:Number=getPerspective(viewDistance); var newX:Number=x*pers; var newY:Number=y*pers; tmp2DNode.resetXY(newX,newY); return tmp2DNode; } public function rotateAroundZ(fi:Number):Void { var tmpX:Number=x; var tmpY:Number=y; x=tmpX*Math.cos(fi)-tmpY*Math.sin(fi); y=tmpX*Math.sin(fi)+tmpY*Math.cos(fi); //trace(x-tmpX); //trace(y-tmpY); } public function rotateAroundX(fi:Number):Void { var tmpY:Number=y; var tmpZ:Number=z; y=tmpY*Math.cos(fi)-tmpZ*Math.sin(fi); z=tmpY*Math.sin(fi)+tmpZ*Math.cos(fi); //trace(x-tmpX); //trace(y-tmpY); } public function rotateAroundY(fi:Number):Void { var tmpX:Number=x; var tmpZ:Number=z; x=tmpX*Math.cos(fi)-tmpZ*Math.sin(fi); z=tmpX*Math.sin(fi)+tmpZ*Math.cos(fi); //trace(x-tmpX); //trace(y-tmpY); } public function debugShow():Void { trace("x: "+x+" y:"+y+" z:"+z); } }