Physically-based Simulation in Computer Graphics - Exam.pdf

Physically-based Simulation in Computer Graphics - Exam
Physically-based Simulation in Computer Graphics - Exam Aufgabe 1) Du arbeitest an einem Projekt zur Simulation realistischer physikalischer Phänomene in einer virtuellen Umgebung. Dein Ziel ist es, ein realistisches Verhalten eines mechanischen Systems zu simulieren, das verschiedenen Kräften ausgesetzt ist. Dabei musst Du die numerische Integration und Methoden wie die Finite-Differenzen-Methode...

© StudySmarter 2024, all rights reserved.

Physically-based Simulation in Computer Graphics - Exam

Aufgabe 1)

Du arbeitest an einem Projekt zur Simulation realistischer physikalischer Phänomene in einer virtuellen Umgebung. Dein Ziel ist es, ein realistisches Verhalten eines mechanischen Systems zu simulieren, das verschiedenen Kräften ausgesetzt ist. Dabei musst Du die numerische Integration und Methoden wie die Finite-Differenzen-Methode sowie relevante physikalische Gesetze anwenden.

a)

Erkläre, wie die Newton'schen Gesetze auf ein einfaches Pendelsystem angewendet werden können. Definiere die relevanten Kräfte und stelle die Bewegungsgleichungen auf, die das Verhalten des Pendels beschreiben. Berechne die Position des Pendels zu einem bestimmten Zeitpunkt unter Verwendung der Finite-Differenzen-Methode. Du kannst annehmen, dass die Masse des Pendels 1 kg beträgt, die Länge 2 m und der Winkel der Auslenkung bei t=0 bei 0.1 rad liegt. Seien die relevanten Kräfte die Gravitationskraft und die Rückstellkraft aufgrund der Pendellänge. Die Bewegungsgleichungen lassen sich ableiten aus \[ m \frac{d^2\theta}{dt^2} + c \frac{d\theta}{dt} + \frac{g}{l} \theta = 0 \] wobei m = 1kg die Masse, c der Dämpfungskoeffizient, g = 9.81 \frac{m}{s^2} und l = 2m die Pendellänge ist. Starte mit den folgenden Werten und berechne die Position des Pendels nach 0.5 Sekunden unter Verwendung eines Zeitschrittes von dt = 0.01s.

Lösung:

Um die Newton’schen Gesetze auf ein einfaches Pendelsystem anzuwenden, müssen wir die relevanten Kräfte identifizieren und die Bewegung des Systems durch Differentialgleichungen beschreiben.

  • Gravitationskraft: Dies ist die Kraft, die durch die Erdanziehung auf die Masse des Pendels wirkt. Sie kann als \( F_g = m \times g \times \text{sin}(\theta) \) ausgedrückt werden, wobei \( m \) die Masse des Pendels und \( g \) die Erdbeschleunigung ist.
  • Rückstellkraft: Dies ist die Kraft, die durch die Pendellänge verursacht wird und versucht, das Pendel in seine Ruhelage zurückzubringen. Sie kann durch \( F_r = -\frac{m \times g}{l} \times \theta \) beschrieben werden, wobei \( l\) die Länge des Pendels ist.

Unter Berücksichtigung dieser beiden Kräfte kann die Bewegungsgleichung des Pendels als eine Differentialgleichung zweiter Ordnung ausgedrückt werden:

\( m \frac{d^2\theta}{dt^2} + c \frac{d\theta}{dt} + \frac{g}{l} \theta = 0 \)

Für unser Pendelsystem werden die Werte wie folgt gegeben:

  • Masse (m): 1 kg
  • Dämpfungskoeffizient (c): 0
  • Gravitationsbeschleunigung (g): 9.81 m/s²
  • Länge des Pendels (l): 2 m

Die Differentialgleichung vereinfacht sich damit zu:

\( \frac{d^2\theta}{dt^2} + \frac{9.81}{2} \theta = 0 \)

