AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rotation - Drehmatrix

Ein Thema von foerster7892 · begonnen am 17. Mär 2012 · letzter Beitrag vom 29. Mär 2013
Antwort Antwort
foerster7892

Registriert seit: 10. Okt 2007
Ort: Brieskow-Finkenheerd
181 Beiträge
 
#1

Rotation - Drehmatrix

  Alt 17. Mär 2012, 08:44
Delphi-Version: 5
Ja hi,
ich arbeite gerade an nem Programm welches in R³ Punkte/Körper/Geraden drehen soll.
Mein Problem ist, dass wenn ich das drehen über mehrere Achsen nutze via eulersche Winkel(sind eigl. nur die Transformationsmatrizen für die Rotation um die x,y,z-Achse multipliziert und halt optimal gekürzt) irgendwie die Drehungen nicht stimmen.

Delphi-Quellcode:
points2D[k].x1:=points3D[k].x1 * ((cos(av)*cos(cv)-sin(av)*cos(bv)*sin(cv))-(cos(av)*sin(cv)+sin(av)*cos(bv)*cos(cv))+(sin(av)*cos(bv)))-((points3D[k].x3*((sin(bv)*sin(cv))-(sin(bv)*cos(cv))+cos(bv)))/2*sqrt(2));
points2D[k].x2:=points3D[k].x2 * ((sin(av)*cos(cv)+cos(av)*cos(bv)*sin(cv))+(cos(av)*cos(bv)*cos(cv)-sin(av)*sin(cv))-(cos(av)*sin(bv)))-((points3D[k].x3*((sin(bv)*sin(cv))-(sin(bv)*cos(cv))+cos(bv)))/2*sqrt(2));
ich weiß nicht genau ob der Fehler hier liegt aber ich vermute es. Finden konnte ich ihn auch noch nicht.
Wenn jemand wissen will wie das hergeleitet wird - hilft manchmal zum verständnis kann ich dies gerne erläutern(ist eigl. simpel).

Ich hatte davor ein Programm geschrieben, damit konnte man einen Würfel drehen um jeweils eine Achse, dies lief ohne Probleme und nun wollte ich die Achsen halt kombinieren und beliebige Körper darum drehen.

Als Beispiel kann man wieder einen Würfel verwenden:
A(100|-100|-100); B(100|100|-100); C(100|100|100); D(100|-100|100); E(-100|-100|-100); F(-100|100|-100); G(-100|100|100); H(-100|-100|100);

Hier tritt ein weiteres Problem auf welches ich nicht erklären kann, der Punkt A und der Punkt E werden falsch dargestellt. Außerdem sieht man hier wunderbar, dass sich der Würfel nicht einheitlich dreht sondern alle Punkte irgendwie komisch unterschiedlich wobei allerdings jeder Punkt am Ende wieder die Ausgangsposition erreicht. Wenn ich eine Strecke mit einem Punkt im Ursprung drehe habe ich das Gefühl, dass die Drehung stimmt.
Ich hoffe jemand kann mir helfen, ich würde es muss es bis Dienstag fertig bekommen, dann muss ich es in der Schule vorstellen.



Ja hier das gesamte Programm als zip (.exe + alles andere)
Programm

kurze Erläuterung zum Programm:
1 ihr müsst zuerst die anzahl der Punkte wählen und dann die Punkte eintragen -300<=x<=300; -300<=y<=300
2 nun könnt ihr die Punkte verbinden in dem ihr zb. schreibt:
1,2,3,1 -> Dreieick und 1,4 und 2,4 und 3,4 -> Pyramide (der Verbindungsreset geht leider nicht, da muss das Programm neugestartet werden)
nun könnt ihr es euch zeichnen lassen und mit den jeweiligen Winkeln !sollte! es sich eigentlich richtig drehen, tut es aber nicht.

PS.: mögliche Ideen um das Programm funktionstüchtig zu machen würden mir reichen, wenn ich irgendetwas schlecht erklärt oder undeutlich dargestellt habe würde ich mich über eine Frage auch freuen!
mfg
foerster7892

Geändert von foerster7892 (17. Mär 2012 um 17:42 Uhr)
  Mit Zitat antworten Zitat
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#2

AW: Rotation - Drehmatrix

  Alt 20. Mär 2012, 12:39
Hier : http://wiki.delphigl.com/index.php/Tutorial_Nachsitzen gibt es neben diesem noch einige andere Tutorials zu Deinem Thema.
Eine gute Unit für diese Matrizen findest Du in dem GlScene-Projekt. Dort gibt es die Unit Vectorgeometry.pas, die hat fast alle Funktionen enthalten.
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Rotation - Drehmatrix

  Alt 21. Mär 2012, 14:35
ich weiß nicht genau ob der Fehler hier liegt aber ich vermute es. Finden konnte ich ihn auch noch nicht.
Wenn jemand wissen will wie das hergeleitet wird - hilft manchmal zum verständnis kann ich dies gerne erläutern(ist eigl. simpel).
Es ist mag simpel sein, auf jeden Fall ist es schon falsch.
Für die Darstellung eines um mehrere Achsen rotierten Objekts werden nicht alle benötigten Werte berücksichtigt.

