Entwickler-Ecke

Multimedia / Grafik - Cube


Prometheus1995 - Fr 24.02.12 00:00
Titel: Cube
Hallo Zusammen!
Ich bin seit geraumer Zeit stolzer Informatikschüler, doch nun habe ich ein Problem wo ich leider keinen Plan und auch nicht mehr viel Zeit habe.
Ich hoffe auch die Unterstützung der Community ;)
Problem:
Erstellen eines Würfels, der sich in einem Punkt innerhalb des Würfels dreht.(Punkte mit Linien verbunden)
Mein bisheriger Lösungsansatz sieht so aus das ich versuchen Möchte 8 Punkte zuersellen und diese dann durch Linien zu einem Würfel zu verbingen,der sich auf einer Kreisbahn drehen sollte.
Dafür sollte ich Möglichst mit Canvas arbeiten, ich denke das ich ebenso Vektorrechnung benötige(leider noch keinen Plan von).
Cos und Sin sind sicherlich auch gefragt.
Habe einen imensen Zeitdruck und würde mich über Hilfen und/oder Quelltexte(die verständlich für einen Neueinsteiger sind) freuen.

MfG Prom


Moderiert von user profile iconNarses: Topic aus Delphi Tutorials verschoben am Do 23.02.2012 um 23:02


bummi - Fr 24.02.12 00:18

http://www.delphipraxis.net/107915-3d-wuerfel-mit-canvas-bitte-um-hilfe.html

Posting #4 von omata


GuaAck - Fr 24.02.12 00:29

Verstehe ich richtig, dass Du die Ansicht des "Drahtmodelles" eine Würfels auf eine Ebene (als Canvas) projezieren sollst, wobei die Ansicht (Blickwinkel, Abstand) frei wählbar sein sollen?

Falls ja: Das ist die klassische Aufgabe von Programmen wie DirectX oder OpenGL. Googele mal nach "DirectX Tutorial", da wirst Du schnell was finden, wo die ganzen Transformationen bestens beschrieben sind.

Gruß GuaAck


Prometheus1995 - Fr 24.02.12 00:33

danke schonmal für die schnellen Antworten

Nein es sollte mit Canvas gemacht werden, da ich verstehen und sehen möchte was da passiert, mit diesen von dir anderen beschrieben Formen hatte ich bisher noch keinen Kontakt.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

danke schonmal an Bummi,hab es gedownloaded, habe leider selber kein delphi daher kann ich erst in der schule wider draufzugreifen


Xion - Fr 24.02.12 02:27

user profile iconPrometheus1995 hat folgendes geschrieben Zum zitierten Posting springen:
Nein es sollte mit Canvas gemacht werden, da ich verstehen und sehen möchte was da passiert, mit diesen von dir anderen beschrieben Formen hatte ich bisher noch keinen Kontakt.

Ja, dort erklären die das auch.
http://wiki.delphigl.com/index.php/Tutorial_Lineare_Algebra
Nur finde ich das vielleicht etwas schwierig, wir hatten in der Schule keine Matrizenrechnung (Mathe LK Bayern)
http://wiki.delphigl.com/index.php/Tutorial_Nachsitzen

user profile iconPrometheus1995 hat folgendes geschrieben Zum zitierten Posting springen:
danke schonmal an Bummi,hab es gedownloaded, habe leider selber kein delphi daher kann ich erst in der schule wider draufzugreifen

Zum angucken reicht ja auch erstmal nur ein Texteditor ;) Die .pas ist in Klartext.


Martok - Fr 24.02.12 03:39

Man kann das im Ansatz auch ohne Matrizen machen, indem man eine orthogonale Projektion nimmt. Dann kann man mit ein paar clever verteilten sin/cos schon die Projektion herleiten, ohne über die Matrizen dahinter nachzudenken. Isometrische Projektionen mit verstellbaren Winkeln bietet sich da an, das ist einfach solange man nur Drahtmodelle zeichnen will. Flächen sind etwas schwierig, man müsste ja einen ZBuffer simulieren.


Prometheus1995 - Fr 24.02.12 13:05

ja Martok ähnlich war auch meine Vorstellung, Kantenmodell reicht!, aber technisch habe ich leider keine Ahnung wie ich das umsetzten kann.
Habe auch nur Lazeros auf meinen Heimrechner, in der Schule leider nur Delphi....


Martok - Fr 24.02.12 13:42

Womit du das machst is ja erstmal egal. Das Canvas sieht bei beiden gleich aus, und die Sprache ist eh die gleiche (wenn du FPC in den Delphi-Modus schaltest).

Technisch ist das auch keine Herausforderung, nur Moveto/Lineto; eher Mathematisch. Die Projektion solltest du dir vielleicht mal mit Papier und Bleistift und einer Hand voll Skizzen herleiten: da sieht man dann schön, welche Winkel wo auftauchen und welche Winkelfunktion dann die Koordinaten ergibt.
Du hast ja 2 Winkel: Drehen um die Z(hoch)-Achse und Kippen zur lokalen X(oder Y)-Achse. Wenn du die erstmal einzeln machst (also einmal ein Objekt nur von der Seite gesehen umkreisen und einmal nur rotieren) hast du beide Einzelteile und kannst die dann einfach zusammenführen.


Prometheus1995 - Fr 24.02.12 13:55

Hab jetzt erstmal 2 grundregelende Formeln aufgestellt(dürften stimmen),bin grade an der Überlegung wie ich im allgemeinen,durch welche Schleife den Vorgang widerholen könnte?

Delphi-Quelltext
1:
2:
x2:=Round( x + ( Radius * cos(Winkel)) );
y2:=Round( y + ( Radius * sin(Winkel)) );


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Blup - Di 28.02.12 12:25

Ist der Radius konstant und der Winkel wird z.B. in einer Schleife kontinuierlich verändert, beschreiben die beiden Formeln einen Kreis um den Punkt x,y in einer Ebene. Was hat das mit deiner urspünglich formulierten Aufgabenstellung zu tun?

Ein Objekt lässt sich durch eine Menge von Punkten beschreiben.
Das Objekt wird um einen Punkt M rotiert, in dem dem jeder einzelne Punkt P des Objektes rotiert wird.

Dazu werden die Weltkoordinaten von Punkt P in ein Koordinatensystem überführt in dem die Drehpunkt M die Position 0,0 hat:

Delphi-Quelltext
1:
2:
3:
// P1 = P - M
P1.x := P.x - M.x;
P1.y := P.y - M.y;

Dann wird der Punkt mit der Rotationsmatrix transformiert:

Delphi-Quelltext
1:
2:
3:
// P2 = P1 * R
P2.x := P1.x * Cos(Alpha) + P1.y * -Sin(Alpha);
P2.y := P1.x * Sin(Alpha) + P1.y *  Cos(Alpha);

Zum Schluss wieder die Umrechnung in Weltkoordinaten:

Delphi-Quelltext
1:
2:
3:
// P = P2 + M
P.x := P2.x + M.x;
P.y := P2.y + M.y;

Die Berechnung für dreidimensionale Objekte läuft im Prinzip genauso ab.