flash on 2010-2-28

by cpu_t
理解不足
途中。
♥2 | Line 112 | Modified 2010-02-28 17:09:49 | MIT License
play

ActionScript3 source code

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

// 理解不足
// 途中。
// 
package {
	import flash.display.Graphics;
    import flash.display.Sprite;
    public class FlashTest extends Sprite
	{
		private var data:Vector.<Number>;
		private var graph:Sprite;
        public function FlashTest()
		{
			data = new Vector.<Number>();
			for (var i:int = 0; i < 256; i++)
			{
				data[i] = Math.sin(2 * Math.PI * i / 256)*.7;
				data[i] += Math.sin(2 * Math.PI * (i+16) / 256 * 4) * .3;
				if (i > 128)
				{
					data[i] *= .7;
					data[i] += Math.sin(2 * Math.PI * i / 256 * 16) * .3;
				}
				
			}
            
			setViewArea();
			
			reset();
        }
		
		private function reset():void
		{
			var g:Graphics = graph.graphics;
			g.clear();
			
			// data output
			g.lineStyle(1, 0);
			g.moveTo(0, 50 - data[i] * 50);
			for (var i:int = 0; i < data.length; i++)
			{
				g.lineTo(i, 50 - data[i] * 50);
			}
			g.endFill();
			
			var out:Vector.<Number> = f(data);
			
			g.lineStyle(1, 0);
			g.moveTo(0, 200 - out[0] * 50);
			for (i = 0; i < out.length; i++)
			{
				g.lineTo(i, 200 - out[i] * 50);
			}
			g.endFill();
			
			out = ref(out);
			
			g.lineStyle(1, 0);
			g.moveTo(0, 350 - out[0] * 50);
			for (i = 0; i < out.length; i++)
			{
				g.lineTo(i, 350 - out[i] * 50);
			}
			g.endFill();
		}
		
		private function ref(data:Vector.<Number>):Vector.<Number>
		{
			var out:Vector.<Number> = new Vector.<Number>();
			
			for (var t:int = 0; t < data.length; t++)
			{
				out[t] = 0;
				for (var f:int = 0; f < data.length; f++)
				{
					out[t] += data[f] * Math.cos(f * Math.PI * t / data.length);
				}
			}
			
			return out;
		}
		
		private function f(data:Vector.<Number>):Vector.<Number>
		{
			var out:Vector.<Number> = new Vector.<Number>();
			
			for (var f:int = 0; f < data.length; f++)
			{
				out[f] = 0;
				for (var t:int = 0; t < data.length; t++)
				{
					out[f] += data[t] * Math.cos(f * Math.PI * t / data.length);
				}
				out[f] /= 256 / 2;
			}
			
			return out;
		}
		
		private function setViewArea():void
		{
			var sp:Sprite = new Sprite();
			sp.x = 50;
			addChild(sp);
			sp.addChild(graph = new Sprite());
			
			var g:Graphics = sp.graphics;
			
			g.lineStyle();
			g.beginFill(0xE0E0E0);
			g.drawRect(0, 0, 256, 100);
			g.endFill();
			g.lineStyle(1, 0xFF0000);
			g.moveTo(0, 50);
			g.lineTo(256, 50);
			g.endFill();
			
			g.lineStyle();
			g.beginFill(0xE0E0E0);
			g.drawRect(0, 150, 256, 100);
			g.endFill();
			g.lineStyle(1, 0xFF0000);
			g.moveTo(0, 200);
			g.lineTo(256, 200);
			g.endFill();
			
			g.lineStyle();
			g.beginFill(0xE0E0E0);
			g.drawRect(0, 300, 256, 100);
			g.endFill();
			g.lineStyle(1, 0xFF0000);
			g.moveTo(0, 350);
			g.lineTo(256, 350);
			g.endFill();
		}
    }
}