Advertisement
  1. Code
  2. Games

Schwerkraft in Aktion

by
Read Time:11 minsLanguages:
This post is part of a series called You Do The Math.
Euclidean Vectors in Flash
Hit the Target With a Deadly Homing Missile

German (Deutsch) translation by Nikol Angelowa (you can also view the original English article)

Die Untersuchung von Kräften ist von zentralem Interesse für die Dynamik, die Untersuchung von Bewegungsursachen und Bewegungsänderungen. Die Gravitationskraft ist ein Beispiel; Dies ist es, was dazu führt, dass sich Satelliten um Planeten drehen und wir am Boden bleiben.

In diesem Tutorial erstellen wir eine Simulation eines solchen Phänomens und können Partikel in der Szene beobachten, experimentieren und damit spielen.

Unter allen erzeugten Partikeln zieht ein Hauptpartikel andere an. Wenn sich diese Partikel in Richtung des Hauptpartikels bewegen, können Benutzer auf dieses Hauptpartikel klicken, um es herumzuziehen, wodurch diese Partikel ihren Kurs umleiten. Diese Partikel hören auf, sich zu bewegen, wenn sie mit der Kante der Hauptkugel kollidieren, aber sie überlappen sich nicht.

Die Struktur dieses Tutorials ist so angeordnet, dass eine kurze Theorie in Physik geliefert wird, bevor die Implementierung der Simulation eingeführt wird. Genießen!


Vorschau des Endergebnisses

Werfen wir einen Blick auf das Endergebnis, auf das wir hinarbeiten werden:

Klicken und ziehen Sie den großen grünen Kreis, um ihn zu verschieben, und beobachten Sie, wie die kleinen blauen Kreise reagieren.


Schritt 1: Gravitationskraft, Formel

Formula of attractive forceFormula of attractive forceFormula of attractive force

Zunächst ein Physik-Vorwort. Die anziehende Gravitationskraft zwischen zwei beliebigen Objekten wird durch die folgende Formel ausgedrückt:

F: Anziehungskraft, die von auf das interessierende Objekt (p2) ausgeübt wird ein beliebiges Teilchen (p1).

G: Gravitationskonstante

m1: Masse von p1

m2: Masse von p2

r: Abstand zwischen p1 und p2

Beachten Sie insbesondere Folgendes:

  1. Die Beziehung zwischen Schwerkraft und Entfernung: F ist umgekehrt proportional zum Quadrat der Entfernung, die die beiden Teilchen trennt. Dies bedeutet, je näher A und B beieinander liegen, desto höher ist die Anziehungskraft zwischen ihnen und umgekehrt. Wenn Sie den Abstand verdoppeln, sinkt die Kraft auf ein Viertel ihres ursprünglichen Wertes.
  2. Der Wert der Gravitationskonstante G beträgt wissenschaftlich 6,67259 × 10–11 N * m/ kg2. 500 ersetzt diesen Wert jedoch in der Flash-Umgebung.
  3. Wir können die Partikelbreite mit ihrer Masse in Beziehung setzen. In diesem Beispiel habe ich die Masse eines Partikels als die Hälfte seines Radius definiert.

Schritt 2: Newtons 2. Gesetz, Gleichung

Um Kraft in Kinematik umzuwandeln, müssen wir die Teilchenbeschleunigung berechnen. Die berühmte Gleichung von Sir Isaac Newton ist unten dargestellt:

formula f=maformula f=maformula f=ma

F: Gravitationskraft, die auf das interessierende Objekt ausgeübt wird (p2)

m: Masse des interessierenden Objekts (p2)

a: Beschleunigung des interessierenden Objekts (p2) unter Einfluss von F.

Hier bedeutet dies, dass eine höhere Kraft, die auf Teilchen A ausgeübt wird, zu einer höheren Beschleunigung führt (vorausgesetzt, seine Masse bleibt gleich). Diese Beschleunigung ändert die Geschwindigkeit des Partikels.


Schritt 3: Projekt starten

Die Implementierung erfolgt in FlashDevelop IDE. Erstellen Sie Ihre Projektdatei.

  1. Starten Sie ein neues Projekt, PROJEKT > NEUES PROJEKT…
  2. Wählen Sie aus dem Popup-Fenster AS3 PROJECT
  3. Nennen Sie Ihr Projekt. In meinem Fall Attraktor
  4. Wählen Sie Ihren Projektstandort

In diesem Handbuch finden Sie eine Einführung in FlashDevelop.


Schritt 4: Klassen, die Sie brauchen