Um die Position des Pendels nach 0.5 Sekunden mithilfe der Finite-Differenzen-Methode zu berechnen, können wir die Bewegung in kleinen Zeitschritten \( \text{dt} = 0.01 \) Näherungsweise berechnen. Die Anfangsbedingungen sind:

  • \( \theta_0 = 0.1 \) rad bei \( t=0 \)
  • \( \frac{d\theta}{dt} \bigg|_{t=0} = 0 \) (Startgeschwindigkeit)

Die Finite-Differenzen-Methode verwendet die Näherungen:

\( \frac{d^2\theta}{dt^2} \bigg|_{t=0} \approx \frac{\theta_{t+\text{dt}} - 2\theta_t + \theta_{t-\text{dt}}}{\text{dt}^2} \)

Deshalb ergibt sich:

\( \theta_{t+\text{dt}} = 2\theta_t - \theta_{t-\text{dt}} + \text{dt}^2 \times \frac{9.81}{2} \theta \)

Schrittweise Berechnung (für die ersten drei Schritte):

  • Initialisierung: \( \theta(0) = 0.1 \) und \( \theta' = 0\)
  • Erster Schritt: \( \theta(\text{dt}) = \theta(0) + \text{dt} \times \theta' = 0.1\)
  • Zweiter Schritt: \( \theta(2\text{dt}) = 2\theta(\text{dt}) - \theta(0) + \text{dt}^2 \times \frac{9.81}{2} \times \theta(0) \)

Aufgrund der Struktur endet das wiederholend.

b)

Beschreibe die Unterschiede zwischen der Finite-Differenzen-Methode (FDM) und der Finite-Elemente-Methode (FEM). Erkläre, in welchem Szenario Du die FEM bevorzugen würdest und warum. Beschreibe ein Beispiel für eine Anwendung der FEM in der Simulation physikalischer Phänomene, insbesondere im Bereich der Elastizität und des Fließverhaltens von Flüssigkeiten.

Lösung:

Die Finite-Differenzen-Methode (FDM) und die Finite-Elemente-Methode (FEM) sind zwei numerische Techniken zur Lösung von Differentialgleichungen, aber sie unterscheiden sich in ihrer Herangehensweise und ihren Anwendungsmöglichkeiten. Hier sind die Hauptunterschiede:

  • Finite-Differenzen-Methode (FDM):
    • Die FDM wandelt Differentialgleichungen durch Approximation von Ableitungen mit Differenzenquotienten in algebraische Gleichungen um.
    • Die Methode teilt das gesamte Berechnungsgebiet in ein regelmäßiges Gitter (Grid) auf und berechnet die Werte der Funktion an den Gitterpunkten.
    • Sie ist besonders effektiv bei einfachen Geometrien und Problemen, die sich gut auf ein regelmäßiges Gitter abbilden lassen.
    • Die FDM ist in der Regel einfacher zu implementieren und effizienter bei geringeren Speicheranforderungen im Vergleich zur FEM.
  • Finite-Elemente-Methode (FEM):
    • Die FEM zerlegt das Berechnungsgebiet in eine Menge von begrenzten Elementen und verwendet Interpolationsfunktionen, um die Lösung innerhalb jedes Elements zu approximieren.
    • Sie ist flexibler in der Handhabung komplexer Geometrien und Randbedingungen. Unterschiedliche Formen von Elementen (z.B. Dreiecke, Tetraeder) können verwendet werden.
    • Die Methode kann leichter mit nicht-linearen Problemen und heterogenen Materialien umgehen.
    • Die FEM erfordert in der Regel mehr Rechenleistung und Speicherplatz als die FDM, eignet sich jedoch besser für komplexe und hochgenaue Simulationen.

Szenario, in dem die FEM bevorzugt wird:

Die FEM würde in Szenarien bevorzugt, in denen die problematischen Geometrien komplex und unregelmäßig sind, oder wenn heterogene Materialien und nicht-lineare Wechselwirkungen vorliegen. Zum Beispiel:

  • Strukturanalysen im Bauingenieurwesen, wo komplexe Bauteile und Strukturen analysiert werden müssen.
  • Simulationen im Maschinenbau, bei denen detaillierte Analysen von Spannungen und Dehnungen in komplexen Bauteilen erforderlich sind.

Beispiel für eine Anwendung der FEM:

Ein Beispiel für die Anwendung der FEM ist die Simulation des elastischen Verhaltens eines Brückenträgers unter Last:

  • Der Brückenträger wird in eine Reihe von Finiten Elementen zerlegt, die durch Knotenpunkte verbunden sind.
  • Belastungen (z.B. das Gewicht von Fahrzeugen) werden auf die Knotenpunkte angewendet.
  • Die FEM ermöglicht das Berechnen von Verschiebungen, Spannungen und Dehnungen im gesamten Brückenträger.

Ein weiteres Beispiel ist die Simulation des Fließverhaltens von Flüssigkeiten in komplexen Geometrien, wie z.B. in der Simulation von Blutfluss in Arterien:

  • Die Arterie wird in eine Reihe von Finite Elemente unterteilt.
  • Die FEM wird verwendet, um die Navier-Stokes-Gleichungen zu lösen, die das Fließen der Flüssigkeit beschreiben.
  • Diese Simulation erlaubt die Analyse der Fließmuster und der Wechselwirkungen mit der Arterienwand.

Aufgabe 2)

