Advanced Games Physics
10. Kapitel

2D-Systeme gekoppelter Differentialgleichungen

Große Verbünde von Differentialgleichungen

Punktuell befestigte Netze oder Gewebe

Das Netz als eine 2D-Anordnung von Feder-Masse-Systemen ist der typische Anwendungsfall für 2D-Systeme gekoppelter Differentialgleichungen. Als Grundlage für textile Objekte ist das Netz in der Spielewelt unverzichtbar. Gibt es ein solches Netz, kann mittels geeigneter images ein textiler Stoff nachgebildet werden.

Vom Seil zum Netz ist es nur ein kleiner Schritt. Ein Netz kann aus parallelen Seilen, deren Knoten zusätzlich horizontal durch Federn verbunden sind, zusammengesetzt werden ().

Struktur und Detail eines Netzes

Abb. a) Struktur

Struktur und Detail eines Netzes

Abb. b) und Detail eines Netzes

Die Indizierung der Seile in behalten wir bei. Der Index k benennt die Knoten von oben nach unten. Neu ist der Index n, der die parallelen Seile von links nach rechts benennt. Greifen wir jetzt einen beliebigen Knoten xk,n, yk,n heraus (b)). Dann sehen wir, dass dieser Knoten zunächst die bekannten Verbindungen noch oben (xp, yp) und unten (xn, yn) hat, nun aber auch nach links (xl, yl) und (xr, yr) mit den benachbarten Knoten verbunden ist. Mit diesen neuen Verbindungen sind weitere Krafteinflüsse auf die Kraftkomponenten Fx und Fy verbunden. Da dies nur die Kräfte betrifft, kann der ganze Lösungsformalismus für die gekoppelten Differentialgleichungen von der Lösung des Seils unverändert (a) und b)) übernommen werden.

Aus den Kraftgleichungen bis des Seils werden nun die Gleichungen a) und b) des Netzes:
(a)
F x = n · [ l n l 0 · x n x l n l p l 0 · x x p l p + l r l 0 · x r x l r l l l 0 · x x l l l ]
(b)
F y = n · [ l n l 0 · y n y l n l p l 0 · y y p l p + l r l 0 · y r y l r l l l 0 · y y l l l ]
Wie Du erkennen kannst, habe ich hier die Methodik aus der Seilberechnung übernommen: Alle Beschleunigungen werden innerhalb einer Knotenberechnung vollständig berechnet. Das vereinfacht die Programmierung, da alle diese Zwischengrößen nur lokal gültig sind und nicht zwischengespeichert werden müssen. Aus dem selben Grund sind die Ortskoordinaten der umgebenden Knoten schon mit den lokalen Bezeichnungen xleft bzw. yleft, xright bzw. yright, xprevious bzw. yprevious und xnext bzw. ynext bezeichnet worden.

Da es nun im Netz K · N Knoten gibt, müssen auch K · N Differenzial­gleichungen gelöst werden. Dies erfolgt, indem zwei Schleifen zu durchlaufen sind. In der äußeren Schleife mit dem Index n werden die "Seile" angesprochen und in der inneren mit dem Index k die einzelnen Knoten ().



Abb. Listing Berechnung der Gradientenfunktion

Mehr noch als beim Seil ist den Knoten, die sich am Rande des Netzes befinden, Aufmerksamkeit zu schenken. Weil es die unterschiedlichsten Befestigungspunkte des Netzes geben kann (z.B. Tuch an Wäscheleine, Fahne an Fahnenstange, fliegendes Netz usw.) wäre es sinnlos, alle Randknoten fest zu Programmieren. Ich habe eine Methode gewählt, die die Eigenschaften jedes Knoten in einer zum Netz deckungsgleichen Matrix definiert ():

Festlegung von Knotenpositionen

Abb. Festlegung von Knotenpositionen

darin bedeuten:

Bezeichner Knotentyp Bedeutung
'f': fix (fixierter Knoten) Befestigung, Geschwindigkeitskomponenten sind gleich Null
'm': middle (mittlerer Knoten) Kräfte greifen allseitig an
't': top (oberer Knoten) keine Krafteinwirkung von oben
'b': bottom (unterer Knoten) keine Krafteinwirkung von unten
'l': left (linker Knoten) keine Krafteinwirkung von links
'r': right (rechter Knoten) keine Krafteinwirkung von rechts
'1': linke, obere Ecke keine Krafteinwirkung von oben und links
'2': rechte, obere Ecke keine Krafteinwirkung von oben und rechts
'3': rechte, untere Ecke keine Krafteinwirkung von unten und rechts
'4': linke, untere Ecke keine Krafteinwirkung von unten und links


