Advertisement
Guest User

doublePendulum

a guest
Mar 21st, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.90 KB | None | 0 0
  1. float a1 = PI/4; // Initial angle of line 1 with respect to point 0
  2. float a2 = PI/8; // Initial angle of line 2 with respect to line 1
  3. int l1 = 200;
  4. int l2 = 200;
  5. int m1 = 40;
  6. int m2 = 40;
  7. float g = 1;
  8. float a1_v = 0;
  9. float a2_v = 0;
  10. float a1_a = 0;
  11. float a2_a = 0;
  12. float resistance = 1;
  13. float x0;
  14. float y0;
  15. float x1;
  16. float y1;
  17. float x2;
  18. float y2;
  19. float prevx, prevy;
  20.  
  21. PGraphics canvas;
  22.  
  23. void setup() {
  24.   size(1000,1000);
  25.   x0 = width/2;
  26.   y0 = height/2;
  27.   x1 = x0 + sin(a1) * l1;
  28.   y1 = y0 + cos(a1) * l1;
  29.   x2 = x1 + sin(a1 + a2) * l2;
  30.   y2 = y1 + cos(a1 + a2) * l2;
  31.   prevx = x2;
  32.   prevy = y2;
  33.   canvas = createGraphics(width, height);
  34.   canvas.beginDraw();
  35.   canvas.background(255,191,0);
  36.   canvas.endDraw();
  37. }
  38.  
  39. void draw(){
  40.   background(235,140,0);
  41.   imageMode(CORNER);
  42.   image(canvas, 0, 0, width, height);
  43.  
  44.   float num1 = -g * (2 * m1 + m2) * sin(a1);
  45.   float num2 = -m2 * g * sin(a1-2*a2);
  46.   float num3 = -2*sin(a1-a2)*m2;
  47.   float num4 = a2_v*a2_v*l2+a1_v*a1_v*l1*cos(a1-a2);
  48.   float den = l1 * (2*m1+m2-m2*cos(2*a1-2*a2));
  49.   a1_a = (num1 + num2 + num3*num4) / den;
  50.  
  51.   num1 = 2 * sin(a1-a2);
  52.   num2 = (a1_v*a1_v*l1*(m1+m2));
  53.   num3 = g * (m1 + m2) * cos(a1);
  54.   num4 = a2_v*a2_v*l2*m2*cos(a1-a2);
  55.   den = l2 * (2*m1+m2-m2*cos(2*a1-2*a2));
  56.   a2_a = (num1*(num2+num3+num4)) / den;
  57.  
  58.   a1_v += a1_a;
  59.   a2_v += a2_a;
  60.   a1 += a1_v;
  61.   a2 += a2_v;
  62.  
  63.   a1_v *= resistance;
  64.   a2_v *= resistance;
  65.  
  66.   a1 = a1 % 360;
  67.   a2 = a2 % 360;
  68.  
  69.   x1 = x0 + sin(a1) * l1;
  70.   y1 = y0 + cos(a1) * l1;
  71.   x2 = x1 + sin(a1 + a2) * l2;
  72.   y2 = y1 + cos(a1 + a2) * l2;
  73.  
  74.   canvas.beginDraw();
  75.   canvas.stroke(220,105,0);
  76.   if (frameCount > 1) {
  77.     canvas.line(prevx, prevy, x2, y2);
  78.   }
  79.   canvas.endDraw();
  80.   stroke(96,35,32);
  81.   line(x0,y0,x1,y1);
  82.   line(x1,y1,x2,y2);
  83.   stroke(0);
  84.   fill(224,48,30);
  85.   ellipse(x1, y1, m1, m1);
  86.   ellipse(x2, y2, m2, m2);
  87.   prevx = x2;
  88.   prevy = y2;
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement