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

フィボナッチ数列

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

// forked from ffffine's flash on 2010-8-23
package {
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Shape;
        import flash.display.Sprite;
	import flash.events.Event;
	import flash.geom.ColorTransform;
	import flash.utils.getTimer;
        import flash.events.MouseEvent;

    [SWF(width = "465", height = "465", color = "0x000000" , frameRate = "30")];
	
    public class FlashTest extends Sprite {
		
		private var _num:Number = 100;
		private var _rad:Number = 100;
		private var _balls:Array = [];
		private var _addRot:Number = 0;
                private var _vector:int = 1;
		private var _canvas:Bitmap;
		private var _bmpData:BitmapData;
		private var _colorTransform:ColorTransform;
			
        public function FlashTest() {
			_bmpData = new BitmapData(465, 465, false,0x000000);
			_canvas = new Bitmap(_bmpData,"auto",true);
			_colorTransform = new ColorTransform(0.99,0.959,0.99);
			addChild(_canvas);
			
			for (var i:int = 0; i < _num; i++) 
			{
				var sh:Shape = new Shape();
				var theta:Number = (i * Math.PI * 2.0 * ((1 + Math.sqrt(5)) / 2)) * Math.PI / 180;
				var h:Number = i * 360 / _num * 2;
				var s:Number = 30;
				var v:Number = 99;	
				sh.graphics.beginFill(HSVtoRGB(h,s,v));
				sh.graphics.drawCircle(0, 0, 10);
				sh.graphics.endFill();
                                sh.x = (_rad + i*2) * Math.sin(theta) + stage.stageWidth / 2;
			        sh.y = (_rad + i*2) * Math.cos(theta) + stage.stageHeight / 2;
                                sh.blendMode = "add";
 				addChild(sh);
				_balls.push(sh);
			}
			stage.addEventListener(Event.ENTER_FRAME, xEnterFrame);
                        stage.addEventListener(MouseEvent.CLICK, stageClick);
        }
		
		private function xEnterFrame(e:Event):void 
		{
			for (var i:int = 0; i < _num; i++) 
			{
    			        var theta:Number = (i * Math.PI * 2.0 * ((1 + Math.sqrt(5)) / 2) + _addRot) * Math.PI / 180 * _vector ;
                                var myRad:Number = _rad * Math.cos(getTimer() / 2000) + 110 ; 
				_balls[i].scaleX = _balls[i].scaleY = 1 * Math.sin(getTimer() / 2000) ;
			        _balls[i].x = (myRad + i*2) * Math.sin(theta) + stage.stageWidth / 2;
			        _balls[i].y = (myRad + i*2) * Math.cos(theta) + stage.stageHeight / 2;
			}
			_bmpData.draw(stage);
			_bmpData.colorTransform(_bmpData.rect, _colorTransform);
			_addRot++;			
		}

                private function stageClick(e:MouseEvent):void{
                
                        _vector = _vector*-1;
                    
                }
		
		private function HSVtoRGB(h:Number, s:Number, v:Number):uint
		{
			var tmpR:uint = 0;
			var tmpG:uint = 0;
			var tmpB:uint = 0;
            
			h = (h % 360.0 + 360.0) % 360.0;
        
			s = Math.min( Math.max(s, 0.0) , 1.0);
			v = Math.min( Math.max(v, 0.0) , 1.0);
        
			if(s == 0.0)
			{
				tmpR = v;
				tmpG = v;
				tmpB = v;
			}
			else
			{
				var hi:uint = (h / 60) % 6;
				var f:Number = h / 60 - hi;
				var p:Number = v * (1.0 - s);
				var q:Number = v * (1.0 - f * s);
				var t:Number = v * (1.0 - (1.0 - f) * s);
            
				switch(hi)
				{
					case 0:
					{
						tmpR = v * 255;
						tmpG = t * 255;
						tmpB = p * 255;
						break;
					}
					case 1:
					{
						tmpR = q * 255;
						tmpG = v * 255;
						tmpB = p * 255;
						break;
					}
					case 2:
					{
						tmpR = p * 255;
						tmpG = v * 255;
						tmpB = t * 255;
						break;
					}
					case 3:
					{
						tmpR = p * 255;
						tmpG = q * 255;
						tmpB = v * 255;
						break;
					}
					case 4:
					{
						tmpR = t * 255;
						tmpG = p * 255;
						tmpB = v * 255;
						break;
					}
					case 5:
					{
						tmpR = v * 255;
						tmpG = p * 255;
						tmpB = q * 255;
						break;
					}
					default:
					{
						tmpR = 0;
						tmpG = 0;
						tmpB = 0;
						break;
					}	
				}        
			}
        return tmpR << 16 | tmpG << 8 | tmpB;
		}
    }
}