Im Ordner \src\ können 4 Klassen erstellt werden: Main.as, Vector2D.as, Ball.as & Math2.as. Es ist ratsam, dass Sie alle diese Dateien aus dem Quellpaket herunterladen und versuchen, sie den Schritten zuzuordnen, um ein allgemeines Verständnis des Mechanismus zu erhalten, bevor Sie sie ändern. Ihre Rollen werden wie folgt ausgedrückt:

Klassenname Zweck der Organisation
Main.as Klasse zum visuellen Erstellen der Bälle und zum Anhängen von Animationen an Ereignisse.
Vector2D Klasse, die alle Vektormanipulationsfunktionen enthält.
Ball Eine Klasse, die Funktionen zum visuellen Erzeugen eines Balls enthält, implementiert die Dynamik und Kinematik eines Balls.
Math2 Statische Klasse, die eine Funktion enthält, die das Randomisieren der anfänglichen Position von Bällen erleichtert.

Schritt 5: Randomisieren von Werten

Lassen Sie uns zuerst über die Math2-Klasse sprechen. Die folgende Funktion hilft dabei, eine Zufallszahl innerhalb des angegebenen Bereichs zu generieren. Akzeptiert zwei Eingänge, Mindestgrenze und Höchstgrenze im Bereich.


Schritt 6: Vector2D, Getter und Setter

Der Großteil der verwendeten Mathematik befindet sich in Vector2D. In diesem Lernprogramm wird davon ausgegangen, dass die Benutzer mit der Vektoranalyse vertraut sind. Die folgenden Funktionen werden im Allgemeinen verwendet, um Vektorkomponenten abzurufen und festzulegen, sowie eine Methode zum Zurücksetzen aller Komponenten auf Null. Wenn Sie sich mit Vektoren nicht wohl fühlen, besuchen Sie auf jeden Fall einen großartigen Beitrag über euklidische Vektoren von Daniel Sidhion.


Schritt 7: Vector2D, Operationen

Die Hauptanwendungen von Vector2D liegen in den folgenden Funktionen:

  • Ermitteln Sie die Größe des Vektors
  • Ermitteln Sie den Winkel, den der Vektor in Bezug auf den Ursprung bildet
  • Erhalten Sie die Vektorrichtung des Vektors
  • Führen Sie einfache Vektoroperationen für Addition, Subtraktion und Skalar aus Multiplikation

Schritt 8: Ball.as Zeichnung

In der Ball klasse finden alle interessanten Operationen statt. Um mit unserer Animation zu beginnen, müssen wir einen Ball zeichnen und mehrere kinematik- und dynamikbezogene Variablen festlegen. Die Funktion zum Zeichnen eines Balls ist wie folgt:


Schritt 9: Ball.as private Variablen

Die verschiedenen kinematik- und dynamikbezogenen Variablen sind nachstehend aufgeführt:


Schritt 10: Ball.as Initiation

Wie der Konstruktor der Ball-Klasse genannt wird, werden Grafiken gezeichnet. Nach dem Ziehen wird der Ball zufällig auf die Bühne gelegt. Wir werden auch die privaten Variablen setzen. Alle Vektorgrößen werden ebenfalls bei 0 initialisiert, mit Ausnahme der Verschiebung, die relativ zum Ursprung gemessen wird.


Schritt 11: Ball.as Berechnung der Anziehungskraft

Wir müssen die zugrunde liegende Kraft berechnen, durch die unsere Partikel animiert werden. Ratet mal, es ist die Gravitationskraft. Die folgende Funktion hilft bei der Berechnung dieser Kraft. Beachten Sie, dass die Beschleunigung bei 5 mit einer Kappe versehen ist. Die horizontalen und vertikalen Kraftkomponenten werden mithilfe der Trigonometrie abgeleitet. Die obige Animation kann zum Verständnis der Mathematik beitragen.


Schritt 12: Ball.as Beschleunigung berechnen

Sobald der Kraftvektor erhalten wurde, können wir die resultierende Beschleunigung berechnen. Denken Sie daran, F = ma, also a = F/m.


Schritt 13: Ball.as Verschiebung berechnen

Mit der berechneten Beschleunigung können wir die resultierende Verschiebung effektiv berechnen.

Denken Sie daran, dass die berechnete Kraft tatsächlich auf der Verschiebung zwischen der Mitte der Kugeln basiert.


Schritt 14: Ball.as Implementierung der Verschiebung

Dann können wir unseren Ball durch die folgende Funktion an seinen neuen Ort bewegen. Beachten Sie, dass die berechnete Verschiebung niemals sofort auf die aktuelle Position des Balls implementiert wird. Ein solches Design soll eine Überprüfung ermöglichen: Kollisionserkennung zwischen Kugeln.

