flash on 2009-10-23

by uwi
z軸→dstの変換をx軸にかけたらどうなるか、を
dstを色々動かして試す
♥0 | Line 42 | Modified 2009-10-23 11:41:49 | MIT License
play

ActionScript3 source code

/**
 * Copyright uwi ( http://wonderfl.net/user/uwi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/hEd0
 */

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.getTimer;
    import org.papervision3d.objects.*;
    import org.papervision3d.core.math.*;
    
    // z軸→dstの変換をx軸にかけたらどうなるか、を
    // dstを色々動かして試す
    public class Test extends Sprite {
        private var _tf : TextField;
  
        public function Test() {
            _tf = new TextField();
            _tf.width = 465;
            _tf.height = 465;
            addChild(_tf);
            
            var s : int = getTimer();
            
            var src : DisplayObject3D = new DisplayObject3D();
            var dst : DisplayObject3D = new DisplayObject3D();
            src.position = new Number3D(0, 0, 0);
            for(var i : Number = 0;i <= 6.28;i += 0.2){
                dst.position = new Number3D(0, -Math.sin(i), Math.cos(i));
//                dst.position = new Number3D(Math.sin(i), 0, Math.cos(i));
                
                // るっくあと
                src.lookAt(dst);
                var v : Number3D = new Number3D(1, 0, 0);
                Matrix3D.multiplyVector3x3(src.transform, v);
                
                // くぉーたにおん
                var Z : Number3D = new Number3D(0, 0, 1);
//                var X : Number3D = new Number3D(1, 0, 0);
                var qX : Quaternion = new Quaternion(1, 0, 0, 0);
                var n : Number3D = Number3D.cross(Z, dst.position);
                n.normalize();
                var rot : Number = Math.acos(Number3D.dot(Z, dst.position));
                var q : Quaternion = Quaternion.createFromAxisAngle(n.x, n.y, n.z, rot);
                var r : Quaternion = Quaternion.conjugate(q);
                
                var ans : Quaternion = Quaternion.multiply(r, qX);
                ans = Quaternion.multiply(ans, q);
                
                tr(dst.position, "\t", v, "\t", ans.x, ans.y, ans.z);
            }
            
            var g : int = getTimer();
            tr((g - s) + " ms");
        }

        private function tr(...o : Array) : void
        {
            _tf.appendText(o + "\n");
        }
    }
}