Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Drehung eines Körpers um eine beliebige Achse (https://www.delphipraxis.net/133559-drehung-eines-koerpers-um-eine-beliebige-achse.html)

Ben19 4. Mai 2009 23:05


Drehung eines Körpers um eine beliebige Achse
 
Hallo Leute :)
Ich muss für die Schule ein Projekt ausarbeiten und habe mich für ein Programm in Delphi entschieden in dem ich ein Objekt (Quadrat) um eine beliebige Achse drehen lasse. Habe mich auch schon schlau gemacht. Problem ist das die gefunden Formeln mir nicht schlüssig sind. Außerdem weiß ich nicht, da ich ein Anfänger im programieren bin, wie ich das in Delphi umsetze(vorallem die Darstellung von Matrizen ist mir nicht klar). Meine Fragen sind also, ob ihr mir die Drehformel erklären könntet, da ich das Projekt auch vorstellen muss und genau wissen muss wie die Formel zustande kommt und wie ich diese in Delphi umsetze(also vorallem wie ich Matrizen in Delphi einbaue)?

Hier eine Seite mit der Formel: www14.informatik.tu-muenchen.de/lehre/1998WS/proseminar/dlugosch/
Eine andere Möglichkeit der Drehung ist das Objekt in den Ursprung zu transformieren, dort zu drehen und zurück transformieren. Bei der Variante versteh ich allerdings die Rechnung nicht :?

Hoffe ihr könnt mir irgendwie helfen und schon mal vielen Dank im vorraus
Ben19

jfheins 4. Mai 2009 23:19

Re: Drehung eines Körpers um eine beliebige Achse
 
Icvh nehme jetzt mal an, du möchtest das Teil um mehrere Achsten (=3) drehen können und nicht nur um eine.

Dann befindest du dich im 3D-Raum.

Dann machst du folgendes:

1. Das Quadrat vektorbasiert speichern. Also einen Mittelpunkt und von diesem aus Vektoren zu den Eckpunkten. Diese Vektoren sind dreidimensional.

2. Eine Vektor-Matrix-Multiplikations-Funktion schreiben. Eine Matrix hat hier 3x3 also 9 Elemente.

3. 3 Funktionen (eine für jede Achse) schreiben, die dir (unter Angabe eines Drehwinkels) die Matrix zurückgeben.

4. Das ganze verpacken :)

Beachte, dass die Reihenfolge der Drehmatrizen nicht egal ist. Es macht einen Unterschied, ob du erst um X, dann um y und zum Schluss um z drehst, oder andersherum ;)

Vektorn und Matrizen kannst du in Delphi als recors implementieren ;)

R2009 5. Mai 2009 05:10

Re: Drehung eines Körpers um eine beliebige Achse
 
Hi,

ein Vektor ist nichts anderes als ein eindimsionales Array:

Delphi-Quellcode:
   vektor:array[1..n] of double;
wobei n die Dimension deines Vektors ist. ( in deinem Fall 3 )

eine Matrix ist nichts anderes als ein zweidimsionales Array (oder n dimensional brauchst du aber hier nicht):

Delphi-Quellcode:
   matrix:array[1..n,1..m] of double;
wobei n=m eine symetrische Matrix ist (in deinem Fall n=m=3)

Viele Grüsse

Ben19 5. Mai 2009 14:28

Re: Drehung eines Körpers um eine beliebige Achse
 
Erst einmal viel Dank für eure Antworten :-D
Das mit den einbauen von Matrizen in Delphi hab ich begriffen(nochmal vielen Dank :)).
Aber den Weg mit der Drehformel habe ich überhaupt nicht verstanden :? . Was bedeutet Vektorbasiert speichern oder eine Vektor-Matrix-Multiplikations-Funktion schreiben?
Wäre echt nett wenn du mir das nochmal erklären könntest.

Vielen Dank im voraus
Ben19

jfheins 5. Mai 2009 14:57

Re: Drehung eines Körpers um eine beliebige Achse
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab dir da mal ein Beispiel vorgerechnet ...

Um das ganze Quadrat zu verschieben, musst du nach der Drehung einfach einen Vektor hinzuaddieren!

P.S. Falls dir ein Schritt nicht klar ist - frag :)

guidok 5. Mai 2009 15:10

Re: Drehung eines Körpers um eine beliebige Achse
 
Ein Quadrat ist doch nur zweidimensional, oder?

Ein möglicher Körper, der sich im dreidimensionalen Raum aus dem Quadrat ergibt ist z.B. der Quader (wobei hier natürlich der Sonderfall mit der Höhe Null möglich ist).

3_of_8 5. Mai 2009 15:13

Re: Drehung eines Körpers um eine beliebige Achse
 
Es müssen gar nicht drei Rotationsmatrizen sein - eine reicht völlig.

@guidok: Was hat ein Quader mit einem Quadrat zu tun? Ein Quadrat ist zwar kein Körper, aber man kann es trotzdem im dreidimensionalen Raum betrachten.

Alles, was hier zu machen ist, ist, eine entsprechende Rotationsmatrix zu erzeugen (Formel in der Wikipedia) und die mit den Punktvektoren des Quadrats zu multiplizieren.

jfheins 5. Mai 2009 15:18

Re: Drehung eines Körpers um eine beliebige Achse
 
Ja - ein Quadrat ist 2D - aber man kann es ja trotzdem im 3D-Raum einbetten. (Die 4 Eckpunkte müssen natürlich in einer Eebene liegen, sonst ists ja kein Quadrat mehr)

@roter kasten: Ja klar - aber die wird dann schon etwas komplizierter ... und für jemanden der noch nicht damit gearbeitet hat isses vll. einfacher 3 seperate Drehungen zu machen ...

Ben19 5. Mai 2009 16:13

Re: Drehung eines Körpers um eine beliebige Achse
 
Also vielen Dank :-D
Dein Beispiel hat mir sehr geholfen. Habe es jetzt soweit verstanden :-D.
Hätte aber noch eine Frage zum besseren Verständnis, um einen 3D Würfel drehen zulassen muss ich doch die 4 hinteren Punkte v5, v6, v7, v8 auch mit der Drehmatrite multiplizieren oder ?

Vielen Dank im vorraus
Ben19

jfheins 5. Mai 2009 16:16

Re: Drehung eines Körpers um eine beliebige Achse
 
Ja, du musst immer alle Punkte mit der Drehmatrix multiplizieren.

Beachte jedoch, dass immer um den Ursprung gedreht wird - d.h. wenn du die Punkte von dem Quadrat nimmst und noch welche hinzufügst, wird der Würfel nicht um seine Mitte gedreht !


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:20 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz