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

Chaos Kaleidoscope

飽きたらクリックしてください
パラメータがランダムだらけなので、2度と同じ模様はできないと思います
フルスクリーンの方が見やすいかも。
Get Adobe Flash player
by aomoriringo 08 Mar 2014
    Embed
/**
 * Copyright aomoriringo ( http://wonderfl.net/user/aomoriringo )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/wbEd
 */

// 飽きたらクリックしてください
// パラメータがランダムだらけなので、2度と同じ模様はできないと思います
// フルスクリーンの方が見やすいかも。

package
{
    
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import frocessing.color.*;
   
    //[SWF(backgroundColor="0x000000")]
    
    public class wonderfl_002chaos extends Sprite
    {
        private var sp:Sprite;
        private var xx:Number;
        private var yy:Number;
        private var color:ColorHSV;
        
        // もっと広域でみたい場合は値を大きくしてください
        private const s:Number = 10;
        // もっと描画速度を遅くしたい場合は値を小さくしてください
        private const speed:int = 30;
        
        // パラメータ群
        private var a:Number;
        private var b:Number;
        private var d:Number;
        private var size:Number;
        
        public function wonderfl_002chaos()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            
            graphics.beginFill(0);
            graphics.drawRect(0,0,2000,2000);
            graphics.endFill();
            
            // -1.5から1.5の範囲でランダム
            a = 3*Math.random()-1.5;
            // -30から30の範囲でランダム
            b = 60*Math.random()-30;    
            d = 50*Math.random()+5;
            size = d/s;
            
            sp = new Sprite();
            sp.x = stage.stageWidth/2;
            sp.y = stage.stageHeight/2;
            addChild(sp);
            
            xx=4*Math.random()-2;
            yy=4*Math.random()-2;
                
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            stage.addEventListener(MouseEvent.CLICK, onMouseClick);
            stage.addEventListener(Event.ADDED_TO_STAGE, onAddStage);
            
        }
        private function onAddStage(e:Event):void{
            sp.x = stage.stageWidth/2;
            sp.y = stage.stageHeight/2;    
        }
        
        private function onMouseClick(e:Event):void{
            a = 3*Math.random()-1.5;
            b = 60*Math.random()-30;
            d = 50*Math.random()+5;
            size = d/s;
            xx=4*Math.random()-2;
            yy=4*Math.random()-2;
            
            sp.graphics.clear();
        }
        
        private function onEnterFrame(e:Event):void{
            var xold:Number;
            var xxx:Number, yyy:Number;
            
            for(var i:int=0 ; i<speed ; i++){
                // カオス漸化式
                xold = xx;
                xx = a*xx + yy + (d*xx)/(1+xx*xx)+b;
                yy = -xold;
                
                // 軸と大きさ調整
                xxx = (xx+a/2*yy)*size;
                yyy = yy*size;
                
                var radius:Number = Math.atan2(yyy,xxx);
                color = new ColorHSV(radius*180/Math.PI,1,1);
                
                sp.graphics.beginFill(color.value,0.5);
                sp.graphics.drawCircle(xxx,yyy,2);
                sp.graphics.endFill();
            }
        }
    }
}