Newtonsche Mechanik und Grundgleichungen der Bewegung: Newtonsche Mechanik beschreibt die Bewegung von Körpern basierend auf Kräften. Grundgleichungen der Bewegung leiten sich aus den Newtonschen Gesetzen ab.

  • 1. Newtonsches Gesetz (Trägheitsgesetz): Ein Körper bleibt in Ruhe oder bewegt sich geradlinig gleichförmig, solange keine äußere Kraft auf ihn wirkt.
  • 2. Newtonsches Gesetz (Aktionsprinzip): \[ F = ma \] Kraft ist das Produkt aus Masse \( m \) und Beschleunigung \( a \).
  • 3. Newtonsches Gesetz (Reaktionsprinzip): Übt ein Körper A auf einen Körper B eine Kraft aus, so übt Körper B auf Körper A eine gleich große, entgegengesetzte Kraft aus.
  • Bewegungsgleichungen: \[ s(t) = s_0 + v_0t + \frac{1}{2}at^2 \] (Ort), \[ v(t) = v_0 + at \] (Geschwindigkeit).
  • Kraftresultierende: Summe aller einwirkenden Kräfte bestimmt die Gesamtbeschleunigung.

b)

Angenommen, das Objekt startet aus der Ruhe (d.h., die Anfangsgeschwindigkeit \( v_0 \) ist 0). Berechne die Geschwindigkeit des Objekts nach 10 Sekunden.

Lösung:

Newtonsche Mechanik und Grundgleichungen der Bewegung: Newtonsche Mechanik beschreibt die Bewegung von Körpern basierend auf Kräften. Grundgleichungen der Bewegung leiten sich aus den Newtonschen Gesetzen ab.

  • 1. Newtonsches Gesetz (Trägheitsgesetz): Ein Körper bleibt in Ruhe oder bewegt sich geradlinig gleichförmig, solange keine äußere Kraft auf ihn wirkt.
  • 2. Newtonsches Gesetz (Aktionsprinzip):
     F = ma 
    Kraft ist das Produkt aus Masse (\textit{m}) und Beschleunigung (\textit{a}).
  • 3. Newtonsches Gesetz (Reaktionsprinzip): Übt ein Körper A auf einen Körper B eine Kraft aus, so übt Körper B auf Körper A eine gleich große, entgegengesetzte Kraft aus.
  • Bewegungsgleichungen:
     s(t) = s_0 + v_0t + \frac{1}{2}at^2 
    (Ort),
     v(t) = v_0 + at 
    (Geschwindigkeit).
  • Kraftresultierende: Summe aller einwirkenden Kräfte bestimmt die Gesamtbeschleunigung.
Gegeben sei ein Objekt der Masse m=5 kg. Es wird horizontal mit einer konstanten Kraft F = 25 N bewegt.
  • Angenommen, das Objekt startet aus der Ruhe (d.h., die Anfangsgeschwindigkeit \( v_0 \) ist 0). Berechne die Geschwindigkeit des Objekts nach 10 Sekunden.
