Hallo,
ich kenne mich bisher leider überhaupt nicht mit 3D Darstellung aus, was sich nun ändern soll!
Ich programmiere in Java ein Programm, welches eine Schwingung einer eingespannten Membrane berechnet.
Das stellt auch soweit kein Problem dar. Die Membrane ist in viele kleine "Stücke" eingeteilt, die man als 2D-Fläche bezeichen kann. Setzt man all diese Flächen zusammen, bekommt man die gesamte Membrane.
Ich habe die Koordinaten aller Eckpunkte ( X / Y ) in einer Matrix gespeichert.
Um sich das besser vorstellen zu können, nehme ich mal ein ganz einfaches Beispiel her:
konstruiert ein Quadrat in einem Koordinatensystem mit folgenden 4 Punkten:
Punkt, X, Y
p1 ( 0; 0)
p2 ( 2; 0)
p3 ( 2; 2)
p4 ( 0; 2)
verbindet die Punkte mit folgenden Strecken:
p1-p2
p2-p3
p3-p4
p4-p1
nun sollte ein Quadrat entstanden sein.
Zeichnet nun noch einen fünften Punkt
p5 (1; 1)
in dieses System und verbindet folgende Punkte:
p1-p5
p2-p5
p3-p5
p4-p5
nun sollte man in diesem Quadrat vier Dreiecke sehen.
Mit etwas Vorstellungskraft für den dreidimensionalen Raum könnte man auch sagen, man schaut von oben auf eine Pyramide.
Soweit, sogut. Bisher haben wir uns nur in der 2D-Ebene bewegt. Nun soll die dritte Dimension dazu kommen.
Wie schon angesprochen, errechne ich zu jedem Punkt p einen Z-Wert.
Angenommen, ich habe für die fünf Punkte die Z-Werte:
p1:0
p2:0
p3:0
p4:0
p5:0
Hierbei würde sich keine Pyramide ergeben, da alle Werte der Z-Achse Null sind.
wenn sich aber der Z-Wert des Punkt p5 ändert, so würde eine Pyramide entstehen.
mit den neuen Z-Werten für die Punkte:
p1:0
p2:0
p3:0
p4:0
p5:1
sollte nun eine Pyramide entstanden sein.
Ich hoffe, bis hierher konnte man mir folgen...
betrachten wir nun nur den Z-Wert von Punkt p5:
um eine Schwingung halbwegs vernünftig darstellen zu können, benötige ich natürlich sehr viele Einzelschritte.
in diesem Fall würden alle Werte der Punkte 1-4 nicht verändern. Lediglich der Z-Wert von p5 wird in vielen Einzelschritten neu berechnet.
Sagen wir mal, ich berechne 100 Schritte mit
(X;Y;Z)
p5 ( 1;1;0)
p5 ( 1;1;0.01)
p5 ( 1;1;0.02)
p5 ( 1;1;0.03)
p5 ( 1;1;0.04)
p5 ( 1;1;0.05)
p5 ( 1;1;0.06)
...
p5 ( 1;1;0.98 )
p5 ( 1;1;0.99)
p5 ( 1;1;1)
jetzt möchte ich also diese 100 Schritte nacheinander graphisch anzeigen. hierbei sollte man dann eine Pyramide "wachsen" sehen.
und genau hier beginnt mein Problem:
Ich programmiere diese Aufgabe mit hilfe von Eclipse auf einem Windows XP System. Die Daten ( Koordinaten ) habe ich in Arrays gespeichert. Da ich noch keine Erfahrung mit graphischen Benutzeroberflächen habe, gebe ich alle meine Daten auf der Konsole aus.
So, nun kommt meine Frage:
Ich hätte gerne ein eigenes Fenster, in dem diese Membrane ( Pyramide ) als ( gebogene ) Fläche zu sehen ist und animiert wird. Die Animation soll dabei das Wachsen der Pyramide von einer flachen Platte zu einer "Dachhöhe" von 1 ( Z-Wert von p5 in Schritt 100 =1) darstellen.
Als Ansicht brauche ich die Betrachtung von oben ( Vogelperspektive ) und eine Seitenansicht, bei der man dann das "Dach" wachsen sehen könnte.
Dargestellt werden müssen alle Teilflächen. In diesem Beispiel würden es vier Dreiecke sein mit den Eckpunkten:
p1, p2, p5
p2, p3, p5
p3, p4, p5
p4, p1, p5
Diese vier Dreicke würden dann die Seiten der Pyramide darstellen.
Die Bearbeitung könnte ich mir in zwei Versionen vorstellen, je nachdem, was einfacher zu programmieren ist:
1. die Animation ( neuer Schritt der graphischen Anzeige ) wird aktualisiert, wenn das Programm die neuen Werte ( Koordinaten ) berechnet hat, also eine Aktualisierung der Graphik während der Laufzeit des Programms.
oder:
2. Es werden alle Koordinaten aller Schritte berechnet und gespeichert. Danach stehen dann die Koordinaten jedes Schrittes dem Programmteil für die graphische Animation zur Verfügung.
die zweite Version halte ich aber nicht für besonders glücklich, da bei größeren Membranen mit sehr vielen Punkten ein enormer Speicherbedarf entsteht. Geschickter wäre es sicher, wenn die Daten einmal berechnet und gespeichert werden, dann der Animation übergeben werden, und dann der neue Schritt berechnet wird. So bleibt der Speicherbedarf gleich und die Animation läuft zur Laufzeit der Berechnung.
Um die Animation zeitlich zu beeinflussen, falls es zu schnell gehen sollte, kann man ja nach jedem Schritt eine Pause einfügen...
traumhaft wäre es, wenn man das ganze System um alle drei Achsen mit der Maus drehen könnte, aber das muss nicht sein.
Ich würde mich freuen, wenn mir jemand sagen könnte, wie ich diese Membrane ( in diesem Beispiel eine Pyramide ) dreidimensional darstellen kann und eine Animation aus den vielen Koordinaten machen kann.
mfG, Marco
ich kenne mich bisher leider überhaupt nicht mit 3D Darstellung aus, was sich nun ändern soll!
Ich programmiere in Java ein Programm, welches eine Schwingung einer eingespannten Membrane berechnet.
Das stellt auch soweit kein Problem dar. Die Membrane ist in viele kleine "Stücke" eingeteilt, die man als 2D-Fläche bezeichen kann. Setzt man all diese Flächen zusammen, bekommt man die gesamte Membrane.
Ich habe die Koordinaten aller Eckpunkte ( X / Y ) in einer Matrix gespeichert.
Um sich das besser vorstellen zu können, nehme ich mal ein ganz einfaches Beispiel her:
konstruiert ein Quadrat in einem Koordinatensystem mit folgenden 4 Punkten:
Punkt, X, Y
p1 ( 0; 0)
p2 ( 2; 0)
p3 ( 2; 2)
p4 ( 0; 2)
verbindet die Punkte mit folgenden Strecken:
p1-p2
p2-p3
p3-p4
p4-p1
nun sollte ein Quadrat entstanden sein.
Zeichnet nun noch einen fünften Punkt
p5 (1; 1)
in dieses System und verbindet folgende Punkte:
p1-p5
p2-p5
p3-p5
p4-p5
nun sollte man in diesem Quadrat vier Dreiecke sehen.
Mit etwas Vorstellungskraft für den dreidimensionalen Raum könnte man auch sagen, man schaut von oben auf eine Pyramide.
Soweit, sogut. Bisher haben wir uns nur in der 2D-Ebene bewegt. Nun soll die dritte Dimension dazu kommen.
Wie schon angesprochen, errechne ich zu jedem Punkt p einen Z-Wert.
Angenommen, ich habe für die fünf Punkte die Z-Werte:
p1:0
p2:0
p3:0
p4:0
p5:0
Hierbei würde sich keine Pyramide ergeben, da alle Werte der Z-Achse Null sind.
wenn sich aber der Z-Wert des Punkt p5 ändert, so würde eine Pyramide entstehen.
mit den neuen Z-Werten für die Punkte:
p1:0
p2:0
p3:0
p4:0
p5:1
sollte nun eine Pyramide entstanden sein.
Ich hoffe, bis hierher konnte man mir folgen...
betrachten wir nun nur den Z-Wert von Punkt p5:
um eine Schwingung halbwegs vernünftig darstellen zu können, benötige ich natürlich sehr viele Einzelschritte.
in diesem Fall würden alle Werte der Punkte 1-4 nicht verändern. Lediglich der Z-Wert von p5 wird in vielen Einzelschritten neu berechnet.
Sagen wir mal, ich berechne 100 Schritte mit
(X;Y;Z)
p5 ( 1;1;0)
p5 ( 1;1;0.01)
p5 ( 1;1;0.02)
p5 ( 1;1;0.03)
p5 ( 1;1;0.04)
p5 ( 1;1;0.05)
p5 ( 1;1;0.06)
...
p5 ( 1;1;0.98 )
p5 ( 1;1;0.99)
p5 ( 1;1;1)
jetzt möchte ich also diese 100 Schritte nacheinander graphisch anzeigen. hierbei sollte man dann eine Pyramide "wachsen" sehen.
und genau hier beginnt mein Problem:
Ich programmiere diese Aufgabe mit hilfe von Eclipse auf einem Windows XP System. Die Daten ( Koordinaten ) habe ich in Arrays gespeichert. Da ich noch keine Erfahrung mit graphischen Benutzeroberflächen habe, gebe ich alle meine Daten auf der Konsole aus.
So, nun kommt meine Frage:
Ich hätte gerne ein eigenes Fenster, in dem diese Membrane ( Pyramide ) als ( gebogene ) Fläche zu sehen ist und animiert wird. Die Animation soll dabei das Wachsen der Pyramide von einer flachen Platte zu einer "Dachhöhe" von 1 ( Z-Wert von p5 in Schritt 100 =1) darstellen.
Als Ansicht brauche ich die Betrachtung von oben ( Vogelperspektive ) und eine Seitenansicht, bei der man dann das "Dach" wachsen sehen könnte.
Dargestellt werden müssen alle Teilflächen. In diesem Beispiel würden es vier Dreiecke sein mit den Eckpunkten:
p1, p2, p5
p2, p3, p5
p3, p4, p5
p4, p1, p5
Diese vier Dreicke würden dann die Seiten der Pyramide darstellen.
Die Bearbeitung könnte ich mir in zwei Versionen vorstellen, je nachdem, was einfacher zu programmieren ist:
1. die Animation ( neuer Schritt der graphischen Anzeige ) wird aktualisiert, wenn das Programm die neuen Werte ( Koordinaten ) berechnet hat, also eine Aktualisierung der Graphik während der Laufzeit des Programms.
oder:
2. Es werden alle Koordinaten aller Schritte berechnet und gespeichert. Danach stehen dann die Koordinaten jedes Schrittes dem Programmteil für die graphische Animation zur Verfügung.
die zweite Version halte ich aber nicht für besonders glücklich, da bei größeren Membranen mit sehr vielen Punkten ein enormer Speicherbedarf entsteht. Geschickter wäre es sicher, wenn die Daten einmal berechnet und gespeichert werden, dann der Animation übergeben werden, und dann der neue Schritt berechnet wird. So bleibt der Speicherbedarf gleich und die Animation läuft zur Laufzeit der Berechnung.
Um die Animation zeitlich zu beeinflussen, falls es zu schnell gehen sollte, kann man ja nach jedem Schritt eine Pause einfügen...
traumhaft wäre es, wenn man das ganze System um alle drei Achsen mit der Maus drehen könnte, aber das muss nicht sein.
Ich würde mich freuen, wenn mir jemand sagen könnte, wie ich diese Membrane ( in diesem Beispiel eine Pyramide ) dreidimensional darstellen kann und eine Animation aus den vielen Koordinaten machen kann.
mfG, Marco