Masse-Feder-System (Computergrafik)
Das Masse-Feder-System (kurz MFS, {{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}), in der Literatur auch Masse-Feder-Modell (kurz MFM), ist ein Verfahren in der Computergrafik, um das Deformationsverhalten von auf Polygonnetzen basierenden Objekten zu bestimmen. Es kann sowohl auf ebene als auch auf räumliche Objekte angewandt werden.
Die Gründe für die weite Verbreitung des Masse-Feder-Systems sind das leichtverständliche physikalische Konzept, die einfache Implementierung und die relativ niedrigen Rechenanforderungen.<ref name="schill">{{#invoke:Vorlage:Literatur|f}}</ref>
Geschichte
Das Masse-Feder-System basiert auf den physikalischen Ansätzen des Hookeschen Gesetzes.
Wegen der geringen Rechenleistung damaliger Computer wurde es anfänglich nur für Flächen genutzt (sowohl zweidimensionale, als auch im dreidimensionalen Raum eingebettete Flächen, zum Beispiel ein Tischtuch, das über einen Tisch fällt). Deshalb wurde es bei seinen ersten Verwendungen ab dem Jahr 1981 zunächst nur zur Haut- und Stoffverhaltenssimulation verwendet.<ref name="plattbadler">{{#invoke:Vorlage:Literatur|f}}</ref><ref name="waters">{{#invoke:Vorlage:Literatur|f}}</ref> Erst 1989 wurden die ersten MFS-Volumenmodelle veröffentlicht.<ref name="chadwickhaumannparent">{{#invoke:Vorlage:Literatur|f}}</ref><ref name="terz">{{#invoke:Vorlage:Literatur|f}} <templatestyles src="Webarchiv/styles.css" />{{#if:20160423062924
| {{#ifeq: 20160423062924 | *
| {{#if: PDF | {{#invoke:WLink|getEscapedTitle|PDF}} | {{#invoke:Webarchiv|getdomain|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf}} }} (Archivversionen)
| {{#iferror: {{#time: j. F Y|20160423062924}}
| {{#if: || }}Der Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
| {{#if: PDF | {{#invoke:WLink|getEscapedTitle|PDF}} | {{#invoke:Webarchiv|getdomain|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y|20160423062924}} im Internet Archive{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
}}
| {{#if:
| {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
| {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
| 16= {{#if: PDF | {{#invoke:WLink|getEscapedTitle|PDF}} | {{#invoke:Webarchiv|getdomain|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| 9 = {{#if: PDF | {{#invoke:WLink|getEscapedTitle|PDF}} | {{#invoke:Webarchiv|getdomain|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf}} }} {{#ifeq: | [] | [ | ( }}{{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
| #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!{{#if: || }}
}}
| c|{{{webciteID}}}}} {{#if: PDF | {{#invoke:WLink|getEscapedTitle|PDF}} | {{#invoke:Webarchiv|getdomain|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf}} }} ({{#if: {{#if: | {{{archiv-bot}}} | }} | des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if: | ; }}{{#ifeq: | [] | ] | ) }}
}}
| {{#if:
| Vorlage:Webarchiv/Today
| {{#if:
| Vorlage:Webarchiv/Generisch
| {{#if: PDF | {{#invoke:WLink|getEscapedTitle|PDF}} | {{#invoke:Webarchiv|getdomain|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf}} }}
}}}}}}}}{{#if:
| Vorlage:Webarchiv/archiv-bot
}}{{#invoke:TemplatePar|check
|all = url=
|opt = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
|cat = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
|errNS = 0
|template = Vorlage:Webarchiv
|format = *
|preview = 1
}}{{#ifexpr: {{#if:20160423062924|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
}}{{#if:
| {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
| web.archive.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}}
| webcitation.org =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}}
| archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn =
{{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
}}{{#if:
| {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
| }}
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
}}
| {{#if:
| {{#if: || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
}}
}}{{#if:{{#invoke:URLutil|isHostPathResource|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf}}
|| {{#if: || }}
}}{{#if: PDF
| {{#if: {{#invoke:WLink|isBracketedLink|PDF}}
| {{#if: || }}
}}
| {{#if: || }}
}}{{#switch:
|addlarchives|addlpages= {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
}}{{#ifeq: {{#invoke:Str|find|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf%7Carchiv}} |-1
|| {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf%7C4}}%7Chttp}} |-1
|| {{#switch: {{#invoke:Webarchiv|getdomain|http://mrl.nyu.edu/~dt/papers/vca90/vca90.pdf }}
| abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org =
| #default = {{#if: || }}{{#if: 1 |}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
}}
}}
}}</ref>
Heute ist es ein gängiges Verfahren in der Computerspielbranche und in der Medizin<ref name="schill" /> zur Simulation operativer Eingriffe.
Aufbau
In einem Masse-Feder-System werden Objekte durch ein Netz aus Masseknoten, mechanischen Federn und Dämpfungsgliedern dargestellt.<ref name="plattbadler" /><ref name="neumann">{{#invoke:Vorlage:Literatur|f}}</ref>
Die Knoten eines Polygonnetzes bekommen jeweils eine Masse. Die Kanten werden durch eine mechanische Feder, die mit einem Dämpfungsglied parallel geschaltet ist, dargestellt. Somit hat sie eine Federkonstante, eine Ruhelänge und eine Abklingkonstante. Das Dämpfungsglied ist notwendig, wenn das Objekt nach der Deformation nicht schwingen, sondern eine Ruhelage finden soll. In Abhängigkeit von den Masseknoten wird der Reibungskoeffizient errechnet.
Die Masseknoten sind regelmäßig im ganzen Objekt verteilt und stellen es so dar. Zur Verbindung der Masseknoten werden Federn zwischen sie gesetzt. Sind zwei Masseknoten miteinander verbunden, nennt man sie benachbart. Die Ausgangsform des Objekts liegt vor, wenn alle Federn in Ruhelage sind (<math>E_\mathrm{pot} = 0</math>), also deren Ruhelänge haben. Wird nun ein Masseknoten verschoben, liegt an den benachbarten Federn eine potentielle Energie an (<math>E_\mathrm{pot} \neq 0</math>), die nun durch Verschieben der benachbarten Massepunkten minimiert wird. Eine solche Verschiebung wirkt sich auf das ganze Netz aus, wodurch sich dieses verschiebt.
Um einer Verschiebung im Raum entgegenzuwirken, können Punkte „befestigt“ werden (an einer absoluten Position oder an einer relativen Position zu einem anderen Massepunkt).<ref name="neumann" /> Dadurch kann unter anderem eine plastische Deformation erzielt werden.
Das Masse-Feder-System kann, um physikalisches Verhalten realistischer zu machen, um eine Kollisionserkennung ergänzt werden, damit die Massepunkte auf Kollisionen untereinander und auf Kollisionen mit anderen Objekten reagieren können.
Berechnung
In der folgenden Herleitung wird von einem <math>d</math>-dimensionalen Raum ausgegangen.
Masse-Feder-Systeme haben ihren Ursprung in der klassischen Mechanik. Sie basieren auf der Idee, dass ein Körper <math>M</math> durch einen einzelnen Masseknoten <math>m</math> repräsentiert werden kann. Weitergehend kann dieser Masseknoten in <math>n</math> kleinere Masseknoten <math>m_i</math>, verteilt über den ganzen Körper, unterteilt werden, sodass gilt:
- <math> m = \sum \limits_{i=1}^{n} m_i </math>
Nach dem Hookeschen Gesetz ist das Verhalten einer Feder mit parallelem Dämpfungsglied folgendermaßen definiert:
- <math> \vec F_s = -k \cdot \vec s - \mu \cdot \dot{\vec s} </math>
wobei <math>k</math> die Federkonstante, <math>\vec s</math> die Auslenkung der Feder zur Ruhelage und <math>\mu</math> der Reibungskoeffizient ist.
Newtons Definition zum Verhalten einer bewegten Masse ist:
- <math> \vec F = m \cdot \vec a </math>
<math>\vec F</math> ist die Kraft, die dem Körper der Masse <math>m</math> die Beschleunigung <math>\vec a</math> erteilt.
Auf Basis dieser letzten beiden Gleichungen kann die Bewegungsgleichung eines einzelnen Masseknotens <math>i</math> hergeleitet werden.
Auf den Masseknoten <math>i</math> mit der Masse <math>m_i</math> wird bei der Verschiebung um <math>\vec s_i \in \mathbb{R}^d</math> die Kraft <math>\vec F_i</math> ausgeübt:
- <math> \vec F_i = m_i \cdot \ddot{\vec s_i} </math>
Die Auslenkung <math>\vec s_{ij}</math> wird bei zwei Masseknoten <math>i</math> und <math>j</math> in einem Masse-Feder-System mit der Distanz voneinander, abzüglich der Länge der Feder im Ruhezustand <math>l_{0,ij}</math>, berechnet:
- <math> \vec s_{ij} = \frac{\vec x_j - \vec x_i}{\begin{vmatrix}\vec x_j - \vec x_i\end{vmatrix}} \cdot (\begin{vmatrix}\vec x_j - \vec x_i \end{vmatrix} - l_{0,ij})</math>
<math>\vec x_i</math> ist die Position des <math>i</math>-ten Masseknotens. Mit <math>\frac{\vec x_j - \vec x_i}{\begin{vmatrix}\vec x_j - \vec x_i\end{vmatrix}}</math> wird der Richtungsvektor als Einheitsvektor von Masseknoten <math>i</math> zu Masseknoten <math>j</math> berechnet. Der Betrag von <math>\begin{vmatrix}\vec x_j - \vec x_i\end{vmatrix} - l_{0,ij}</math> ist der Abstand zwischen Masseknoten <math>i</math> und Masseknoten <math>j</math> minus der Ruhelänge der Feder, was den Längenskalar darstellt. Das Skalarprodukt <math>\vec s_{ij}</math> ist die Auslenkung des Masseknotens <math>i</math> in Abhängigkeit vom Masseknoten <math>j</math>.
Das führt zu folgender Kraft, die auf den einzelnen Masseknoten <math>i</math> mit dem benachbarten Knoten <math>j</math> wirkt:
- <math> \vec F_{s,ij} = -k_{ij} \cdot \vec s_{ij} - \mu_{ij} \dot{\vec s_i} </math>
Die externen Kräfte, die auf den Masseknoten <math>i</math> wirken, können als <math>\vec F_{\mathrm{ext},i}</math> zusammengefasst werden:
- <math> \vec F_{\mathrm{ext}, i} = \vec F_{G, i} + \vec F_{e, i} </math>
mit dem Vektor der äußeren Kraft <math>\vec F_{\mathrm{ext}, i}</math>, dem Gravitationsvektor <math>\vec F_{G, i}</math> und dem Vektor der anderen externen Einwirkungen <math>\vec F_{e, i}</math>.
Fasst man alle auf den Masseknoten <math>i</math> wirkenden Kräfte zusammen, erhält man folgende Differenzialgleichung als Bewegungsgleichung, wobei <math>N</math> die Menge der benachbarten Masseknoten ist:
- <math> \vec F_{i} = \sum \limits_{j \in N} \vec F_{s,ij} + \vec F_{\mathrm{ext}, i}</math>
Es gilt <math>\vec F_i = m_i \ddot{\vec s_i}</math>:
- <math> m_i \ddot{\vec s_i} = \sum \limits_{j \in N}\vec F_{s, ij} + \vec F_{\mathrm{ext}, i} </math>
Die Bewegungsgleichung für das gesamte System erhält man, indem man alle Verschiebungen <math>s_i</math> mit dem Vektor <math>\vec s = (\vec s_1, \vec s_2, \dots, \vec s_n)^T</math>, die Massen <math>m_i</math> mit der Matrix <math>M</math>, die Reibungskoeffizienten <math>\mu_{ij}</math> mit der Matrix <math>D</math> und die Federkonstanten <math>k_{ij}</math> der einzelnen Masseknoten durch die Matrix <math>K</math> beschreibt:<ref name="schill" />
- <math> \vec F_\mathrm{ext} = M \cdot \ddot{\vec s} + D \cdot \dot{\vec s} + K \cdot \vec s </math>
Die Matrizen <math>D</math> und <math>K</math> sind beide symmetrisch, da <math>\mu_{ij} = \mu_{ji}</math> und <math>k_{ij} = k_{ji}</math>. Daraus folgt, dass jeweils nicht alle <math>n^2</math> Komponenten, sondern nur <math>\frac{n^2+3n}{2}</math> Komponenten berechnet werden müssen. Außerdem können die Komponenten auf der Hauptdiagonalen der Matrizen <math>D</math> und <math>K</math> (also die Komponenten <math>\mu_{ii}</math> und <math>k_{ii}</math>) vernachlässigt werden, da es keine Feder gibt, die an beiden Enden mit demselben Masseknoten verbunden ist. Die Anzahl der zu berechnenden Komponenten verringert sich somit auf <math>\frac{n^2+n}{2}</math>.
Siehe auch
Weblinks
|X|x= |0|-= |S|s= – Sammlung von Bildern |1|= – Sammlung von Bildern{{#if:
| {{#switch: {{#invoke:TemplUtl|faculty|1}}/{{#invoke:TemplUtl|faculty|1}}
|1/= und Videos
|1/1=, Videos und Audiodateien
|/1= und Audiodateien}}
| , Videos und Audiodateien
}}
|#default= – }}{{#if: Mass-spring systems
| {{#ifeq: {{#invoke:Str|left|mass-spring systems|9}}
| category:
| FEHLER: Ohne Category: angeben!}}}}Vorlage:Wikidata-Registrierung
- Johan Jansson: Beispiele zum Masse-Feder-System
Einzelnachweise
<references />
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Archiv-URL
- Wikipedia:Vorlagenfehler/Parameter:URL
- Wikipedia:Vorlagenfehler/Parameter:Linktext
- Wikipedia:Vorlagenfehler/Vorlage:Webarchiv/Linktext fehlt
- Wikipedia:Vorlagenfehler/Schwesterprojekt
- Computerphysik
- Geometrische Modellierung