Im Prinzip derzeit:
2D.x = f(3D.x, 3D.z)
2D.y = f(3D.y, 3D.z)

aber notwendig:
2D.x = f(3D.x, 3D.y, 3D.z)
2D.y = f(3D.x, 3D.y, 3D.z)

Richtet man die Zeilen etwas aus, erkennt man einige Berechnungen, die sich gegenseitig auslöschen.
Delphi-Quellcode:
points2D[k].x1 := points3D[k].x1 * ( (cos(av)*cos(cv) - sin(av)*cos(bv)*sin(cv))
                                    -(cos(av)*sin(cv) + sin(av)*cos(bv)*cos(cv))
                                    +(sin(av)*cos(bv)))
               -((points3D[k].x3 * ( (sin(bv)*sin(cv))
                                    -(sin(bv)*cos(cv))
                                    + cos(bv)))/4*sqrt(2));

points2D[k].x2 := points3D[k].x2 * ( (cos(av)*cos(bv)*sin(cv) + sin(av)*cos(cv))
                                    +(cos(av)*cos(bv)*cos(cv) - sin(av)*sin(cv))
                                    -(cos(av)*sin(bv)))
               -((points3D[k].x3 * ( (sin(bv)*sin(cv))
                                    -(sin(bv)*cos(cv))
                                    + cos(bv)))/4*sqrt(2));
  Mit Zitat antworten Zitat
foerster7892

Registriert seit: 10. Okt 2007
Ort: Brieskow-Finkenheerd
181 Beiträge
 
#4

AW: Rotation - Drehmatrix

  Alt 25. Mär 2012, 10:57
so ich hab mittlerweile raus das die drehungen komplett richtig sind allerdings werden die Punkte generell falsch dargestellt.
Hab das Programm gerade nicht zur Hand deshalb kann ich im Mom nichts weiter antworten.
Und ja da waren überflüssige Winkelfunktionen dabei, ändert aber nichts an der Funktionalität.

Allerdings werden die Punkte falsch dargestellt. -> hab ich durch TextOut gemerkt. So gibt es ganze 2 Nullpunkte in meinem Koordinatensystem an zwei unterschiedlichen stellen.
mfg
foerster7892
  Mit Zitat antworten Zitat
mz23
(Gast)

n/a Beiträge
 
#5

AW: Rotation - Drehmatrix

  Alt 25. Mär 2012, 12:43
Habe mich vor über 20 Jahren mit demselben Problem herumgeschlagen.
Erinnere mich noch dunkel daran, die Werte der Winkel nicht in
Rad umgerechnet zu haben, sondern Deg eingesetzt

Was mir noch in Erinnerung geblieben ist, das Drehen mußte man
immer aus den Originalkoordinaten herausberechnen, da sonst
Rundungsfehler die Körper bei mehreren Drehungen deformierten.

Schöne Grüße aus Nürnberg,
Manfred
  Mit Zitat antworten Zitat
foerster7892

Registriert seit: 10. Okt 2007
Ort: Brieskow-Finkenheerd
181 Beiträge
 
#6

AW: Rotation - Drehmatrix

  Alt 25. Mär 2012, 16:50
nö das ist nicht mein Problem - hab ja nen würfel problemlos drehen können^^.
mfg
foerster7892
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Rotation - Drehmatrix

  Alt 26. Mär 2012, 08:46
Und ja da waren überflüssige Winkelfunktionen dabei, ändert aber nichts an der Funktionalität.
Hat auch niemand behauptet, ist aber ein Ansatzpunkt für die Fehlersuche.

so ich hab mittlerweile raus das die drehungen komplett richtig sind allerdings werden die Punkte generell falsch dargestellt.
Frag mich wie du das ermittelt hast, da deine Berechnung der Rotation und der Transformation in 2D-Koordinaten zusammen erfolgen. Ich würde beides in dieser Form trennen:

Rotation
Tmp3D.x = f(3D.x, 3D.y, 3D.z)
Tmp3D.y = f(3D.x, 3D.y, 3D.z)
Tmp3D.z = f(3D.x, 3D.y, 3D.z)
Transformation
2D.x = f(Tmp3D.x, Tmp3D.y, Tmp3D.z)
2D.y = f(Tmp3D.x, Tmp3D.y, Tmp3D.z)
  Mit Zitat antworten Zitat
terence14
(Gast)

n/a Beiträge
 
#8

AW: Rotation - Drehmatrix

  Alt 29. Mär 2013, 06:31
Hallo liebe DP-Gemeinde,

ich habe mich mit Projektion von 3D in 2D Koordinaten etwas beschäftigt
sowie mit der Drehung eines Körpers um seinen Mittelpunkt.

Anbei ein kleines Testprogamm, natürlich inklusive Quelltexten.

Es ist in der Entstehung um einiges Auszuprobieren also erwartet
nicht, daß alle Knöpfe funktionieren. Aber das, was funktioniert
scheint i.O. zu sein.

MfG,
terence

Anhang:
PProjektion-Test_2013_03_29.zip - 29.03.2013--07:43 - 249.396 Bytes

Die Formeln dazu entnahm ich zwei Wikipedia Artikeln, die ich der
Einfachheit wegen mal angehängt habe.

Geändert von terence14 (29. Mär 2013 um 13:40 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 Uhr.
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