Prime Numbers Experiment 1

by WLAD
♥0 | Line 166 | Modified 2014-06-21 20:43:25 | MIT License
play

ActionScript3 source code

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

package
{
	import com.bit101.components.PushButton;
	import flash.display.Sprite;
	import flash.display.StageDisplayState;
	import flash.display.StageScaleMode;
	
	public class FlashTest extends Sprite
	{
		public function FlashTest()
		{
			// write as3 code here..
			
			addChild(new PushButton(this, 0, 0, "FULL SCREEN", function(e:*):void
				{
					if (stage.displayState == StageDisplayState.NORMAL)
					{
						stage.displayState = StageDisplayState.FULL_SCREEN;
						draw( 10 );
					}
					else
					{
						stage.displayState = StageDisplayState.NORMAL;
						draw( 7 );
					}
				
				})).width = 100;
			
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = "topLeft";
			
			cont = new Sprite();
			addChild( cont );
			
			draw();
		}
		
		public function draw( size:int = 7 ):void
		{
			while ( cont.numChildren > 0 ) cont.removeChildAt(0);
			graphics.clear();
			
			var sx:Number = stage.stageWidth / 2;
			var sy:Number = stage.stageHeight / 2;
			
			var dist:int = 20;
			
			var v:Vec; // = new Vec(0, -dist);
			
			var n:int = 1;
			
			graphics.lineStyle(3, 0x666666);
			graphics.moveTo(sx, sy);
			add(0, sx, sy);
			
			var iMax:int = 3;
			var iDelta:Number;
			
			for (var j:int = 0; j < size; j++)
			{
				v = new Vec(0, -10 - dist * Math.pow(j, 1.35));
				
				iDelta = 360 / iMax;
				
				for (var i:int = 0; i < iMax; i++)
				{
					add(n, sx + v.x, sy + v.y);
					graphics.lineTo(sx + v.x, sy + v.y);
					
					n++;
					
					if (i != iMax - 1)
						v.degrees += iDelta;
				}
				
				iMax *= 2;
			}
		}
		
		//Mehtod taken from: http://www.actionscript.org/forums/showthread.php3?t=230387
		private function primeNumber(tall:int):Boolean
		{
			var count:uint = 2;
			var i:uint = 0; //var used to define whether a number is prime or not
			while (count <= Math.sqrt(tall))
			{
				if (tall % count == 0)
				{
					i++; //if it's a prime number, i will never be more than 0. If it's not, i will be at least 1.
				}
				else
				{
					i = i
				}
				count++;
			}
			
			return i == 0;
		}
		
		private var cont:Sprite;
		
		public function add(digit:int, x:Number, y:Number):void
		{
			var d:D = new D(digit, x, y, primeNumber(digit));
			cont.addChild(d);
		}
	
	}
}
import flash.text.TextFormat;
import flash.display.Sprite;
import flash.text.TextField;
import frocessing.color.ColorHSV;

class D extends Sprite
{
	private var n:N;
	
	public function D(digit:int, x:Number, y:Number, special:Boolean = false)
	{
		n = new N(digit);
		addChild(n);
		
		this.x = x;
		this.y = y;
		
		_size = digit.toString().length;
		
		var c:ColorHSV = new ColorHSV(special ? 0 : 120, 0.5);
		
		graphics.beginFill(c.value);
		
		// 4 * _size + 6
		graphics.drawCircle(0, 0, 3 * _size + 4);
		graphics.endFill();
	
	}
	
	private var _size:int = 1;
	
	public function get size():int
	{
		return _size;
	}
}

class N extends TextField
{
	public function N(digit:int)
	{
		var tf:TextFormat = new TextFormat("_sans", 12, 0x000000);
		this.setTextFormat(tf);
		this.defaultTextFormat = tf;
		this.autoSize = 'left';
		this.text = digit.toString();
		this.selectable = this.wordWrap = this.multiline = this.mouseEnabled = false;
		
		this.x = -this.width / 2;
		this.y = -this.height / 2;
	}

}

class Vec
{
	public var x:Number, y:Number;
	
	public function Vec(x:Number = 0, y:Number = 0)
	{
		this.x = x;
		this.y = y;
	}
	
	public function get lenght():Number
	{
		return Math.sqrt(x * x + y * y);
	}
	
	public function set lenght(value:Number):void
	{
		if (lenght == 0)
			scale(0);
		else
			scale(value / lenght);
	}
	
	public function set degrees(value:Number):void
	{
		radians = value * Math.PI / 180;
	}
	
	public function get degrees():Number
	{
		return radians * 180 / Math.PI;
	}
	
	public function set radians(value:Number):void
	{
		var f:Number = lenght;
		x = Math.cos(value) * f;
		y = Math.sin(value) * f;
	}
	
	public function scale(n:Number):void
	{
		x *= n;
		y *= n;
	}
	
	public function get radians():Number
	{
		return Math.atan2(y, x);
	}

}

Forked