In der Implementierung werden die jeweiligen Beschleunigungen entsprechend der in der Matrix place[K+2][N+2] festgelegten Eigenschaft über eine switch/case-Anweisung selektiv aus den Teilbeschleunigungen zusammengesetzt (). Der Sonderfall 'f' wird in einer separaten Abfrage abgehandelt, dort soll überhaupt keine Beschleunigung wirken und die Geschwindigkeits­komponenten müssen gleich Null sein.

Das Beispielprogramm zeigt ein Netz bestehend aus 10 x 10 Knoten. Jedes Segment ist im Ruhezustand 7,5 cm lang und breit.
In bekannter Weise kann die Steifigkeit der Feder-Masse-Systeme, also des Netzes, mit Hilfe der Schieberegler Eigenfrequenz f0 und Dämpfung d verändert werden. Ebenso kann die Gravitation wie gehabt zu- bzw. abgeschaltet werden. Jeder Knoten des Netzes kann mit der Maus bewegt werden. Der Button mode ermöglicht die Auswahl von drei vorprogrammierten place-Matrizen und damit unterschiedliche Gestaltungs­möglichkeiten des Netzes. Auch hier kann ein Windein­fluss geltend gemacht werden. Der Wind bläst nicht konstant, sondern nach einem vorgegebenen Rhythmus. Seine Stärke kann aber per Schieberegler verändert werden.
download processing
download p5.js
run program


Ergebnisdiskussion: Ebenso wie das Seil, ist auch das Netz nur eine erste Näherung der Realität. Grund hierfür ist, dass die Federn des Systems nicht steif genug gemacht werden können. Bei zu großer Steifigkeit verliert das System an Stabilität, was bis zum völligen Zusammenbruch der Rechnung führen kann. Mit der Dämpfung kann diesem Mangel nur bedingt abgeholfen werden.

Noch ein anderes nachteiliges Phänomen kann beobachtet werden: Nach einer Deformation des Netzes kann es vorkommen, dass einige Maschen sich nicht mehr in den Ausgangs­zustand zurück falten. Ursache hierfür ist die Geometrie der Maschen. Eine rechteckige Masche hat zwei stabile Zustände (a) u. b)), die nur durch eine äußere Kraft, etwa die Gravitation oder eine kräftige Bewegung mit der Maus, in den natürlichen der beiden stabilen Zustände gebracht werden kann. Darum ist die Behandlung von Oberflächen mit Hilfe dreieckiger Segmente (c)), die nur einen stabilen Zustand kennen, anstelle viereckiger Segmente, sinnvoll.

Einfluss der Segmentform auf Rückbildbarkeit von Maschen

Abb. Einfluss der Segmentform auf Rückbildbarkeit von Maschen

Elastische Körper

Bei einer 2D-Darstellung von Körper zu sprechen ist eigentlich ein Widerspruch. Dennoch lohnt eine approximative Behandlung eines Körpers durch ein gekoppeltes Feder-Masse-System. Wir betrachten optisch den Körper hier als flächige Projektion auf die x-y-Ebene, wohingegen die Elemente (Federn und Massen) Volumen-Elemente repräsentieren, also die Eigenschaften eines Volumen-Elements in sich vereinigen.
Im Gegensatz zu Netzen haben Körper eine Steifigkeit (der Begriff "Steifigkeit" wird auch im Zusammenhang mit ODE-Solvern verwendet, um deutlich zu machen, dass hier Lösungen von Differentialgleichungen steifer Anordnungen, z.B. Feder-Masse-Systeme gesucht werden). Diese Eigenschaft macht sich besonders dann bemerkbar, wenn die Gravitation oder andere Flächenlasten wirken.
Um solche Körper modellieren zu können genügt die Anordnung der Feder-Masse-Elemente, wie wir Sie für die Nachbildung eines Netzes verwendet haben, nicht aus. Denn die Koppelpunkte können keine Drehmomente übertragen, weil sie als Gelenke ausgeführt sind. Damit auch steife, elastische Körper nachgebildet werden können, müssen neue, stützende Verbindungen zwischen den einzelnen Knoten eingeführt werden (). Zu den schon bekannten Verbindungen zwischen den Knoten kommen neue, diagonale Verbindungen hinzu: lprevious left, lprevious right, lnext left sowie lnext-right, die ebenfalls durch Federn vermittelt werden, allerdings sind deren Ruhefederlängen um den Faktor 2 länger als die horizontal bzw. vertikal angeordneten Federn!
Außerdem erweitern wir die Konstruktionsfähigkeit der Modelle um

Bezeichner Knotentyp Bedeutung
'h': horizontal oben verbunden alle Knoten werden gemeinsam in y-Richtung bewegt
'v': vertikal rechts verbunden alle Knoten werden gemeinsam in x-Richtung bewegt

Diese zusätzlichen Eigenschaften ermöglichen eine bewegliche Einspannung der Modelle am oberen Rand ('h') bzw. am rechten Rand ('v'). So können statische Effekte wie Knickung oder Stauchung untersucht werden.

