forked from: パラメトリック曲面のトーラスじゃない物

by akamario forked from パラメトリック曲面のトーラスじゃない物 (diff: 2)
♥0 | Line 56 | Modified 2011-01-06 18:46:54 | MIT License
play

ActionScript3 source code

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

// forked from kuma360's パラメトリック曲面のトーラスじゃない物
package 
{
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.utils.*;
    
    [SWF(backgroundColor=0)]
    public class Main extends Sprite 
    {
        public function Main():void 
        {
            const COLOR:uint = 0xFFA0D0 ;
            const SCALE:Number = 40 ;
            const STEP:Number = .1;
            
            var x:Number;
            var y:Number;
            var z:Number;
            var p:Number = 0 ;
            var p1:Number = 0 ;
            var p2:Number = 0 ;
            var v:Vector3D = new Vector3D ;
            var m:Matrix3D = new Matrix3D ;
            
            var s:Sprite = new Sprite ;
            var g:Graphics = s.graphics;
            addChild ( s ) ;
            
            addEventListener ( 
                Event.ENTER_FRAME ,
                function ( e:Event ) :void {
                    
                    var t:Number = getTimer() * .1 ;
                    
                    g.clear() ;
                    g.lineStyle ( 1 , COLOR , 1 ) ;
                    
                    var b:Number = 0 ;
                    for ( p1 = 0 ; p1 < 2 * Math.PI ; p1 += STEP ) {
                        
                        for ( p2 = 0 ; p2 < 2 * Math.PI ; p2 += STEP ) {
                            
                            x = Math.cos(p2) * ( 1.8 + Math.cos(p1) ) ;
                            y = Math.sin(p2) * ( 1.8 + Math.cos(p1) ) ;
                            z = Math.sin(p1) + p2 ;
                            x *= SCALE ;
                            y *= SCALE ;
                            z *= SCALE ;
                            
                            m.identity () ;
                            m.appendRotation ( t      , Vector3D.Y_AXIS ) ;
                            m.appendRotation ( t * .1 , Vector3D.X_AXIS ) ;
                            v = m.transformVector ( new Vector3D ( x , y , z ) ) ;
                            
                            if ( 0 == p2 ) {
                                g.moveTo ( v.x + 230 , v.y + 230 ) ;
                            } else {
                                g.lineTo ( v.x + 230 , v.y + 230 ) ;
                            }
                            
                        }
                        
                    }
                    
                }
                
            ) ;
            
        }
        
    }
    
}