Advertisement
JavidJafari

Fourier

Apr 12th, 2016
1,054
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 8.03 KB | None | 0 0
  1. package ;
  2. import flash.display.Bitmap;
  3. import flash.display.BitmapData;
  4. import flash.display.MovieClip;
  5. import flash.display.Sprite;
  6. import flash.events.Event;
  7. import flash.events.MouseEvent;
  8. import flash.geom.Point;
  9. import flash.Lib;
  10. import flash.text.TextField;
  11. import flash.text.TextFieldAutoSize;
  12. import flash.text.TextFieldType;
  13. import flash.text.TextFormat;
  14. import hscript.Interp;
  15. import hscript.Parser;
  16.  
  17. /**
  18.  * ...
  19.  * @author J.J
  20.  */
  21.  
  22. @:bitmap("changebtn.png") class BTN extends BitmapData { }
  23. @:bitmap("bgm.png") class BG extends BitmapData {}
  24. class Fourier2
  25. {
  26.     var ps:Array<Point>;
  27.     var r:Float;
  28.     var w:Int;
  29.     var h:Int;
  30.     var targ:MovieClip;
  31.     var rl:Int;
  32.     var points:Array<Point>;
  33.     var qx:Array<Array<Point>>;
  34.     var colors:Array < Int>;
  35.     var tt:TextField;
  36.     var circles:Array<MovieClip> = [];
  37.     var changeBtn:Sprite;
  38.     var circCent:Point = new Point(200, 200);
  39.     var menu:MovieClip;
  40.     public  var R:Array<Float>;
  41.     public var i:Int = 0;
  42.     var parser = new hscript.Parser();
  43.     var mode:Int = 1;
  44.     var antx:TextField;
  45.     var bntx:TextField;
  46.     var interp:Interp;
  47.     function doComp() {
  48.         var script = "var x=" + antx.text + ";x";
  49.    
  50. var program = parser.parseString(script);
  51. var interp = new hscript.Interp();
  52. interp.variables.set("cos", Math.cos); // share the Math class
  53. interp.variables.set("sin", Math.sin);
  54. interp.variables.set("abs", Math.abs);
  55. interp.variables.set("tan", Math.tan);
  56. interp.variables.set("pi", Math.PI);
  57. trace( Std.parseFloat(interp.execute(program)) );  
  58.  
  59.  
  60.     }
  61.    
  62.     function parse(str:String,n:Int) {
  63.          
  64.         var script = "var x=" + str+ ";x";
  65.         var program = parser.parseString(script);
  66.         interp.variables.set("n", n);
  67.  
  68.         var res:Float = Std.parseFloat(interp.execute(program)) ;  
  69.             return res;
  70.            
  71.                
  72.     }
  73.     public function new()
  74.     {
  75.         interp = new hscript.Interp();
  76.         interp.variables.set("cos", Math.cos); // share the Math class
  77.         interp.variables.set("sin", Math.sin);
  78.         interp.variables.set("abs", Math.abs);
  79.         interp.variables.set("tan", Math.tan);
  80.         interp.variables.set("pow", Math.pow);
  81.         interp.variables.set("pi", Math.PI);
  82.         menu = new MovieClip();
  83.         var mn:Bitmap = new Bitmap(new BG(500, 500));
  84.         menu.addChild(mn);
  85.         Lib.current.addChild(menu);
  86.         var txf:TextFormat = new TextFormat("Consolas", 18, 0);
  87.         antx = new TextField();
  88.        
  89.        
  90.         //(8/pow(n*pi,2))*sin(n*pi/2);
  91.         antx.type = TextFieldType.INPUT;
  92.         antx.x = 80;
  93.         antx.y = 40;
  94.         antx.width = 200;
  95.         antx.height = 25;
  96.         antx.defaultTextFormat = txf;
  97.         antx.border = true;
  98.         antx.backgroundColor = 0xffffff;
  99.         antx.text = "0";
  100.         //"(4/pow(n*pi,2))*(1+pow(-1,n+1))";
  101.         antx.background = true;
  102.         menu.addChild(antx);
  103.        
  104.         bntx = new TextField();
  105.         bntx.type = TextFieldType.INPUT;
  106.         bntx.width = 200;
  107.         bntx.height = 25;
  108.         bntx.x = 80;
  109.         bntx.y = 90;
  110.         bntx.width = 200;
  111.         bntx.defaultTextFormat = txf;
  112.         bntx.border = true;
  113.         bntx.backgroundColor = 0xffffff;
  114.         bntx.text = "0";
  115.         //"2/(n*pi)*pow(-1,n+1)";
  116.         bntx.background = true;
  117.         menu.addChild(bntx);
  118.         menu.visible = false;
  119.         changeBtn = new Sprite();
  120.         var chb:Bitmap = new Bitmap(new BTN(500, 500));
  121.         changeBtn.addChild(chb);
  122.         changeBtn.x = 1024 - 80;
  123.         changeBtn.y = 10;
  124.         changeBtn.addEventListener(MouseEvent.MOUSE_DOWN, onCl);
  125.         Lib.current.addChild(changeBtn);
  126.    
  127.        
  128.         tt = new TextField();
  129.        
  130.     var script = "var x=Math.random()*25;x";
  131.    
  132.         qx = [];
  133.        
  134.         r = 100;
  135.         R = [ .75, 0, .25, 0, .15, 0, .107, 0];
  136.         colors = [0xff00f0,0x00e500,0xff5a00,0xfffc00,0x2a00ff,0x00f6ff,0xff0000,0x00ff00];
  137.         var sum = .0;
  138.         for (u in R) {
  139.             sum += u;
  140.             }
  141.         r = 200 / sum;
  142.          
  143.         points = [];
  144.        
  145.         rl = R.length;
  146.         ps = [];
  147.             w = Lib.current.stage.stageWidth;
  148.         h = Lib.current.stage.stageHeight;
  149.         var mc = new MovieClip();
  150.         Lib.current.addChild(mc);
  151.         var step = 10;
  152.         var gc = mc.graphics;
  153.             gc.lineStyle(.1, 0x808080,.1);
  154.         var st = 0;
  155.         for (i in 0 ... Std.int(w/step)) {
  156.             gc.moveTo(st, 0);
  157.             gc.lineTo(st, h);
  158.             st += step;
  159.         }
  160.         st = 0;
  161.         for (i in 0 ... Std.int(h/step)) {
  162.             gc.moveTo(0, st);
  163.             gc.lineTo(w, st);
  164.             st += step;
  165.         }
  166.        
  167.         Lib.current.addEventListener(Event.ENTER_FRAME, loop);
  168.             var x = .0;
  169.         for ( i in 0 ...rl ) {
  170.             qx[i] = [];
  171.             circ(x, h - w / rl,R[i],i);
  172.             x += w / rl;
  173.             }
  174.             Lib.current.addEventListener(MouseEvent.MOUSE_UP, mup);
  175.     }
  176.    
  177.     private function onCl(e:MouseEvent):Void
  178.     {
  179.        
  180.        
  181.        
  182.         if (mode==1) {
  183.             circCent.x = -300;
  184.             mode = 2;
  185.             menu.visible = true;
  186.             }
  187.             else {
  188.                 mode = 1;
  189.                 circCent.x = 200;
  190.                 menu.visible = false;
  191.                 }
  192.         for ( c in circles) {
  193.             if (c.y ==  h - w / rl) {
  194.                 c.y = 800;
  195.                 }
  196.                 else {
  197.                     c.y=h - w / rl;
  198.                     }
  199.             }
  200.     }
  201.    
  202.     private function mup(e:MouseEvent):Void
  203.     {
  204.         targ = null;
  205.     }
  206.     private function circ(x:Float,y:Float,r:Float,idx:Int):MovieClip {
  207.         var sp = new MovieClip();
  208.        
  209.         sp.addEventListener(MouseEvent.MOUSE_DOWN, ond);
  210.         sp.idx = idx;
  211.        
  212.         circles.push(sp);
  213.         Lib.current.addChild(sp);
  214.         var g = sp.graphics;
  215.         g.lineStyle(.1);
  216.         g.beginFill(0x808080, .2);
  217.         var q = new MovieClip();
  218.         g.drawRect(0, 0, w/rl, w/rl);
  219.         sp.addChild(q);
  220.         g = q.graphics;
  221.         sp.x = x;
  222.         sp.y = y;
  223.         sp.q = q;
  224.         g.lineStyle(1,0x808080);
  225.         g.moveTo(w/rl/2, w/rl/2);
  226.         g.lineTo(w/rl/2, w/rl/2-r*50);
  227.         g.drawCircle((w / rl) / 2,( w / rl) / 2, r*50);
  228.         return sp;
  229.        
  230.     }
  231.     private function ond(e:MouseEvent):Void
  232.     {
  233.         targ = e.target;
  234.     }
  235.     private function loop(e:Event):Void
  236.     {
  237.        
  238.        
  239.         //*********
  240.        
  241.         var dopi:Float = Math.PI * 2;
  242.         var speed:Int = 5;
  243.        
  244.             var x =circCent.x;
  245.             var y = circCent.y;
  246.            
  247.             var n = 8;
  248.             var g = Lib.current.graphics;
  249.            
  250.        
  251.              for( j in i ... (i+speed)){
  252.                  var a = j / 400 * dopi;
  253.                  x = circCent.x;
  254.                  y = circCent.y;
  255.                  g.clear();
  256.                  
  257.                
  258.                  
  259.             for ( k in 0 ... R.length) {
  260.                
  261.                 var rx:Float ;
  262.                 var ry:Float;
  263.                 if (mode == 2) {
  264.                
  265.                     rx = parse(antx.text, k + 1) * r;
  266.                
  267.                    
  268.                     ry = parse(bntx.text, k + 1) * r;
  269.                    
  270.                 }else {
  271.                     rx = R[k] * r;
  272.                     ry = R[k] * r;
  273.                 }
  274.                
  275.                  var x2 = Math.cos((k+1) * a)*rx;
  276.                  var y2 = Math.sin((k+1) * a)*ry;
  277.                  if (mode == 2) y2 = y2 + x2;
  278.                  qx[k].unshift(new Point(w / rl * 3, y2+200));
  279.                  for (kx in qx[k]) kx.x++;
  280.                  if ( qx[k].length > 600)  qx[k].pop();
  281.                  g.lineStyle(.5,0x808080);
  282.                  g.drawCircle(x, y, 2);
  283.                  g.drawCircle(x, y, R[k] * r);
  284.                  y += y2;
  285.                  x += x2;
  286.             }
  287.        
  288.             var p = new Point(w / rl * 3, y);
  289.            
  290.             ps.unshift(p);
  291.             if (points.length > 200) points.pop();
  292.             points.unshift(new Point(x, y));
  293.             for (p in ps) p.x++;
  294.                 if (ps.length > 600) ps.pop();
  295.                
  296.         }
  297.             g.lineStyle(1);
  298.             var t = 1.0;
  299.             var c = 0;
  300.             for (q in qx) {
  301.                 t *= .5;
  302.                 g.lineStyle(2, colors[c],t);
  303.                 g.moveTo(q[0].x, q[0].y);
  304.                 for (kx in q) {
  305.                     g.lineTo(kx.x, kx.y);
  306.                 }
  307.                 c++;
  308.             }
  309.             g.lineStyle(1);
  310.             g.moveTo(w / rl * 3, 0);
  311.             g.lineTo(w / rl * 3, h);
  312.             g.moveTo(x, y);
  313.             g.lineTo(ps[0].x, ps[0].y);
  314.             g.lineStyle(2, 0x11aaff);
  315.              
  316.             for (p in ps) {
  317.                 //g.moveTo(p.x, p.y);
  318.                 g.lineTo(p.x+1, p.y);
  319.                
  320.                 }
  321.            
  322.             g.moveTo(points[0].x, points[0].y);
  323.             g.lineStyle(1,0xffffff);
  324.             var t = 1.1;
  325.          
  326.             for (p in points) {
  327.                 t *= .99;
  328.                 g.lineStyle(1, 0xff0000, t);
  329.                 g.lineTo(p.x, p.y);
  330.                 };
  331.            
  332.            
  333.         i += speed;
  334.         g.beginFill(0xff0000);
  335.         g.drawCircle(x, y, 5);
  336.         //-------------
  337.         var sum = .0;
  338.         for (u in R) {
  339.             sum += u;
  340.             }
  341.          var q = 200 / sum;
  342.          r += (q - r) * .1;
  343.          var g = Lib.current.graphics;
  344.            
  345.         if (targ != null) {
  346.             var mc:Sprite = targ.q;
  347.             var gq = mc.graphics;
  348.             gq.clear();
  349.             var mx:Point = new Point(Lib.current.mouseX, Lib.current.mouseY);
  350.            
  351.             var v = (targ.x + w / rl / 2)-mx.x;
  352.            
  353.             var u = (targ.y +h/rl)-mx.y;
  354.            
  355.                 gq.lineStyle(1,0xffffff);
  356.                 var r2 = Math.sqrt(v * v + u * u);
  357.                
  358.         gq.moveTo(w / rl / 2, w / rl / 2);
  359.             r2 = Math.min(50, r2);
  360.         gq.lineTo(w / rl / 2, w / rl / 2 - r2 );
  361.         R[targ.idx] = r2/50;
  362.         gq.drawCircle((w / rl) / 2,( w / rl) / 2, r2);
  363.            
  364.         }
  365.     }
  366.     public static function main() new Fourier2();
  367.    
  368. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement