If you're seeing this message, it means we're having trouble loading external resources on our website.

Wenn du hinter einem Webfilter bist, stelle sicher, dass die Domänen *. kastatic.org und *. kasandbox.org nicht blockiert sind.

Hauptinhalt

Trigonometrie und Kräfte: Das Pendel

Erinnerst du dich an die Newtonschen Bewegungsgesetze die wir vorher behandelt haben? Damals haben wir diese Gesetze benutzt, um die Beschleunigung eines Objekts zu berechnen, so dass wir seine neue Position in der Welt berechnen und zeichnen konnten. Jetzt werden wir diese Gesetze nutzen, um die Beschleunigung eines Pendels zu berechnen und seine Position entlang der Schwingung zu berechnen und zu zeichnen. Und wie sich herausstellt, werden wir auf dem Weg dorthin etwas Hilfe von der Trigonometrie brauchen.
Ein Pendel ist ein Gewicht, welches an einem Drehgelenk aufgehängt ist. Offensichtlich existiert ein echtes Pendel nur im 3-dimensionalen Raum, aber vereinfacht betrachten wir nun ein Pendel in 2-dimensionalen Raum—unserem Programm-Canvas .
Im Kapitel über Kräfte haben wir gelernt, wie eine Kraft (wie die Schwerkraft im vorherigen Diagramm) Objekte beschleunigen kann: F=M×A, or A=F/M.
In diesem Fall fällt der Pendelkörper jedoch nicht einfach auf den Boden, da er mit einem Arm am Drehpunkt befestigt ist. Stattdessen schwingt das Pendel in Richtung seiner Ruhelage, und wir wollen die Beschleunigung des Pendels entlang der Schwingung berechnen. Wir nennen das seine Winkelbeschleunigung, da das Pendel entlang eines Bogens beschleunigt wird.
Um die Winkelbeschleunigung des Pendels zu bestimmen, müssen wir die Gravitationskraft in Komponenten zerlegen. Eine Komponente wird entlang des Pendelarms wirken. Wir können diese Komponente ignorieren, da der Arm immer gegen sie zieht und sie somit aufhebt. Die andere Komponente ist senkrecht zum Arm. Das ist diejenige, die uns interessiert, weil sie das Pendel "seitwärts" zieht und es zum Schwingen bringt. Zoomen wir in das Pendeldiagramm hinein und visualisieren diese Komponenten der Gravitationskraft:
Fg ist die Gesamtgravitationskraft nach unten. Fp ist die Gravitationskraft senkrecht zum Arm des Pendels, die in die entgegengesetzte Richtung zeigt, in der das Pendel schwingt. Fa ist die Schwerkraft entlang des Armes, die wir vernachlässigen, da sie keinen Einfluss auf die Winkelbeschleunigung hat.
Wie berechnen wir nun Fp? Hier wenden wir unsere Trigonometrie an. Fg ist die Hypotenuse eines rechtwinkligen Dreiecks, und θ ist der Winkel des Schenkels. Sinus ist gleich Gegenkathete über Hypotenuse:
sin(θ)=FpFg
Deshalb gilt:
Fp=Fgsin(θ)
Toll, wir haben jetzt eine einfache Formel zur Berechnung von Fp. Kehren wir nun zu unserer ursprünglichen Frage zurück: Wie groß ist die Winkelbeschleunigung des Pendels? Sobald wir die Winkelbeschleunigung gefunden haben, können wir unsere Bewegungsgesetze anwenden, um den neuen Winkel für das Pendel zu finden.
Winkelgeschwindigkeit = Winkelgeschwindigkeit + Winkelbeschleunigung
Winkel = Winkel + Winkelgeschwindigkeit
Dank des zweiten Newtonschen Gesetzes wissen wir, dass es eine Beziehung zwischen Kraft und Beschleunigung gibt, nämlich F=M×A, or A=F/M, und wir können diese Beziehung mit der obigen Formel verwenden, um eine Winkelbeschleunigung zu berechnen. Versuche, dies nachzuvollziehen:
Beginnend mit:
Pendelkraft = Gewichtskraft * sin(θ)
Dann teilen wir die rechte Seite durch die Masse, um die Beschleunigung zu erhalten, basierend auf dem zweiten newton'schen Gesetz:
Winkelbeschleunigung = (Gewichtskraft * sin(θ)) / Masse
Dann fällt uns auf, dass wir die Kraft durch Schwerkraft einfach durch die Masse teilen können, und dass dies das Gleiche ist wie die Beschleunigung durch Schwerkraft. Daher ergänzen wir das einfach:
Winkelbeschleunigung = Erdbeschleunigung * sin(θ)
Ta-da! Nun wissen wir, wie wir die Winkelbeschleunigung berechnen können.
Wir können das noch weiter vereinfachen, da wir ProcessingJS-Programmierer und keine Physiker sind. Ja, wir wissen, dass die Erdbeschleunigung auf der Erde 9,8 Meter pro Sekunde zum Quadrat beträgt. Aber diese Zahl ist für uns nicht relevant. In unseren Programmen ist unsere "Schwerkraft" nur eine willkürliche Zahl, eine, die wir verwenden können, um die Beschleunigung auf etwas zu skalieren, das sich richtig anfühlt.
Winkelbeschleunigung = Schwerkraft * sin(θ)
Faszinierend. Nach all dem ist die Formel so einfach! Du magst dich fragen, wieso wir die ganze Herleitung gemacht haben? Ich meine, klar, Lernen macht Spaß und so, aber wir hätten auch einfach sagen können: "Hey, die Winkelgeschwindigkeit eines Pendels ist irgendeine Konstante multipliziert mit dem Sinus des Winkels".
Wir sollten uns aber wieder folgendes bewusst machen: Der Zweck dieses Kurses ist es nicht, etwas über schwingende Pendel oder die Schwerkraft zu lernen. Es geht darum, kreativ darüber nachzudenken, wie sich Objekte durch ein computerbasiertes Grafiksystem auf dem Bildschirm bewegen können. Das Pendel ist nur eine Fallstudie. Wenn du die Herangehensweise an die Programmierung eines Pendels verstanden hast, dann kannst du diese Techniken immer wieder anwenden, egal, was du entwerfen möchtest.
Natürlich sind wir hier noch nicht fertig. Wir können uns über unsere einfache, elegante Formel freuen, aber müssen sie immer noch in den Code einbauen. Das ist nun ein guter Zeitpunkt, unsere objektorientierten Programmierfähigkeiten zu üben und ein Pendulum-Objekt zu erstellen. Gehen wir noch einmal alle Eigenschaften des Objekts durch, über die wir bis hierher gestoßen sind:
  • Armlänge
  • Winkel
  • Winkelgeschwindigkeit
  • Winkelbeschleunigung