Grundsätzlich ist aber zu bemerken, dass die Nachbildung eines Körpers durch diskrete Feder-Masse-Systeme immer nur eine begrenzt richtige Approximation liefern kann. Einerseits werden die verwendeten Federn als ideal angesehen, d.h. das Hooksche Gesetz gilt uneingeschränkt. Das hat Auswirkungen auf das statische Verhalten des Körpers. Andererseits werden die dynamischen Eigenschaften durch die sehr komplexen Differentialgleichungen und deren Lösung mittes ODE-Solver bestimmt. Insbesondere hier ist ein Kompromiss zwischen Genauigkeit und Rechenaufwand zu finden.
Maschen eines steifen, elastischen Körpers
Abb. Maschen eines steifen, elastischen Körpers

Im Beispielprogramm können durch mehrfaches Anklicken des Buttons mode unterschiedliche Modelle bzw. Einspannungen ausgewählt werden:
  1. dünner Balken: Feste Einspannung links, bewegliche Einspannung rechts.
    • Wird der Balken einer punktuell wirkenden Kraft ausgesetzt, verformt sich der Balken punktuell, aber auch in Gänze.
    • Wird der Balken von rechts (verschieben der rechten Einspannung per Maus) unter Druck gesetzt, knickt der Balken ein.
    • Unter Gravitationseinfluss (Flächenlast) biegt sich der Balken wie theoretisch vorhergesagt durch.
  2. dünner Balken: Feste Einspannung links.
    • Wird der Balken einer punktuell wirkenden Kraft ausgesetzt, verformt sich der Balken punktuell, aber auch in Gänze. Ein Verbiegen des Balkens in beliebige Richtung ist möglich. Wird der Biegeradius zu klein, sind Wulst ähnliche Kompressionen sichtbar.
    • Unter Gravitationseinfluss (Flächenlast) hängt der Balken wie theoretisch vorhergesagt herab.
  3. Würfel: Feste Einspannung am Boden.
    • Wird der Würfel einer punktuell wirkenden Kraft ausgesetzt, verformt sich der Balken punktuell, aber auch in Gänze. Ein Verbiegen des Würfels in beliebige Richtung ist begrenzt möglich
    • Unter Gravitationseinfluss (Flächenlast) wird der Würfel komprimiert.
  4. Würfel: Feste Einspannung am Boden, bewegliche Einspannung oben.
    • Der Würfel wird von oben unter Druck (Flächenlast) gesetzt, das verstärkt die Wirkung der Gravitation. Die Kompressionswirkung ist deutlich erkennbar.
    • Wird der Würfel einer punktuell wirkenden Kraft ausgesetzt, verformt sich der Balken punktuell, aber auch in Gänze. Ein Scheren des Würfels nach links oder rechts ist möglich
  5. dicker Balken: Feste Einspannung links.
    • Wird der Balken einer punktuell wirkenden Kraft ausgesetzt, verformt sich der Balken punktuell, aber auch in Gänze. Ein Verbiegen des Balkens in beliebige Richtung ist möglich
    • Unter Gravitationseinfluss (Flächenlast) hängt der Balken wie theoretisch vorhergesagt herab. Wird die Gravitation wieder abgeschaltet, richtet sich der Balken wieder auf.
Alle grün markierten Knoten sind Maus aktiv. Ihre Verschiebung entspricht einer punktuell angreifenden Kraft. Mit Hilfe der Schieberegler f0 und d werden in bekannter Weise die Eigenfrequenz und die Dämpfung der elementaren Feder-Masse-Einheiten gewählt. Dabei werden die einstellbaren Werte aus Stabilitätsgründen wie angezeigt limitiert. Alle Modelle können der Gravitationswirkung ausgesetzt werden. Um die Körperlichkeit zu demonstrieren, kann durch Betätigung des Buttons shape eine pseudo-3D-Darstellung gewählt werden.
download p5.js
run program

Ergebnisdiskussion: Alle Effekte, die aus der Statik-Lehre, wie Stauchung, Knickung oder Biegung von Balken können bei moderaten Belastungen beobachtet werden. Problematisch sind große Auslenkungen oder Belastungen, da die gemachten Voraussetzungen z.B. Geltung des HOOKschen Gesetzes nicht mehr erfüllt sind. Unter diesen Bedingungen kann es vorkommen, dass einzelne Federn sich nach "innen" einstülpen, was bei soliden Körpern nicht passieren kann.
Auch im dynamischen Verhalten kommt es bei großen Federkonstanten, d.h. hohen Eigenschwingungen, zu Instabilitäten. So kann die Simulation mit Hilfe von Feder-Masse-Systemen nur Körper aus relativ weichen Materialien (z.B. Gummi) abbilden.