Hauptinhalt
Programmierung
Kurs: Programmierung > Lerneinheit 5
Lesson 5: Kräfte- Newtonsche Bewegungsgesetze
- Challenge: Schwebender Ballon
- Bewegung von vielen Objekten
- Challenge: Wandbälle
- Gravitation und Reibung modellieren
- Challenge: Liegende Polizisten
- Widerstand in Luft und Flüssigkeit
- Challenge: Sinkendes Treibholz
- Anziehungskraft der Gravitation
- Challenge: Kunstwerk-Generator
- Gegenseitige Anziehung
- Challenge: Gegenseitige Abstoßung
- Projekt: Angenehmes und fürchterliche Räuber
© 2023 Khan AcademyNutzungsbedingungenDatenschutzerklärungCookie-Meldung
Gravitation und Reibung modellieren
Nun wollen wir die Kräfte realistischer gestalten, indem wir die Schwerkraft des letzten Beispiels verbessern und eine Reibungskraft hinzufügen.
Schwerkraft auf der Erde
Vielleicht ist dir bei diesem letzten Beispiel etwas furchtbar ungenaues aufgefallen. Je kleiner der Kreis ist, desto schneller fällt er. Das hat eine gewisse Logik, schließlich haben wir gerade festgestellt (gemäß Newtons zweitem Gesetz), dass die Beschleunigung umso größer ist, je kleiner die Masse ist.
Aber das ist nicht das, was in der realen Welt passiert. Wenn du auf die Spitze des schiefen Turms von Pisa klettern und zwei Kugeln mit unterschiedlicher Masse fallen lassen würdest, welche wird zuerst auf dem Boden aufschlagen? Der Legende nach führte Galileo 1589 genau diesen Test durch und entdeckte, dass sie mit der gleichen Beschleunigung fielen und zur gleichen Zeit auf dem Boden aufschlugen.
Warum ist das so? Wie wir später in diesem Kurs sehen werden, wird die Gravitationskraft relativ zur Masse eines Objekts berechnet. Je größer das Objekt ist, desto stärker ist die Kraft. Wenn also die Kraft nach der Masse skaliert wird, hebt sich die Masse auf, wenn die Kraft durch die Masse geteilt wird. Wir können dies in unserem Programm umsetzen, indem wir unsere erfundene Beschleunigung (aufgrund der Schwerkraft) mit der Masse multiplizieren:
for (var i = 0; i < movers.length; i++) {
gravity.set(0, 0.1 * movers[i].mass);
movers[i].applyForce(gravity);
…
}
Zwar fallen die Objekte nun mit der gleichen Geschwindigkeit, aber da die Stärke der Windkraft unabhängig von der Masse ist, hebt sich die Masse nicht auf, und die kleineren Objekte werden weiterhin schneller nach rechts beschleunigt.
Kräfte zu erfinden bringt uns bis hier her. Wie Welt von ProcessingJS ist eine imaginäre Welt und du bist ihr Meister. Was auch immer du für eine angemessene Kraft hältst, ist genau dies: die Kraft die sie sein soll. Dennoch kann der Punkt kommen, an dem du dich fragst: “Aber wie funktioniert das wirklich alles?”
Schau dir ein Physik-Lehrbuch an und du wirst darin viele Diagramme und Formeln finden, welche die verschiedenen Kräfte wie Schwerkraft, Elektromagnetismus, Reibung, Spannung, Elastizität und vieles mehr beschreiben. Oder hey, schau dir doch die Physiklektionen auf der Khan Academy an. In diesem Kapitel werden wir uns die zwei Kräfte Reibung und Schwerkraft anschauen. Wir wollen hier nicht sagen, dass die Reibung und Schwerkraft fundamentale Kräfte sind, welche du immer in deinen Programmen mit ProcessingJS verwenden musst. Vielmehr wollen wir diese beiden Kräfte als Beispiele für den folgenden Prozess verwenden:
- Das Konzept hinter einer Kraft verstehen
- Die Formeln der Kraft in zwei Teile zerlegen:
- Wie berechnen wir die Richtung der Kraft?
- Wie berechnen wir die Größe der Kraft?
- Die Formel in ProcessingJS-Code umsetzen, welcher einen
PVector
berechnet und diesen der FunktionapplyForce()
vonMover
übergibt.
Wenn wir die oben beschriebenen Schritte mit zwei Kräften umsetzen können, dann hast du hoffentlich, auch wenn du mal um 3 Uhr morgens nach der “schwachen Kraft von Atomkernen” googelst, die Kenntnisse, das Gefundene in ProcessingJS zu implementieren.
Mit Formeln umgehen
OK, wir werden gleich eine Formel für die Reibung schreiben. In diesem Kurs sind schon häufiger Formeln vorgekommen, wir haben uns z.B. schon mit Newtons zweitem Gesetz beschäftigt: F, with, vector, on top, equals, M, dot, A, with, vector, on top (oder Kraft = Masse * Beschleinigung). Wir haben für diese Formel nicht viel Zeit aufgewendet, da sie sehr schön und einfach ist. Nichtsdestotrotz ist es eine gruselige Welt da draußen. Betrachte doch nur einmal die Gleichung für die Normalverteilung, welche wir uns bei der Einleitung angesehen haben (damals ohne diese Formel zu betrachten).
Hier können wir erkennen können, dass in Formeln häufig ganz viele Symbole (oft griechische Buchstaben) verwendet werden. Schauen wir uns nun aber die Formel für die Reibung an.
Falls du seit längerem keine Formel aus der Mathematik oder Physik angeschaut hast, müssen wir zuerst ein paar wichtige Punkte wiederholen.
- Berechne die rechte Seite und weise das Ergebnis der linken Seite zu. Das ist genau wie im Code! Und das tun wir jetzt: rechte Seite berechnen, der linken Seite zuweisen. Hier im oberen Fall möchten wir die Reibungskraft ermitteln—die linke Seite zeigt, was wir berechnen wollen und die rechte Seite zeigt, was zu tun ist.
- Reden wir über einen Vektor oder ein Skalar? Es ist wichtig zu wissen, dass wir in manchen Fällen einen Vektor betrachten; in anderen ein Skalar. Beispielsweise ist hier die Reibungskraft ein Vektor. Das erkennen wir am Pfeil über dem Wort “Friction.” Sie hat eine Länge und eine Richtung. Die rechte Seite der Gleichung beinhaltet auch einen Vektor, gekennzeichnet mit dem v, with, hat, on top-Symbol, welcher hier für den Einheitsvektor für die Geschwindigkeit steht.
- Wenn Symbole nebeneinander geschrieben werden, bedeutet das, dass diese multipliziert werden. Die Formel oben besitzt also vier Elemente:
-1
, µ, N, und v, with, hat, on top. Diese werden miteinander multipliziert und wir können die Formel lesen als: F, r, i, c, t, i, o, n, with, vector, on top, equals, minus, µ, N, v, with, hat, on top
Reibung
Beginnen wir mit der Reibung und befolgen unsere Schritte.
Reibung ist eine dissipative Kraft. Eine dissipative Kraft ist eine, bei welcher sich die Gesamtenergie eines Systems verringert, wenn ein Objekt in Bewegung ist. Nehmen wir an, du fährst ein Auto. Wenn du mit einem Fuß aufs Bremspedal drückst, verwenden die Bremsen des Autos Reibung, um die Bewegung der Reifen zu verlangsamen. Kinetische Energie (Bewegung) wird in thermische Energie (Wärme) umgewandelt. Immer wenn zwei Oberflächen in Kontakt kommen, ergibt sich Reibung. Ein vollständiges Modell der Reibung würde die Haftreibung (ein Körper im Ruhezustand gegen eine Fläche) und kinetische Reibung (ein Körper in Bewegung gegen eine Fläche) differenzieren, aber für unsere Zwecke reicht es, wenn wir nur die kinetische Reibung betrachten.
Hier die Formel für Reibung zusammen mit einer Abbildung:
Jetzt liegt es an uns, diese Formel in zwei Komponenten zu trennen, welche die Richtung wie auch den Betrag der Reibung bestimmen. In der Abbildung oben, können wir sehen, dass die Reibung in die entgegengesetzte Richtung der Geschwindigkeit zeigt. Tatsächlich ist dies der Teil der Formel, welcher minus, 1, times, v, with, hat, on top, oder -1 mal den Einheitsvektor der Geschwindigkeit lautet. In ProcessingJS würde dies bedeuten, den Geschwindigkeitsvektor zu nehmen, ihn zu normieren und mit -1 zu multiplizieren.
var friction = velocity.get();
friction.normalize();
// Let’s figure out the direction of the friction force
// (a unit vector in the opposite direction of velocity)
friction.mult(-1);
Beachte die zwei zusätzlichen Schritte hier. Zuerst ist es wichtig eine Kopie des Geschwindigkeitsvektors zu erstellen, da wir die Bewegungsrichtung des Objektes nicht versehentlich umkehren wollen. Danach normieren wir den Vektor. Dies machen wir, da der Betrag der Reibung nicht mit der Geschwindigkeit der Bewegung zusammenhängt und wir mit einem Reibungsvektor von einem Betrag von 1 beginnen wollen, damit er einfach skaliert.
Gemäß der Formel ist der Betrag mu, times, N. μ, der griechische Buchstabe mu (ausgesprochen ald “mü”), wird hier für den Reibungskoeffizienten verwendet. Der Reibungskoeffizient definiert die Stärke der Reibungskraft für eine bestimmte Fläche. Je größer er ist, umso stärker ist die Reibung, je kleiner, umso schwächer. Ein Eisblock zum Beispiel hat einen viel kleineren Reibungskoeffizienten als Sandpapier. Da wir uns in einer ProcessingJS-Simulationswelt befinden, können wir den Koeffizienten beliebig wählen, basierend darauf wie viel Reibung wir simulieren wollen.
var c = 0.1;
Nun zum zweiten Teil:
N
. Dieses N
bezieht sich auf die Normalkraft, die Kontaktkraft, die durch sich berührende Objekte ausgeübt wird. Genauer gesagt, ist es die senkrechte Komponente dieser Kontaktkraft.Stelle dir ein Fahrzeug vor, das auf einer Straße fährt. Das Fahrzeug drückt nach unten gegen die Straße, und das dritte Newtonsche Gesetz besagt, dass die Straße wiederum gegen das Fahrzeug zurückdrückt. Das ist die Normalkraft. Für den einfachen Fall eines sich horizontal bewegenden Objekts ist die Normalkraft gleich der Masse multipliziert mit der Gravitationskraft, F, start subscript, n, end subscript, equals, m, g. Das bedeutet, dass ein leichter Sportwagen eine geringere Normalkraft ausübt und somit weniger Reibung erfährt als ein massiver Sattelschlepper.
Im Schlittel-Bild oben bewegt sich das Objekt auf einer geneigten Oberfläche. In diesem Fall ist die Berechnung der Normalkraft etwas komplizierter, da sie nicht in die gleiche Richtung wie die Schwerkraft zeigt. Dafür müssen wir etwas über Winkel und Trigonometrie wissen.
Für den Moment ist unser Ziel eine "gut genug" Simulation für unsere ProcessingJS-Programme, keine perfekte Simulation. Zum Beispiel können wir die Reibung mit der Annahme berechnen, dass die Normalkraft immer eine Größe von 1\ hat. Unser
N
ist dann einfach:var normal = 1;
Wenn wir im nächsten Kapitel in die Trigonometrie eintauchen, werden wir uns diese Details nochmals anschauen, um unser Beispiel mit der Reibung etwas genauer zu machen.
Nun da wir sowohl den Betrag und die Richtung für die Reibung haben, können wir alles zusammensetzen…
var c = 0{,}01;
var normal = 1;
var frictionMag = c * normal;
var friction = movers[i].velocity.get();
friction.mult(-1);
friction.normalize();
friction.mult(frictionMag);
…und unserem Beispiel für “Kräfte”, in welchem viele Objekte Wind, Gravitation und nun auch der Reibung ausgesetzt sind, hinzufügen:
Wenn du das Program für eine Zeitlang beobachtest, wirst du bemerken, dass sich die Kreise immer weniger und weniger bewegen, bis sie schließlich an einer Stelle festhängen. Da die Reibung fortlaufend in der entgegengesetzten Richtung zur Bewegung auf das Objekt wirkt, verlangsamt sich das Objekt immer weiter. Das kann entweder eine nützliche Technik oder ein Problem sein, je nachdem was das Ziel deiner Simulation ist.
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.