Außerdem wollen wir auch spezifizieren, von wo das Pendel herunterhängt. Wir können also mit folgendem Konstruktor beginnen:
var Pendulum  = function(origin, armLength) {
    this.origin = origin;
    this.armLength = armLength;

    this.angle = PI/4;
    this.aVelocity = 0{,}0;
    this.aAcceleration = 0{,}0;
};
Wir müssen außerdem eine Methode update() schreiben, die den Winkel des Pendels entsprechend unserer Formel aktualisiert.
Pendulum.prototype.update = function() {
    // Beliebige Konstante
    var gravity = 0{,}4;
    // Berechne die Beschleunigung
    this.aAcceleration = -1 * gravity * sin(this.angle);
    // Addiere die Geschwindigkeit
    this.aVelocity += this.aAcceleration;
    // Addiere den Winkel
    this.angle += this.aVelocity;    
};
…sowie eine display()-Methode, um das Pendel in das Fenster zu ziehen. Dies wirft die Frage auf: "Äh, wohin sollen wir das Pendel überhaupt zeichnen?" Wir kennen den Winkel und die Armlänge, aber woher wissen wir die x,y (kartesischen) Koordinaten für den Drehpunkt (nennen wir ihn Ursprung) und das Gewicht (nennen wir es Position)? Das wird zwar langsam langweilig, aber die Antwort ist wieder einmal Trigonometrie. Betrachten wir das Diagramm oben.
Sowohl Ursprung als auch Armlänge können wir uns ausdenken. Bauen wir unser Pendel also zum Beispiel so:
var p = new Pendulum(new PVector(100, 10), 125);
Wir speichern den momentanen Winkel in der angle-Eigenschaft. Relativ zum Ursprung betrachtet ist die Position des Pendels eine Polarkoordinate: (r, Winkel). Wir brauchen sie aber kartesisch. Zum Glück haben wir ja in dem Abschnitt über Winkel die Umrechnung von Polarkoordinaten zu kartesischen Koordinaten gelernt! In dem Abschnitt war der Winkel relativ zur horizontalen Achse, doch hier ist er relativ zur vertikalen Achse, deshalb benutzen wir sin() für die x-Position und cos() für die y-Position, anstelle von cos() bzw. sin(). Mit dieser Umrechnungsformel können wir die Position in Abhängigkeit vom Ursprung berechnen und dann die Position des Ursprungs ergänzen:
this.position = new PVector(
   this.armLength * sin(this.angle),
   this.armLength * cos(this.angle));