Denken Sie daran, dass die Kraft auf dem Abstand zwischen den Zentren basiert. Daher dringen die Kugeln ein und bewegen sich weiter, da die Anziehungskraft höher ist, wenn sie näher sind. Wir müssen Beschleunigung und Geschwindigkeit auf 0 zurücksetzen, wenn die Kugeln die Kante des anderen berühren. Wir müssen jedoch ein Mittel erhalten, um die Kollision zwischen zwei Kugeln zu erfassen.


Schritt 15: Ball.as Kollisionserkennung

Kollision kann leicht überprüft werden. Der Abstand zwischen zwei beliebigen Kugeln sollte nicht kleiner sein als die Summe ihrer Radien. Hier ist die Kollisionserkennungsfunktion:


Schritt 16: Ball.as Berechnen Verschieben, um abzustoßen

Calculate displacement to repel so that two overlapping balls are placed side by side without overlapping.Calculate displacement to repel so that two overlapping balls are placed side by side without overlapping.Calculate displacement to repel so that two overlapping balls are placed side by side without overlapping.

Wenn eine Kollision zwischen zwei Kugeln festgestellt wurde, überlappt sich ihr Zustand normalerweise. Wir müssen sicherstellen, dass sie nur schön am Rand sitzen und sich nicht überlappen. Wie? Wir können eine der Kugeln von der anderen weg verschieben, aber wir müssen die richtige Verschiebung berechnen, um sie zuerst anzupassen. Hier ist die Verschiebungsberechnung:


Schritt 17: Ball.as Implementierung der Verschiebung zur Abwehr

Implementing repelling displacement onto a ballImplementing repelling displacement onto a ballImplementing repelling displacement onto a ball

Nachdem wir die richtige Verschiebung berechnet haben, müssen wir sie implementieren. Die Aktion ist wie das Abstoßen eines der Bälle. Zusätzlich müssen wir zwei weitere Befehle ausführen. Denken Sie daran, wir haben es mit einer dynamischen Umgebung zu tun. Selbst nachdem wir die Verschiebung eines Balls auf die Kante eingestellt haben, wird sie durch die Beschleunigung aufgrund der Kraft und der daraus resultierenden Geschwindigkeit animiert, was zu einer unerwünschten Bewegung des Ein- und Ausstoßens führt. Wir müssen diese Werte für Beschleunigung und Geschwindigkeit auf Null zurücksetzen.


Schritt 18: Ball.as animieren

Schließlich können wir unseren Ball animieren (rendern), als würde er von einem anderen angezogen. Wenn eine Kollision erkannt wird, wird die Verschiebung so angepasst, dass sie die Kante nicht durchdringt. Dies geschieht zuerst für die Bälle, wenn sie mit der Mitte kollidieren, und dann für die Bälle, wenn sie miteinander kollidieren.


Schritt 19: Main.as Private Variablen

Weiter zu unserer letzten Klasse, Main. Die Hauptklasse wird zu Beginn des Projekts generiert. Zu den privaten Variablen gehören der eine Ball, der alle anderen anzieht, und die Anzahl der Bälle in unserer Flash-Präsentation.


Schritt 20: Main.as Draw Balls

Zunächst sollten wir die Bälle initialisieren. Es wird einen Hauptball geben, der alle anderen anzieht. Die anderen werden benannt, damit die Referenzierung später problemlos erfolgen kann.


Schritt 21: Main.as Implementieren der Ballinteraktion

Weisen Sie dann dem Hauptball Ereignisse zu, um ihn beim Klicken ziehbar zu machen und beim Loslassen anzuhalten.


Schritt 22: Main.as Animate Balls

Animierende Bälle, die von der Hauptleitung angezogen werden. Jedem Ball wird ein EnterFrame-Ereignis zugewiesen.


Schritt 23: Film testen

Drücken Sie abschließend Strg + Eingabetaste, um eine Vorschau der Animation anzuzeigen.


Abschluss

Um dieses Tutorial noch einen Schritt weiter zu bringen, können Leser dieses Projekt erweitern, indem sie andere lineare Kräfte implementieren.

In jedem Fall sind Simulationen ein großartiges Werkzeug, um Ideen zu liefern, die in einer Unterrichtsumgebung für Physik nur schwer durch einfachen Text und Bild zu erklären sind, insbesondere wenn sich der Zustand im Laufe der Zeit ändert.

Ich hoffe, dieses kleine Tutorial hilft Ihnen irgendwie. Terima kasih (das ist "Danke" in Malaysia), dass sie sich die Zeit zum Lesen genommen hat und sich darauf freut, Kommentare von anderen Lesern zu hören.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.