Advanced Games Physics
Inhaltsverzeichnis zum
Inhalt

Systeme von verkoppelten Differentialgleichungen

2D-Systeme verkoppelter 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 verkoppelter 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ösungs­formalismus für die verkoppelten Differential­gleichungen 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)
Formel
(b)
Formel
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': fixer Knoten Befestigung, Geschwindigkeitskomponenten sind gleich Null
'm': mittlerer Knoten Kräfte greifen allseitig an
'o': oberer Knoten keine Krafteinwirkung von oben
'b': unterer Knoten keine Krafteinwirkung von unten
'l': linker Knoten keine Krafteinwirkung von links
'r': rechter Knoten keine Krafteinwirkung von rechts
'1': linker, oberer Knoten keine Krafteinwirkung von oben und links
'2': rechter, oberer Knoten keine Krafteinwirkung von oben und rechts
'3': rechter, unterer Knoten keine Krafteinwirkung von unten und rechts
'4': linker, unterer Knoten 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