this.position.add(this.origin);
stroke(0, 0, 0);
fill(175, 175, 175);
line(this.origin.x, this.origin.y, this.position.x, this.position.y);
ellipse(this.position.x, this.position.y, 16, 16);
Bevor wir nun alles zusammensetzen, muss ich noch ein kleines Detail ergänzen. Denken wir kurz an den Pendelarm. Ist er aus Metall? Eine Schnur? Ein Gummiband? Wie ist er an das Drehgelenk befestigt? Wie lang und schwer ist er? Ist es ein windiger Tag heute? Es gibt viele solcher Fragen, welche unsere Simulation beeinflussen würden. Aber natürlich leben wir jetzt in einer Fantasiewelt, in welcher der Pendelarm eine ideale Stange ist, welche sich nicht verbiegt und deren Masse sich in einem infinitesimalen kleinen Punkt konzentriert.
Nichtsdestotrotz müssen wir, obwohl wir uns mit solchen Fragen nicht verrückt machen wollen, eine weitere Variable zu unserer Berechnung der Winkelbeschleunigung hinzufügen. Der Einfachheit halber haben wir bei der Ableitung der Pendelbeschleunigung angenommen, dass die Länge des Pendelarmes gleich 1 ist. Tatsächlich beeinflusst die Länge des Armes die Beschleunigung aber deutlich: Umso länger der Arm, desto schwächer die Beschleunigung. Um das Pendel also genauer zu beschreiben, teilen wir die Beschleunigung durch die Länge, also hier durch armLength. Besuche The Simple Pendulum website (englisch) für eine vertiefende Erklärung.
this.aAcceleration = (-1 * gravity / this.armLength) * sin(this.angle);
Schließlich wirken auf ein echtes Pendel noch Reibung und Luftwiderstand, mit unserem bisherigen Code würde das Pendel also unendlich lange schwingen. Um es etwas realistischer zu gestalten, benutzen wir einen "Dämpfungs"-Trick. Ich nenne es Trick, da wir, anstatt die Reibung zu modellieren, die Winkelgeschwindigkeit einfach bei jedem Zyklus reduzieren und somit einen ähnlichen Effekt erzielen. Der folgende Code reduziert die Geschwindigkeit um 1% (oder multipliziert sie mit 99%) für jeden Frame der Animation:
this.aVelocity *= this.damping;
Alles in allem haben wir nun das folgende Beispiel. Wir haben ein paar Funktionen hinzugefügt, mit denen man das Pendel einfach auf eine bestimmte Höhe ziehen und von dort loslassen kann. Probier es aus!
Der Kurs "Natürliche Simulationen" ist eine Bearbeitung von "The Nature of Code" von Daniel Shiffman, und wird unter der Creative Commons Attribution-NonCommercial 3,0 Unported Lizenz verwendet.

Willst du an der Diskussion teilnehmen?

Noch keine Beiträge.
Verstehst du Englisch? Klick hier, um weitere Diskussionen auf der englischen Khan Academy Seite zu sehen.