Test

Aus Wiki1

(Unterschied zwischen Versionen)
Wechseln zu: Navigation, Suche
Zeile 44: Zeile 44:
         }, 100);
         }, 100);
 +
var r=3;
 +
var p0=[];
 +
var p0[1]=board.create('point', [2.0, 2.0]),
 +
    c1 = board.create('circle', [p1, r]);
-
</jsxgraph>
 
-
 
-
<jsxgraph box="box" width="500" height="500">
 
-
 
-
        var brd = JXG.JSXGraph.initBoard('box', {boundingbox: [-3,3,3,-3], axis:true});
 
-
 
-
    // Parameter
 
-
    let g = 9.81;
 
-
    let l1 = 1.0, l2 = 1.0;
 
-
    let m1 = 1.0, m2 = 1.0;
 
-
 
-
    // Anfangsbedingungen (Winkel in Radiant)
 
-
    let theta1 = 0.1*Math.PI/2;    // oberes Pendel
 
-
    let theta2 = 0.1*Math.PI/4;    // unteres Pendel
 
-
    let omega1 = 0;            // Winkelgeschwindigkeit 1
 
-
    let omega2 = 0;            // Winkelgeschwindigkeit 2
 
-
 
-
    // Hilfsfunktion: Bewegungsgleichungen (Runge-Kutta 4)
 
-
    function dOmega(theta1, theta2, omega1, omega2) {
 
-
      let delta = theta2 - theta1;
 
-
 
-
      let den1 = (m1+m2)*l1 - m2*l1*Math.cos(delta)*Math.cos(delta);
 
-
      let den2 = (l2/l1)*den1;
 
-
 
-
      let a1 = (m2*l1*omega1*omega1*Math.sin(delta)*Math.cos(delta)
 
-
              + m2*g*Math.sin(theta2)*Math.cos(delta)
 
-
              + m2*l2*omega2*omega2*Math.sin(delta)
 
-
              - (m1+m2)*g*Math.sin(theta1)) / den1;
 
-
 
-
      let a2 = (-m2*l2*omega2*omega2*Math.sin(delta)*Math.cos(delta)
 
-
              + (m1+m2)*(g*Math.sin(theta1)*Math.cos(delta)
 
-
              - l1*omega1*omega1*Math.sin(delta)
 
-
              - g*Math.sin(theta2))) / den2;
 
-
 
-
      return [a1, a2];
 
-
    }
 
-
 
-
    function rk4(dt) {
 
-
      let [k1a1, k1a2] = dOmega(theta1, theta2, omega1, omega2);
 
-
 
-
      let t1 = theta1 + 0.5*dt*omega1;
 
-
      let t2 = theta2 + 0.5*dt*omega2;
 
-
      let w1 = omega1 + 0.5*dt*k1a1;
 
-
      let w2 = omega2 + 0.5*dt*k1a2;
 
-
      let [k2a1, k2a2] = dOmega(t1, t2, w1, w2);
 
-
 
-
      t1 = theta1 + 0.5*dt*omega1;
 
-
      t2 = theta2 + 0.5*dt*omega2;
 
-
      w1 = omega1 + 0.5*dt*k2a1;
 
-
      w2 = omega2 + 0.5*dt*k2a2;
 
-
      let [k3a1, k3a2] = dOmega(t1, t2, w1, w2);
 
-
 
-
      t1 = theta1 + dt*omega1;
 
-
      t2 = theta2 + dt*omega2;
 
-
      w1 = omega1 + dt*k3a1;
 
-
      w2 = omega2 + dt*k3a2;
 
-
      let [k4a1, k4a2] = dOmega(t1, t2, w1, w2);
 
-
 
-
      theta1 += dt*(omega1 + (w1 + 2*(omega1 + w1))/6); // kleine Vereinfachung
 
-
      theta2 += dt*(omega2 + (w2 + 2*(omega2 + w2))/6);
 
-
 
-
      omega1 += dt*(k1a1 + 2*k2a1 + 2*k3a1 + k4a1)/6;
 
-
      omega2 += dt*(k1a2 + 2*k2a2 + 2*k3a2 + k4a2)/6;
 
-
    }
 
-
 
-
    // Punkte für das Pendel
 
-
    let origin = brd.create('point', [0,0], {fixed:true, size:2, name:''});
 
-
    let p1 = brd.create('point', [
 
-
      () => l1*Math.sin(theta1),
 
-
      () => -l1*Math.cos(theta1)
 
-
    ], {size:2, name:'', color:'red'});
 
-
    let p2 = brd.create('point', [
 
-
      () => l1*Math.sin(theta1) + l2*Math.sin(theta2),
 
-
      () => -l1*Math.cos(theta1) - l2*Math.cos(theta2)
 
-
    ], {size:2, name:'', fillColor: 'rgba(255, 0, 0, 0.5)', trace:true});
 
-
 
-
    // Verbindungen
 
-
    brd.create('line', [origin, p1], {straightFirst:false, straightLast:false});
 
-
    brd.create('line', [p1, p2], {straightFirst:false, straightLast:false});
 
-
 
-
    // Animation
 
-
    function step() {
 
-
      rk4(0.01);
 
-
      brd.update();
 
-
      requestAnimationFrame(step);
 
-
    }
 
-
    step();
 
</jsxgraph>
</jsxgraph>

Version vom 17:00, 8. Dez. 2025

Persönliche Werkzeuge