import com.lo9ic.Quaternion; class com.lo9ic.Node { private var $x, $y, $z, $xp, $yp, $zp:Number; private var $q1, $q2, $q3:Quaternion; function Node(a:Number, b:Number, c:Number) { $x = a ? a : 0; $xp = $x; $y = b ? b : 0; $yp = $y; $z = c ? c : 0; $zp = $z; } public function get x():Number { return $xp; } public function get y():Number { return $yp; } public function get z():Number { return $zp; } public function set x(a:Number):Void { $x = a; } public function set y(a:Number) :Void { $y = a; } public function set z(a:Number):Void{ $z = a; } public function rotate(q:Quaternion):Void { $q1 = q.copy(); $q1.invert(); $q2 = new Quaternion(); $q2.fromPoint($x, $y, $z); $q3 = q.copy(); $q2.concat($q1); $q3.concat($q2); $xp = $q3.x; $yp = $q3.y; $zp = $q3.z; } public function project(a:Number):Void { $xp = a*$xp/($zp-a); $yp = a*$yp/($zp-a); $zp = $zp; } }