JavidJafari

Fourier

Apr 12th, 2016
509
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×