package { public class animation_ch16_Point3D { public var fl:Number = 250; private var vpX:Number = 0; private var vpY:Number = 0; private var cX:Number = 0; private var cY:Number = 0; private var cZ:Number = 0; public var x:Number = 0; public var y:Number = 0; public var z:Number = 0; public function animation_ch16_Point3D(x:Number=0, y:Number=0, z:Number=0) { this.x = x; this.y = y; this.z = z; } public function setVanishingPoint(vpX:Number, vpY:Number):void { this.vpX = vpX; this.vpY = vpY; } public function setCenter(cX:Number, cY:Number, cZ:Number=0):void { this.cX = cX; this.cY = cY; this.cZ = cZ; } public function get screenX():Number { var scale:Number = fl / (fl + z + cZ); return vpX + (cX + x) * scale; } public function get screenY():Number { var scale:Number = fl / (fl + z + cZ); return vpY + (cY + y) * scale; } public function rotateX(angleX:Number):void { var cosX:Number = Math.cos(angleX); var sinX:Number = Math.sin(angleX); var y1:Number = y * cosX - z * sinX; var z1:Number = z * cosX + y * sinX; y = y1; z = z1; } public function rotateY(angleY:Number):void { var cosY:Number = Math.cos(angleY); var sinY:Number = Math.sin(angleY); var x1:Number = x * cosY - z * sinY; var z1:Number = z * cosY + x * sinY; x = x1; z = z1; } public function rotateZ(angleZ:Number):void { var cosZ:Number = Math.cos(angleZ); var sinZ:Number = Math.sin(angleZ); var x1:Number = x * cosZ - y * sinZ; var y1:Number = y * cosZ + x * sinZ; x = x1; y = y1; } } }