Um die Geschwindigkeit des Objekts nach 10 Sekunden zu berechnen, verwenden wir die Bewegungsgleichung für die Geschwindigkeit:
 v(t) = v_0 + at 
  • Gegeben:
    • Anfangsgeschwindigkeit, \( v_0 = 0 \)
    • Beschleunigung, \( a = 5 \text{ m/s}^2 \)
    • Zeit, \( t = 10 \text{ s} \)
  • Setzen wir die gegebenen Werte in die Gleichung ein:
 v(10) = 0 + 5 \text{ m/s}^2 \times 10 \text{ s} 
  • Ergebnis:
  •  v(10) = 50 \text{ m/s} 
    • Also beträgt die Geschwindigkeit des Objekts nach 10 Sekunden 50 m/s.

    d)

    Falls eine zusätzliche Reibungskraft F_r = 5 N entgegen der Bewegungsrichtung wirkt, wie verändert sich die Beschleunigung und nach welchem Prinzip kannst Du dies bestimmen?

    Lösung:

    Newtonsche Mechanik und Grundgleichungen der Bewegung: Newtonsche Mechanik beschreibt die Bewegung von Körpern basierend auf Kräften. Grundgleichungen der Bewegung leiten sich aus den Newtonschen Gesetzen ab.

    • 1. Newtonsches Gesetz (Trägheitsgesetz): Ein Körper bleibt in Ruhe oder bewegt sich geradlinig gleichförmig, solange keine äußere Kraft auf ihn wirkt.
    • 2. Newtonsches Gesetz (Aktionsprinzip):
       F = ma 
      Kraft ist das Produkt aus Masse (\( m \)) und Beschleunigung (\( a \)).
    • 3. Newtonsches Gesetz (Reaktionsprinzip): Übt ein Körper A auf einen Körper B eine Kraft aus, so übt Körper B auf Körper A eine gleich große, entgegengesetzte Kraft aus.
    • Bewegungsgleichungen:
       s(t) = s_0 + v_0t + \frac{1}{2}at^2 
      (Ort),
       v(t) = v_0 + at 
      (Geschwindigkeit).
    • Kraftresultierende: Summe aller einwirkenden Kräfte bestimmt die Gesamtbeschleunigung.
    Gegeben sei ein Objekt der Masse m=5 kg. Es wird horizontal mit einer konstanten Kraft F = 25 N bewegt. Falls eine zusätzliche Reibungskraft F_r = 5 N entgegen der Bewegungsrichtung wirkt, wie verändert sich die Beschleunigung und nach welchem Prinzip kannst Du dies bestimmen?
    • Um die veränderte Beschleunigung zu bestimmen, nutzen wir das 2. Newtonsche Gesetz (Aktionsprinzip), welches besagt:
     F = ma 
  • Dabei ist die resultierende Kraft (\( F_{res} \)) die Differenz zwischen der angewendeten Kraft und der Reibungskraft:
  •  F_{res} = F - F_r 
    • Gegeben:
      • Kraft: \( F = 25 \text{ N} \)
      • Reibungskraft: \( F_r = 5 \text{ N} \)
      • Masse: \( m = 5 \text{ kg} \)
    • Die resultierende Kraft berechnen wir wie folgt:
     F_{res} = 25 \text{ N} - 5 \text{ N} = 20 \text{ N} 
  • Nun berechnen wir die neue Beschleunigung (\( a \)) mit der resultierenden Kraft:
  •  a = \frac{F_{res}}{m} 
  • Setzen wir die gegebenen Werte ein:
  •  a = \frac{20 \text{ N}}{5 \text{ kg}} = 4 \text{ m/s}^2 
    • Also verringert sich die Beschleunigung auf 4 m/s² aufgrund der zusätzlichen Reibungskraft. Dieses Ergebnis basiert auf dem 2. Newtonschen Gesetz (Aktionsprinzip).

    Aufgabe 3)

    In der numerischen Integration spielen verschiedene Verfahren eine zentrale Rolle zur Lösung von Differentialgleichungen, insbesondere im Bereich der Computer Graphics für die Modellierung von Bewegungen und physikalischen Systemen. Zu den gängigen Methoden zählen das Euler-Verfahren, das verbesserte Euler-Verfahren (Heun-Verfahren) sowie die Runge-Kutta-Methoden höherer Ordnung, wie das Runge-Kutta-Verfahren 4. Ordnung (RK4).

    a)

    Betrachte das einfache Euler-Verfahren und das Runge-Kutta 4. Ordnung (RK4) Verfahren zur Lösung einer Differentialgleichung. Implementiere beide Verfahren in Python, um die Lösung der folgenden Differentialgleichung zu berechnen:

    \

    \[\frac{dy}{dt} = -2ty, \quad y(0) = 1\]

    Annahme hier ist: \( t \in [0, 1] \) und die Schrittweite \( h = 0,1 \).

    Vergleiche die Ergebnisse beider Verfahren und diskutiere die Unterschiede in Bezug auf Genauigkeit und Rechenaufwand.

    import numpy as npdef euler_method(f, y0, t, h):    n = int(len(t))    y = np.zeros(n)    y[0] = y0    for i in range(1, n):        y[i] = y[i-1] + h * f(t[i-1], y[i-1])    return ydef runge_kutta_4(f, y0, t, h):    n = int(len(t))    y = np.zeros(n)    y[0] = y0    for i in range(1, n):        k1 = f(t[i-1], y[i-1])        k2 = f(t[i-1] + h/2, y[i-1] + h/2 * k1)        k3 = f(t[i-1] + h/2, y[i-1] + h/2 * k2)        k4 = f(t[i-1] + h, y[i-1] + h * k3)        y[i] = y[i-1] + h/6 * (k1 + 2*k2 + 2*k3 + k4)    return ydef main():    f = lambda t, y: -2*t*y    y0 = 1    t = np.arange(0, 1.1, 0.1)    h = 0.1    y_euler = euler_method(f, y0, t, h)    y_rk4 = runge_kutta_4(f, y0, t, h)    print('Euler Method:', y_euler)    print('Runge-Kutta 4th Order Method:', y_rk4)if __name__ == '__main__':    main()

    Lösung:

    Um die Differentialgleichung \(\frac{dy}{dt} = -2ty, \quad y(0) = 1\) mit dem einfachen Euler-Verfahren und dem Runge-Kutta 4. Ordnung (RK4) zu lösen, kannst Du die folgende Python-Implementierung benutzen:

    import numpy as npdef euler_method(f, y0, t, h):    n = int(len(t))    y = np.zeros(n)    y[0] = y0    for i in range(1, n):        y[i] = y[i-1] + h * f(t[i-1], y[i-1])    return ydef runge_kutta_4(f, y0, t, h):    n = int(len(t))    y = np.zeros(n)    y[0] = y0    for i in range(1, n):        k1 = f(t[i-1], y[i-1])        k2 = f(t[i-1] + h/2, y[i-1] + h/2 * k1)        k3 = f(t[i-1] + h/2, y[i-1] + h/2 * k2)        k4 = f(t[i-1] + h, y[i-1] + h * k3)        y[i] = y[i-1] + h/6 * (k1 + 2*k2 + 2*k3 + k4)    return ydef main():    f = lambda t, y: -2 * t * y    y0 = 1    t = np.arange(0, 1.1, 0.1)    h = 0.1    y_euler = euler_method(f, y0, t, h)    y_rk4 = runge_kutta_4(f, y0, t, h)    print('Euler Method:', y_euler)    print('Runge-Kutta 4th Order Method:', y_rk4)if __name__ == '__main__':    main()

    Im obigen Code:

    • euler_method implementiert das Euler-Verfahren.
    • runge_kutta_4 implementiert das Runge-Kutta 4. Ordnung (RK4) Verfahren.
    • main definiert die Differentialgleichung und die Anfangsbedingungen und ruft beide Methoden auf.

    Vergleich der Ergebnisse

    Die Ausgabe des Programms zeigt die Lösungen der Differentialgleichung für beide Methoden. Der Unterschied in der Genauigkeit und dem Rechenaufwand ergibt sich aus der Art der Methoden:

    • Euler-Verfahren: Einfach zu implementieren und weniger rechenintensiv, jedoch weniger genau, besonders bei größeren Schrittweiten.
    • Runge-Kutta 4. Ordnung: Komplexer in der Implementierung und rechenintensiver, aber wesentlich genauer, da es höhere Ordnungen der Ableitung berücksichtigt.

    Durch den Vergleich der numerischen Ergebnisse kannst Du erkennen, dass das RK4-Verfahren in der Regel näher an der genauen Lösung liegt als das Euler-Verfahren, insbesondere bei gleicher Schrittweite.

    b)

    Berechne analytisch die exakte Lösung der Differentialgleichung

    \[\frac{dy}{dt} = -2ty, \quad y(0) = 1\]

    und vergleiche sie anschließend mit den Ergebnissen der numerischen Methoden (Euler und RK4) für \( t \in [0, 1] \) und \( h = 0,1 \). Diskutiere die Genauigkeit der beiden numerischen Verfahren im Vergleich zur exakten Lösung.

    Hinweis: Die analytische Lösung lautet:

    \[ y(t) = e^{-t^2} \]

    Lösung:

    Um die Differentialgleichung \(\frac{dy}{dt} = -2ty, \quad y(0) = 1\) analytisch zu lösen, gehen wir wie folgt vor:

    Analytische Lösung

      • Wir haben die Differentialgleichung:
      • \(\frac{dy}{dt} = -2ty\)
      • Dies ist eine trennbare Differentialgleichung. Wir können die Gleichung umstellen und integrieren:
      • \( \frac{dy}{y} = -2t dt \)
      • Integrieren beideseits:
      • \( \int \frac{1}{y} dy = \int -2t dt \)
      • Ergibt:
      • \( \ln |y| = -t^2 + C \)
      • Exponentiieren beideseits:
      • \( y = e^{-t^2 + C} = e^C e^{-t^2} \)
      • Setze die Anfangsbedingung y(0) = 1:
      • \( y(0) = e^C = 1 \Rightarrow e^C = 1 \Rightarrow C = 0 \)
      • Die exakte Lösung lautet:
      • \( y(t) = e^{-t^2} \)

      Wir können diese analytische Lösung nun mit den numerischen Lösungen vergleichen, die wir mit dem Euler-Verfahren und dem Runge-Kutta-Verfahren 4. Ordnung (RK4) in der vorherigen Implementierung berechnet haben.

      Berechnung und Vergleich

      • Berechne die Werte der analytischen Lösung für t in \([0, 1]\) mit Schrittweite h = 0,1:
    import numpy as npt = np.arange(0, 1.1, 0.1)analytical_solution = np.exp(-t**2)print('Analytical Solution:', analytical_solution)def euler_method(f, y0, t, h):    n = len(t)    y = np.zeros(n)    y[0] = y0    for i in range(1, n):        y[i] = y[i-1] + h * f(t[i-1], y[i-1])    return ydef runge_kutta_4(f, y0, t, h):    n = len(t)    y = np.zeros(n)    y[0] = y0    for i in range(1, n):        k1 = f(t[i-1], y[i-1])        k2 = f(t[i-1] + h/2, y[i-1] + h/2 * k1)        k3 = f(t[i-1] + h/2, y[i-1] + h/2 * k2)        k4 = f(t[i-1] + h, y[i-1] + h * k3)        y[i] = y[i-1] + h/6 * (k1 + 2*k2 + 2*k3 + k4)    return ydef f(t, y):    return -2 * t * yy0 = 1t = np.arange(0, 1.1, 0.1)h = 0.1y_euler = euler_method(f, y0, t, h)y_rk4 = runge_kutta_4(f, y0, t, h)print('Euler Method:', y_euler)print('Runge-Kutta 4th Order Method:', y_rk4)print('Analytical Solution:', analytical_solution)
    • Vergleich der Ergebnisse:

    Diskussion der Genauigkeit

    • Die analytische Lösung \( y(t) = e^{-t^2} \) stellt die exakte Lösung des Problems dar.
    • Das Euler-Verfahren liefert eine weniger genaue Lösung, insbesondere bei größeren Schrittweiten. Dies liegt daran, dass das Euler-Verfahren nur die erste Ableitung am Anfang des Intervalls berücksichtigt.
    • Das Runge-Kutta-Verfahren 4. Ordnung (RK4) ist wesentlich genauer, da es höhere Ordnungen der Ableitung berücksichtigt und somit besser die Krümmung der Lösung approximiert.
    • Durch den Vergleich der numerischen Ergebnisse mit der analytischen Lösung kannst Du erkennen, dass das RK4-Verfahren in der Regel näher an der exakten Lösung liegt als das Euler-Verfahren.
    • Durch den Vergleich der numerischen Ergebnisse kannst Du erkennen, dass das RK4-Verfahren in der Regel näher an der genauen Lösung liegt als das Euler-Verfahren, insbesondere bei gleicher Schrittweite:
    • Ergebnis: Die Implementierung zeigt, dass das RK4-Verfahren die exakte Lösung besser approximiert als das Euler-Verfahren

    Aufgabe 4)

    Beim Entwickeln einer Physiksimulation sollst Du eine Kollisionserkennung und -behandlung implementieren. Um die Kollisionen zwischen einfachen geometrischen Objekten wie Würfeln und Kugeln zu erkennen und zu behandeln, kann man verschiedene Techniken anwenden. Hierfür stehen Dir Bounding-Volumes, wie Axis-Aligned Bounding Box (AABB) oder Oriented Bounding Box (OBB), oder auch komplexe Datenstrukturen wie Binärraumaufteilungsbäume (BSP-Bäume) zur Verfügung. Nach der Erkennung einer Kollision muss deren physische Reaktion, zum Beispiel durch impulsbasierte Reaktion und unter Berücksichtigung der Energieerhaltung, berechnet werden. Gegeben sind die Formeln für die Impulsberechnung und die Unterscheidung zwischen elastischen (e = 1) und inelastischen (e < 1) Kollisionen.Die grundlegende Formel für die Impulsberechnung lautet:\[ J = \frac{-(1+e)\vec{v}_{rel} \cdot \vec{n}}{\frac{1}{m_1} + \frac{1}{m_2}} \]Hierbei ist \( \vec{v}_{rel} \) die relative Geschwindigkeit der kollidierenden Objekte und \( \vec{n} \) die Kollisionsnormal.

    a)

    Beschreibe den Unterschied zwischen den Kollisionserkennungsmethoden Axis-Aligned Bounding Box (AABB) und Oriented Bounding Box (OBB). Wann würdest Du welche Methode anwenden und warum?

    Lösung:

    Unterschied zwischen Axis-Aligned Bounding Box (AABB) und Oriented Bounding Box (OBB)

    • Axis-Aligned Bounding Box (AABB):
      • Eine AABB ist ein minimal umschließendes Rechteck (bzw. Quader im 3D-Raum), das die Achsen des Koordinatensystems ausrichtet. Das heißt, die Seiten des Box sind parallel zu den Achsen des Koordinatensystems.
      • Dieser Ansatz ist rechnerisch sehr effizient, da nur Min/Max-Vergleiche der Koordinaten notwendig sind.
      • Nachteilig ist jedoch, dass die Box mehr Raum einnehmen kann als das eigentliche Objekt, insbesondere wenn dieses gedreht wird. Dadurch kann es zu vielen unnötigen Kollisionserkennungen kommen.
    • Oriented Bounding Box (OBB):
      • Eine OBB ist ein minimal umschließendes Rechteck (bzw. Quader im 3D-Raum), das beliebig orientiert sein kann. Die Box ist so ausgerichtet, dass das umschlossene Objekt möglichst eng umschlossen wird.
      • Dieser Ansatz ist genauer in der Umhüllung des Objekts, was zu weniger unnötigen Kollisionserkennungen führt.
      • Der Nachteil ist die höhere Rechenkomplexität aufgrund der notwendigeren Rotations- und Achsentrennvergleiche.

    Anwendungsfälle

    • Axis-Aligned Bounding Box (AABB):
      • Nutze AABB, wenn die Objekte weitgehend parallel zu den Achsen ausgerichtet bleiben und die Berechnungseffizienz von höchster Priorität ist.
      • Z.B. bei einfachen Szenarien mit vielen Objekten, wo schnelle Berechnungen wichtiger als Präzision sind.
    • Oriented Bounding Box (OBB):
      • Wende OBB an, wenn die Objekte häufig rotieren oder eine präzisere Umhüllung notwendig ist, um unnötige Kollisionserkennungen zu vermeiden.
      • Z.B. bei komplexeren Szenarien oder bei genauer Physiksimulation, bei denen Präzision einen höheren Stellenwert hat.

    b)

    Angenommen, zwei Kugeln kollidieren elastisch miteinander. Die Massen der Kugeln sind \(m_1 = 2kg\) und \(m_2 = 3kg\). Die anfänglichen Geschwindigkeiten vor der Kollision sind \(\vec{v}_1 = (2, 0, 0) \) m/s und \(\vec{v}_2 = (-1, 0, 0) \) m/s. Bestimme den erzeugten Impuls \(J\) sowie die Geschwindigkeiten der beiden Kugeln nach der Kollision.

    Lösung:

    Kollision zwischen zwei Kugeln: Berechnung des Impulses und der Geschwindigkeiten nach der Kollision

    Gegeben:

    • Massen der Kugeln: \[m_1 = 2 \text{ kg}\] und\[m_2 = 3 \text{ kg}\]
    • Anfängliche Geschwindigkeiten: \[\vec{v}_1 = (2, 0, 0) \text{ m/s}\] und\[\vec{v}_2 = (-1, 0, 0) \text{ m/s}\]
    • Kollisionstyp: elastisch (\(e = 1\))

    Berechnung des Impulses \(J\)

    Zunächst benötigen wir die relative Geschwindigkeit der Kugeln vor der Kollision:

    \[\vec{v}_{rel} = \vec{v}_1 - \vec{v}_2 = (2, 0, 0) - (-1, 0, 0) = (3, 0, 0)\]

    Die Kollisionsnormal ist in diesem Fall parallel zur x-Achse, weil die Bewegung entlang der x-Achse stattfindet. Daher nehmen wir \(\vec{n} = (1, 0, 0)\).

    Nun können wir den Impuls \(J\) berechnen:

    \[J = \frac{-(1+e)\vec{v}_{rel} \cdot \vec{n}}{\frac{1}{m_1} + \frac{1}{m_2}} = \frac{-(1+1)(3 \cdot 1)}{\frac{1}{2} + \frac{1}{3}} = \frac{-2 \cdot 3}{\frac{3}{6} + \frac{2}{6}} = \frac{-6}{\frac{5}{6}} = -6 \cdot \frac{6}{5} = -7.2 \text{ Ns}\]

    Berechnung der Geschwindigkeiten nach der Kollision

    Für die elastische Kollision verwenden wir die Impulsänderung:

    1. Geschwindigkeit von Kugel 1 nach der Kollision:\[\vec{v}_1' = \vec{v}_1 + \frac{J}{m_1} \vec{n} = (2, 0, 0) + \frac{-7.2}{2} (1, 0, 0) = (2, 0, 0) + (-3.6, 0, 0) = (-1.6, 0, 0) \text{ m/s}\]
    2. Geschwindigkeit von Kugel 2 nach der Kollision:\[\vec{v}_2' = \vec{v}_2 - \frac{J}{m_2} \vec{n} = (-1, 0, 0) - \frac{-7.2}{3} (1, 0, 0) = (-1, 0, 0) + (2.4, 0, 0) = (1.4, 0, 0) \text{ m/s}\]

    Zusammenfassung:

    • Der erzeugte Impuls \(J\) beträgt -7.2 Ns.
    • Die Geschwindigkeit der ersten Kugel nach der Kollision beträgt \((-1.6, 0, 0) \text{ m/s})\).
    • Die Geschwindigkeit der zweiten Kugel nach der Kollision beträgt \((1.4, 0, 0) \text{ m/s})\).
    Sign Up

    Melde dich kostenlos an, um Zugriff auf das vollständige Dokument zu erhalten

    Mit unserer kostenlosen Lernplattform erhältst du Zugang zu Millionen von Dokumenten, Karteikarten und Unterlagen.

    Kostenloses Konto erstellen

    Du hast bereits ein Konto? Anmelden