Schwingende Saite
Aus StudyWiki
Inhaltsverzeichnis |
Schwingende Saite Dokumentation
Eine Projektarbeit von Daniel Alder und Michel Racic im Fach Numerik an der :HSZ-T:
Download
Die JAR-Datei enthält alle notwendigen Daten, also auch die Quellcodes.
Download: SchwingendeSaite-r147.jar
Bedienung
Starten der Applikation
einfach folgendes eingeben:
java -jar SchwingendeSaite-r147.jar
Die Main-Klasse ist hsz.alderac.saite.DemoFrame.java
Benötigt wird Java 1.5 oder höher
Verlangsamung
Je weiter der Regler nach links geschoben wird, desto schneller läuft die Animation (die Pausen zwischen den Berechnungen werden kürzer)
Anzahl Punkte
Je weiter der Regler nach rechts geschoben wird, desto mehr Punkte werden verwendet für die Simulation
Oberes Diagramm (Zeitverlauf)
Diese Darstellung zeigt den Verlauf der Höhe des mittleren Punktes über die Zeit an
Unteres Diagramm (Momentaufnahme)
Zeigt den jeweils aktuellen Berechnungsstand der Simulation (Momentaufnahme)
- Ein Klick in den oberen Bereich dieses Diagramms initialisiert die Saite neu.
- Ein Klick in den unteren Bereich setzt entweder
- linke Maustaste: die Idealhöhe für den aktuellen Punkt, oder
- rechte Maustaste: setzt gleich direkt die Höhe
Mathematische Grundlagen
Wertebereiche
Gerechnet wird in folgenden Bereichen:
Diese werden jeweils auf die Pixeldimensionen der dafür vorgesehenen Fenster hochskaliert.
x-Achse
Bereich: 0..(n − 1)
0 ist links, n ist rechts
Jeder dieser ganzzahligen Werte ist ein Punkt, der verfolgt wird. n ist dabei die Anzahl Punkte. Da der erste und der letzte Punkt vorgegeben sind (Befestigung), ergibt sich effektiv n − 2 Punkte, die sich bewegen können.
y-Achse
Sichtbarer Bereich: − 1..1
-1 ist unten, 1 ist oben
0 ist dabei das Zentrum, auf welches auch die beiden seitlichen Fixpunkte festgelegt sind.
Ein Wert kann auch ausserhalb dieses Bereichs liegen. In diesem Fall weist die Verbindungslinie dann einfach in die entsprechende Richtung aus dem Rahmen.
Zeit
Die Zeit ist unbestimmt. In regelmässigen Abständen wird ein Rechenschritt vollzogen, dieser berechnet dann die jeweils nächste Momentaufnahme. Um einen Verlauf rückzuverfolgen, ist die Speicherung aller Zwischenschritte in einem Hilfsarray notwendig.
Initialisierung
Wenn die Saite angespannt wird (am Anfang des Programms), wird erst ein Spannpunkt x festgelegt. Dieser ist im Bereich 1..(n − 2) und wird auf 1 gesetzt. Die Werte dazwischen (1..(x − 1) und (x + 1)..(n − 2)) werden dann entsprechend linear gemittelt.
Berechnung
Die Berechnung basiert auf 2 Konstanten und 3 Werten, die pro Punkt separat gespeichert sind:
Konstanten:
- elasticity: Die Elastizität. Je grösser der Wert, desto weiter schwingt die Saite aus
- reibung: Die Reibung. Ein Wert von 1 widerspiegelt absolute Reibungsfreiheit - die Saite schwingt endlos. Je kleiner der Wert ist, desto schneller kommt sie zum Stillstand.
- n: Anzahl Punkte in der Simulation
Werte pro Punkt i:
- y''[i]: Die Beschleunigung auf den einzelnen Punkt
- y'[i]: Die Geschwindigkeit
- y[i]: Das ist die eigentliche Position des Punkts
Die Punkte werden folgendermassen berechnet:
yIdeal ist der Wert, wo der Punkt hinsteuert. Er liegt genau auf der Verbindungsachse der beiden benachbarten Punkte:
yideal[i] = (y[i − 1] + y[i + 1]) / 2
Jetzt wird die Kraft berechnet. Je grösser der aktuelle Punkt vom Ideal abweicht, desto grösser ist sie:
F = (y[i] − yideal[i]) * 2
Die Kraft wirkt sich direkt auf die Beschleunigung aus. Die Konstante elasticity bestimmt, ob sich die Seite eher wie ein Gummiseil oder eine Stahlsaite anfühlt. Die Berücksichtigung von n ermöglicht in gewissem Masse die Unabhängigkeit der Simulation von der Anzahl simulierter Punkte:
y''[i] = − F * (elasticity * n)
Nun kommt allgemeine Differenztheorie:
y'[i] = y'[i] + y''[i]
Und dann nochmals für y, jedoch unter Berücksichtigung der Reibung:
y[i] = (y[i] + y'[i]) * reibung
