Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.MovieClip;
- import flash.display.Sprite;
- import flash.events.Event;
- import flash.events.MouseEvent;
- import flash.geom.Point;
- import flash.Lib;
- import flash.text.TextField;
- import flash.text.TextFieldAutoSize;
- import flash.text.TextFieldType;
- import flash.text.TextFormat;
- import hscript.Interp;
- import hscript.Parser;
- /**
- * ...
- * @author J.J
- */
- @:bitmap("changebtn.png") class BTN extends BitmapData { }
- @:bitmap("bgm.png") class BG extends BitmapData {}
- class Fourier2
- {
- var ps:Array<Point>;
- var r:Float;
- var w:Int;
- var h:Int;
- var targ:MovieClip;
- var rl:Int;
- var points:Array<Point>;
- var qx:Array<Array<Point>>;
- var colors:Array < Int>;
- var tt:TextField;
- var circles:Array<MovieClip> = [];
- var changeBtn:Sprite;
- var circCent:Point = new Point(200, 200);
- var menu:MovieClip;
- public var R:Array<Float>;
- public var i:Int = 0;
- var parser = new hscript.Parser();
- var mode:Int = 1;
- var antx:TextField;
- var bntx:TextField;
- var interp:Interp;
- function doComp() {
- var script = "var x=" + antx.text + ";x";
- var program = parser.parseString(script);
- var interp = new hscript.Interp();
- interp.variables.set("cos", Math.cos); // share the Math class
- interp.variables.set("sin", Math.sin);
- interp.variables.set("abs", Math.abs);
- interp.variables.set("tan", Math.tan);
- interp.variables.set("pi", Math.PI);
- trace( Std.parseFloat(interp.execute(program)) );
- }
- function parse(str:String,n:Int) {
- var script = "var x=" + str+ ";x";
- var program = parser.parseString(script);
- interp.variables.set("n", n);
- var res:Float = Std.parseFloat(interp.execute(program)) ;
- return res;
- }
- public function new()
- {
- interp = new hscript.Interp();
- interp.variables.set("cos", Math.cos); // share the Math class
- interp.variables.set("sin", Math.sin);
- interp.variables.set("abs", Math.abs);
- interp.variables.set("tan", Math.tan);
- interp.variables.set("pow", Math.pow);
- interp.variables.set("pi", Math.PI);
- menu = new MovieClip();
- var mn:Bitmap = new Bitmap(new BG(500, 500));
- menu.addChild(mn);
- Lib.current.addChild(menu);
- var txf:TextFormat = new TextFormat("Consolas", 18, 0);
- antx = new TextField();
- //(8/pow(n*pi,2))*sin(n*pi/2);
- antx.type = TextFieldType.INPUT;
- antx.x = 80;
- antx.y = 40;
- antx.width = 200;
- antx.height = 25;
- antx.defaultTextFormat = txf;
- antx.border = true;
- antx.backgroundColor = 0xffffff;
- antx.text = "0";
- //"(4/pow(n*pi,2))*(1+pow(-1,n+1))";
- antx.background = true;
- menu.addChild(antx);
- bntx = new TextField();
- bntx.type = TextFieldType.INPUT;
- bntx.width = 200;
- bntx.height = 25;
- bntx.x = 80;
- bntx.y = 90;
- bntx.width = 200;
- bntx.defaultTextFormat = txf;
- bntx.border = true;
- bntx.backgroundColor = 0xffffff;
- bntx.text = "0";
- //"2/(n*pi)*pow(-1,n+1)";
- bntx.background = true;
- menu.addChild(bntx);
- menu.visible = false;
- changeBtn = new Sprite();
- var chb:Bitmap = new Bitmap(new BTN(500, 500));
- changeBtn.addChild(chb);
- changeBtn.x = 1024 - 80;
- changeBtn.y = 10;
- changeBtn.addEventListener(MouseEvent.MOUSE_DOWN, onCl);
- Lib.current.addChild(changeBtn);
- tt = new TextField();
- var script = "var x=Math.random()*25;x";
- qx = [];
- r = 100;
- R = [ .75, 0, .25, 0, .15, 0, .107, 0];
- colors = [0xff00f0,0x00e500,0xff5a00,0xfffc00,0x2a00ff,0x00f6ff,0xff0000,0x00ff00];
- var sum = .0;
- for (u in R) {
- sum += u;
- }
- r = 200 / sum;
- points = [];
- rl = R.length;
- ps = [];
- w = Lib.current.stage.stageWidth;
- h = Lib.current.stage.stageHeight;
- var mc = new MovieClip();
- Lib.current.addChild(mc);
- var step = 10;
- var gc = mc.graphics;
- gc.lineStyle(.1, 0x808080,.1);
- var st = 0;
- for (i in 0 ... Std.int(w/step)) {
- gc.moveTo(st, 0);
- gc.lineTo(st, h);
- st += step;
- }
- st = 0;
- for (i in 0 ... Std.int(h/step)) {
- gc.moveTo(0, st);
- gc.lineTo(w, st);
- st += step;
- }
- Lib.current.addEventListener(Event.ENTER_FRAME, loop);
- var x = .0;
- for ( i in 0 ...rl ) {
- qx[i] = [];
- circ(x, h - w / rl,R[i],i);
- x += w / rl;
- }
- Lib.current.addEventListener(MouseEvent.MOUSE_UP, mup);
- }
- private function onCl(e:MouseEvent):Void
- {
- if (mode==1) {
- circCent.x = -300;
- mode = 2;
- menu.visible = true;
- }
- else {
- mode = 1;
- circCent.x = 200;
- menu.visible = false;
- }
- for ( c in circles) {
- if (c.y == h - w / rl) {
- c.y = 800;
- }
- else {
- c.y=h - w / rl;
- }
- }
- }
- private function mup(e:MouseEvent):Void
- {
- targ = null;
- }
- private function circ(x:Float,y:Float,r:Float,idx:Int):MovieClip {
- var sp = new MovieClip();
- sp.addEventListener(MouseEvent.MOUSE_DOWN, ond);
- sp.idx = idx;
- circles.push(sp);
- Lib.current.addChild(sp);
- var g = sp.graphics;
- g.lineStyle(.1);
- g.beginFill(0x808080, .2);
- var q = new MovieClip();
- g.drawRect(0, 0, w/rl, w/rl);
- sp.addChild(q);
- g = q.graphics;
- sp.x = x;
- sp.y = y;
- sp.q = q;
- g.lineStyle(1,0x808080);
- g.moveTo(w/rl/2, w/rl/2);
- g.lineTo(w/rl/2, w/rl/2-r*50);
- g.drawCircle((w / rl) / 2,( w / rl) / 2, r*50);
- return sp;
- }
- private function ond(e:MouseEvent):Void
- {
- targ = e.target;
- }
- private function loop(e:Event):Void
- {
- //*********
- var dopi:Float = Math.PI * 2;
- var speed:Int = 5;
- var x =circCent.x;
- var y = circCent.y;
- var n = 8;
- var g = Lib.current.graphics;
- for( j in i ... (i+speed)){
- var a = j / 400 * dopi;
- x = circCent.x;
- y = circCent.y;
- g.clear();
- for ( k in 0 ... R.length) {
- var rx:Float ;
- var ry:Float;
- if (mode == 2) {
- rx = parse(antx.text, k + 1) * r;
- ry = parse(bntx.text, k + 1) * r;
- }else {
- rx = R[k] * r;
- ry = R[k] * r;
- }
- var x2 = Math.cos((k+1) * a)*rx;
- var y2 = Math.sin((k+1) * a)*ry;
- if (mode == 2) y2 = y2 + x2;
- qx[k].unshift(new Point(w / rl * 3, y2+200));
- for (kx in qx[k]) kx.x++;
- if ( qx[k].length > 600) qx[k].pop();
- g.lineStyle(.5,0x808080);
- g.drawCircle(x, y, 2);
- g.drawCircle(x, y, R[k] * r);
- y += y2;
- x += x2;
- }
- var p = new Point(w / rl * 3, y);
- ps.unshift(p);
- if (points.length > 200) points.pop();
- points.unshift(new Point(x, y));
- for (p in ps) p.x++;
- if (ps.length > 600) ps.pop();
- }
- g.lineStyle(1);
- var t = 1.0;
- var c = 0;
- for (q in qx) {
- t *= .5;
- g.lineStyle(2, colors[c],t);
- g.moveTo(q[0].x, q[0].y);
- for (kx in q) {
- g.lineTo(kx.x, kx.y);
- }
- c++;
- }
- g.lineStyle(1);
- g.moveTo(w / rl * 3, 0);
- g.lineTo(w / rl * 3, h);
- g.moveTo(x, y);
- g.lineTo(ps[0].x, ps[0].y);
- g.lineStyle(2, 0x11aaff);
- for (p in ps) {
- //g.moveTo(p.x, p.y);
- g.lineTo(p.x+1, p.y);
- }
- g.moveTo(points[0].x, points[0].y);
- g.lineStyle(1,0xffffff);
- var t = 1.1;
- for (p in points) {
- t *= .99;
- g.lineStyle(1, 0xff0000, t);
- g.lineTo(p.x, p.y);
- };
- i += speed;
- g.beginFill(0xff0000);
- g.drawCircle(x, y, 5);
- //-------------
- var sum = .0;
- for (u in R) {
- sum += u;
- }
- var q = 200 / sum;
- r += (q - r) * .1;
- var g = Lib.current.graphics;
- if (targ != null) {
- var mc:Sprite = targ.q;
- var gq = mc.graphics;
- gq.clear();
- var mx:Point = new Point(Lib.current.mouseX, Lib.current.mouseY);
- var v = (targ.x + w / rl / 2)-mx.x;
- var u = (targ.y +h/rl)-mx.y;
- gq.lineStyle(1,0xffffff);
- var r2 = Math.sqrt(v * v + u * u);
- gq.moveTo(w / rl / 2, w / rl / 2);
- r2 = Math.min(50, r2);
- gq.lineTo(w / rl / 2, w / rl / 2 - r2 );
- R[targ.idx] = r2/50;
- gq.drawCircle((w / rl) / 2,( w / rl) / 2, r2);
- }
- }
- public static function main() new Fourier2();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement