Rafpast

Lisous_Table

Apr 18th, 2021 (edited)
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.17 KB | None | 0 0
  1. LisajousTable table;
  2. boolean lisajousAction = false;
  3. float delta_time, now = System.nanoTime();
  4.  
  5.  
  6. void setup()
  7. {
  8.   size(1920, 1020, P2D);
  9.   table = new LisajousTable();
  10.   table.angleChange1 = lisajousAction ? table.angleChange2 : 0;
  11. }
  12.  
  13. void calculate_delta_time()
  14. {
  15.   delta_time = (System.nanoTime()- now)/100000000;
  16.   now = System.nanoTime();
  17. }
  18.  
  19. void keyPressed()
  20. {
  21.   if ((key >= 'A' && key <= 'Z') || (key >= 'a' && key <= 'z'))
  22.   {
  23.     if (key == 'R' ||key == 'r')
  24.     {
  25.       float lisousChange = 0.05;
  26.       table.reset(lisousChange);
  27.     } else if (key == 'S' ||key == 's')
  28.     {
  29.       lisajousAction = !lisajousAction;
  30.     }
  31.  
  32.     table.angleChange1 = lisajousAction ? table.angleChange2 : 0;
  33.   }
  34. }
  35.  
  36. void draw()
  37. {
  38.   noFill();
  39.   textSize(20);
  40.   background(0);
  41.   table.show(lisajousAction);
  42.   String startStop = lisajousAction ? "Stop" : "Start";
  43.   text("Reset - r\n" + startStop + " - s\n" + int(frameRate) + " fps", 1, 20);
  44.   calculate_delta_time();
  45. }
  46.  
  47. class LisajousTable
  48. {
  49.   int size = 100, cols, rows;
  50.   ArrayList<ArrayList<Curve>> curves = new ArrayList<ArrayList<Curve>>();
  51.   float centerX = 0, centerY = 0, x = 0, y = 0, factor = 1, angle = 0;
  52.   float diameter = size - 0.2 * size, radius = diameter/2, offset = size/2;
  53.   float angleChange1 = 0.05, angleChange2 = angleChange1, inverseFactor = abs(1/factor);
  54.   boolean whatLine = true; //true - horizontal line, false - vertical line
  55.  
  56.   LisajousTable()
  57.   {
  58.     //Calculation of the number of circles vertically and horizontally
  59.     cols = (width - int(offset)) / size;
  60.     rows = (height - int(offset)) / size;
  61.  
  62.     for (int j = 0; j < rows; j++) {
  63.       curves.add(new ArrayList<Curve>());
  64.       for (int i = 0; i < cols; i++) {
  65.         curves.get(j).add(new Curve());
  66.       }
  67.     }
  68.   }
  69.  
  70.   void reset(float change)
  71.   {
  72.  
  73.     angleChange1 = change;
  74.     angleChange2 = change;
  75.  
  76.     for (int j = 0; j < rows; j++)
  77.     {
  78.       for (int i = 0; i < cols; i++)
  79.       {
  80.         curves.get(j).get(i).reset();
  81.       }
  82.     }
  83.  
  84.     offset = size/2;
  85.     diameter = size - 0.2 * size;
  86.     radius = diameter/2;
  87.  
  88.     cols = (width - int(offset)) / size;
  89.     rows = (height - int(offset)) / size;
  90.  
  91.     for (int j = 0; j < rows; j++) {
  92.       curves.add(new ArrayList<Curve>());
  93.       for (int i = 0; i < cols; i++) {
  94.         curves.get(j).add(new Curve());
  95.       }
  96.     }
  97.  
  98.     angle = 0;
  99.     inverseFactor = abs(1/factor);
  100.   }
  101.  
  102.   void calculations()
  103.   {
  104.     float line1 = 0, plane = 0, line2 = 0;
  105.     float inside = 0, sizePlusOfset = size + offset;
  106.    
  107.     if (whatLine)
  108.     {
  109.       line1 = cols;
  110.       line2 = rows;
  111.       plane = height;
  112.       centerY = offset;
  113.     } else
  114.     {
  115.       line1 = rows;
  116.       line2 = cols;
  117.       plane = width;
  118.       centerX = offset;
  119.     }
  120.  
  121.     for (int i = 0; i < line1; i++)
  122.     {
  123.       if (whatLine)
  124.       {
  125.         centerX = sizePlusOfset + i * size;
  126.       } else
  127.       {
  128.         centerY = sizePlusOfset + i * size;
  129.       }
  130.  
  131.       inside = angle * (i + factor) - HALF_PI;
  132.  
  133.       x = radius * cos(inside);
  134.       y = radius * sin(inside);
  135.  
  136.       for (int j = 0; j < line2; j++)
  137.       {
  138.  
  139.         if (whatLine)
  140.         {
  141.           curves.get(j).get(i).setX(centerX + x);
  142.         } else
  143.         {
  144.           curves.get(i).get(j).setY(centerY + y);
  145.         }
  146.       }
  147.  
  148.       strokeWeight(1);
  149.       stroke(255, 230);
  150.       ellipse(centerX, centerY, diameter, diameter);
  151.       strokeWeight(8);
  152.       point(centerX + x, centerY + y);
  153.       stroke(255, 150);
  154.       strokeWeight(1);
  155.  
  156.       if (whatLine)
  157.       {      
  158.         line(centerX + x, 0, centerX + x, plane);
  159.       } else
  160.       {
  161.         line(0, centerY + y, plane, centerY + y);
  162.       }
  163.     }
  164.   }
  165.  
  166.   void show(boolean lisajousAction)
  167.   {
  168.  
  169.     for (int i = 0; i < 2; i++)
  170.     {
  171.       calculations();
  172.       whatLine = !whatLine;
  173.     }  
  174.  
  175.     for (int j = 0; j < rows; j++) {
  176.       for (int i = 0; i < cols; i++) {
  177.         if (lisajousAction)
  178.         {
  179.           curves.get(j).get(i).addPoint();
  180.         }
  181.         curves.get(j).get(i).show();
  182.       }
  183.     }
  184.  
  185.     angle -= angleChange1 * delta_time;
  186.  
  187.     if (angle < -TWO_PI * inverseFactor) {
  188.  
  189.       for (int j = 0; j < rows; j++) {
  190.         for (int i = 0; i < cols; i++) {
  191.           curves.get(j).get(i).reset();
  192.         }
  193.       }      
  194.       //saveFrame("###lissajous.png");
  195.       angle = 0;
  196.     }
  197.   }
  198. }
  199.  
  200. class Curve
  201. {
  202.   ArrayList<PVector> path;
  203.   PVector current = new PVector(0, 0);
  204.  
  205.   Curve()
  206.   {
  207.     path = new ArrayList<PVector>();
  208.     current = new PVector();
  209.   }
  210.  
  211.   void setX(float x)
  212.   {
  213.     current.x = x;
  214.   }
  215.  
  216.   void setY(float y)
  217.   {
  218.     current.y = y;
  219.   }
  220.  
  221.   void addPoint()
  222.   {
  223.     path.add(current);
  224.   }
  225.  
  226.   void reset()
  227.   {
  228.     path.clear();
  229.   }
  230.  
  231.   void show()
  232.   {
  233.     noFill();
  234.     stroke(255);
  235.     strokeWeight(1);  
  236.     beginShape();
  237.     for (PVector v : path) {
  238.       //stroke((map(path.get(i).x, 0, width, 50, 255)), (map(i, 0, path.size(), 0, 255)), (map(path.get(i).y, 0, height, 100, 255)));
  239.       vertex(v.x, v.y);
  240.     }
  241.  
  242.     endShape();
  243.     strokeWeight(8);
  244.     point(current.x, current.y);
  245.     current = new PVector();
  246.   }
  247. }
Add Comment
Please, Sign In to add comment