BLOG
Berechnung von Wellen im Raum
Der Script ist in viele bekannte Programmiersprachen zu übertragen (zB: C++ und Java)
/*
source[0,0] ist die Anzahl der Quellen
source[n,0] ist die X Position der Quelle n
source[n,1] ist die Z Position der Quelle n
source[n,2] ist die Frequenz der Welle der Quelle n
source[n,3] ist die Lebensdauer der Welle der Quelle n
map[x,z] => y; Ist das Koordinatensystem der dritten Dimension
<= == Eklärung der Funktionen == =>
sqrt(Zahl) Zieht die Quadratwurzel von einer Zahl
sqr(Zahl) Quadriert eine Zahl
degtorad(Zahl) Rechnet die Zahl vom Gradmaß ins Bogenmaß um
sin(Zahl) Berechnet den Sinuswert einer Zahl im Bogenmaß
abs(Zahl) Gibt den Absoluten wert der Zahl zurück
*/
x_max = 50; // Anzahl der zu berechnenden Punkte in X-Richtung
z_max = 50; // Anzahl der zu berechnenden Punkte in Z-Richtung
x = 0; // Position X im Gitter gleich 0 setzen
z = 0; // Position Z im Gitter gleich 0 setzen
y = 0; // Zur Berechnung des Y-Wertes am der Koordinaten Position
fade = 0; // Zur Berechnung der Lebensdauer der Welle
abstand = 0; // Zum berechen des Abstands des Punkts zum Ursprung der Quelle
time += 10; // Verstrichene zeit um 10 erhöhen -> Verschiebung der wellen
while (x <= x_max+1) // Alle X-Werte durchlaufen bis die maximale Anzahl erreicht ist
{
while (z <= z_max+1) // Alle Z-Werte durchlaufen bis die maximale Anzahl erreicht ist
{
y = 0; // Gesamthöhe für den neuen Punkt auf 0 zurücksetzen
for (i=1; i <= source[0,0]; i += 1) // Für jede Quelle einmal berechnen
{
// Abstanden des Punktes(X, Z) zum Ursprung
abstand = sqrt(sqr(source[i,0]-x)+sqr(source[i,1]-z));
// Abschwächen der Welle ja nach abstand zum Ursprung un der jeweiligen Lebensdauer
// -> Amplitude wird je nach Entfernung immer kleiner
fade = 1 - abstand/source[i,3];
fade = (fade + abs(fade))/2;
// erhöhen des Y wertes am Punkt(x, Z) mit dem Wert von der Quelle i
// Y Wert der Quelle i ist a*sin(b*x + c)
// wobei x der Abstand ist,
// a der Fade-Faktor zum verkleinern der Amplitude
// b die Frequenz der Welle und
// c die Verschiebung -> Vergangene Zeit.
y += sin(degtorad( abstand*source[i,2] -time ))*fade;
}
map[x,z] = y; // De Map an den Koordinaten X-Z den Y-Wert (Höhe) zuweisen
z += 1;
}
z = 0;
x += 1;
}VIDEO: 3D Wave Simulator, gemacht mit diesem Code!erstellt am 28.07.2009 17:46 - aktualisiert am 28.07.2009 17:46
574 Aufrufe
...
BenniBones 28.07.2009 18:14
| Recht kurzer Quelltext für etwas so mathematisch anspruchsvolles xD Das Ergebnis kann man ja auf Youtube bestaunen! Und hat mich gleich daran erinnert dass ich mal wieder was mit C++ machen könnte xD
Danke Pierre^^ |
eb-7tritt 05.08.2009 15:00
| Kann ich damit auch mehr Wellen am Urlaubsort im Mittelmeer erzeugen?? |