In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

forked from: Black and White Circles

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

// forked from shapevent's Black and White Circles
package {

    import flash.display.*;
    import flash.geom.*;
    import flash.events.*;

    [SWF(backgroundColor=0xFFFFFF, width=500, height=500)]

       public class BWCirc extends MovieClip {
           
        private var hsw:Number;
        private var hsh:Number;
        private var pointNum:int;
        private var points3D:Vector.<Number>;
        private var points2D:Vector.<Number>;
        private var uvts:Vector.<Number>;
        private var sorted:Array;
        private var thickness:Vector.<Number>;
        private var radii:Vector.<Number>;
        private var colors:Vector.<uint>;
        private var pnt:Point;
        private var m:Matrix3D;
        private var v:Vector3D;
        private var p:PerspectiveProjection;
        private var proj:Matrix3D;
        private var dx:Number;
        private var dy:Number;


               public function BWCirc(){
                  // init
                     Wonderfl.disable_capture();
             
                      Wonderfl.capture_delay( 0 );
            
            hsw = stage.stageWidth / 2;
            hsh = stage.stageHeight / 2;
            pointNum = 150;
            points3D = new Vector.<Number>();
            points2D = new Vector.<Number>();
            uvts = new Vector.<Number>();
            sorted = [];
            thickness = new Vector.<Number>();
            radii = new Vector.<Number>();
            colors = new Vector.<uint>();
            
            pnt = new Point();
            m = new Matrix3D();
            v = new Vector3D();
            
            for (var i:int = 0; i<pointNum; i++){
                v.x = Math.random()*1000-500;
                m.identity();
                m.appendRotation(Math.random()*360, Vector3D.X_AXIS);
                m.appendRotation(Math.random()*360, Vector3D.Y_AXIS);
                m.appendRotation(Math.random()*360, Vector3D.Z_AXIS);
                v = m.transformVector(v);
                points3D.push(v.x, v.y, v.z);
                points2D.push(0,0);
                uvts.push(0,0,0);
                sorted.push({});
                thickness.push(Math.random() * Math.random() * 50 + 4);
                radii.push(Math.random() * 100 + 10);
                colors.push([0xFFFFFF, 0x000000][int(Math.random()*2)]);
            }
            points3D.fixed = true;
            points2D.fixed = true;
            uvts.fixed = true;
            thickness.fixed = true;
            radii.fixed = true;
            colors.fixed = true;x
            p = new PerspectiveProjection();
            proj = p.toMatrix3D();
            dx = 0, dy = 0;
            addEventListener(Event.ENTER_FRAME, onLoop);
            

               }
               // private methods

        private function onLoop(evt:Event):void {
            var i:int, j:int;
            dx += (mouseX - dx) / 4;
            dy += (mouseY - dy) / 4;
            m.identity();
            m.appendRotation(dx, Vector3D.Y_AXIS);
            m.appendRotation(dy, Vector3D.X_AXIS);
            m.appendTranslation(0, 0, 1000);
            m.append(proj);
            Utils3D.projectVectors(m, points3D, points2D, uvts);
            for (i = 0, j = 0; i<points2D.length; i+=2, j++){
                sorted[j].x = points2D[i] + hsw;
                sorted[j].y = points2D[i + 1] + hsh;
                sorted[j].z = uvts[j * 3 + 2];
                sorted[j].color = colors[j];
                sorted[j].radius = radii[j];
                sorted[j].thickness = thickness[j];
            }
            sorted.sortOn("z", Array.NUMERIC);
            graphics.clear();
            for(i = 0; i<sorted.length; i++){
                var element:Object = sorted[i];
                var zpos:Number = element.z * 18000;
                var c:uint = Math.min( element.color*element.z/0xFF, 0xFF );
                graphics.lineStyle(element.thickness, c<<16|c<<8|c);
                graphics.drawCircle(element.x, element.y, zpos + element.radius);
                graphics.endFill();
            }
        }
        

       }

}