3D-Grafik Probleme beim drehen von Objekten

Massta

Mitglied
Hallo,
ich habe ein Problem. Ich möchte einen dreidimensionalen Vektor (einfach einen Pfeil) drehen. Also ich will nicht den Vektor selbst drehen, sondern nur den angezeigten. Dabei kommen aber seltsame Werte raus.
Java:
    public void drawVektor(Graphics g, Vektor v){
        double x1, x2, x3, y1, y2, y3, z1, z2, z3;

        //Rotation um die z-Achse:
        x1 = v.x * Math.cos(Math.PI*dz/180) - v.y * Math.sin(Math.PI*dz/180);
        y1 = v.x * Math.sin(Math.PI*dz/180) + v.y * Math.cos(Math.PI*dz/180);
        z1 = v.z;

        //Rotation um die x-Achse:
        x2 = x1;
        y2 = y1 * Math.cos(Math.PI*dx/180) - z1 * Math.sin(Math.PI*dx/180);
        z2 = y1 * Math.sin(Math.PI*dx/180) + z1 * Math.cos(Math.PI*dx/180);

        //Rotation um die y-Achse:
        x3 = z2 * Math.sin(Math.PI*dy/180) + x2 * Math.cos(Math.PI*dy/180);
        y3 = y2;
        z3 = z2 * Math.cos(Math.PI*dy/180) - x2 * Math.sin(Math.PI*dy/180);

        double xt = 1 * x3 / (0.1 + z3);
        double yt = 1 * y3 / (0.1 + z3);
        drawArrow(g, xUrsprung,yUrsprung,
            xUrsprung+(int)xt,
            yUrsprung-(int)yt);

    }

Das ist meine Methode um die Werte von 3d auf 2d zu bringen.
Vektor ist eine Klasse, die (bis jetzt) genau 3 public double Werte enthält, nämlich x, y und z.
dx, dy und dz sind die jeweiligen Drehfaktoren in Grad.
xt und yt sind die Koordinaten, die später auf dem Bildschirm angezeigt werden sollen, und xUrsprung und yUrsprung sind die Werte des Ursprungs des Koordinatensystems auf dem Screen, da es beliebig verschoben werden kann.
Was ist mein Fehler?
 

Marco13

Top Contributor
Was ist mein Fehler?

Soll die Art der Fragestellung implizieren, dass du davon ausgehst, dass es nur EINEN Fehler gibt? :joke:

Anscheinend werden da drei Sachen vermischt:
1. Drehen
2. Projizieren
3. Zeichnen
Versuch' vielleicht mal, die einzeln zu machen.

Was ein "Drehfaktor" ist, ist mir auch nicht klar. Ein Winkel, vermutlich.

Wie wenig ... "Einfühlungsvermögen in die Arbeit eines Computers" ... notwendig ist, um zu erkennen, dass dort irgendwo auch Zeilen wie
Java:
double dxRad = Math.toRadians(dx);
...
double cx = Math.cos(dxRad);
double sx = Math.sin(dxRad);
...
usw vorkommen sollten, darüber will ich gerade nicht nachdenken.

Den Vektor in dieser Form zu drehen kann übrigens auch im "perfekt (und fehlerfrei) umgesetzten Fall" zumindest zu einem Gimbal Lock ? Wikipedia führen, aber OB das gepostete in dieser Form fehlerfrei ist, kann ich nicht nachvollziehen (speziell ob die nachfolgenden Drehungen richtig auf die "Zwischenergebnisse", d.h. die x1...z3, angewendet werden).

Schon mal über eine Klasse "Matrix" nachgedacht? Drehmatrix ? Wikipedia
 

Massta

Mitglied
Hallo Marco,
zu dem vermischen.. So gesehen mache ich sie doch einzeln. Zuerst hole ich mir die gedrehten Werte, dann berechne ich die Koordinaten fürs Programm und dann lass ich das ganze Zeichnen, was soll ich da noch trennen?

Mit Drehfaktor ist Winkel gemeint :D

Ich hatte ehrlich gesagt gedacht, dass das mit
Java:
Math.PI*dy/180
erspart bleibt.
Hoffentlich kann ich hier eine Lösung finden, ich brauche nämlich die reinen Algorithmen für etwas anderes.

Die Rotationen um die Achsen basieren bereits auf Drehmatrizen, für die 3 Teile brauche ich keine extra Klasse. Klar - das würde das ganze etwas übersichtlicher gestalten, aber so muss es auch irgendwie gehen.
 

Massta

Mitglied
Ich habe jetzt übrigens die Lösung gefunden. Das Tutorial nach dem ich gearbeitet habe, hat leider andere Achsennamen verwendet, also statt x1, x2 und x3 dann z, y und x. Desweiteren ist es nicht
Java:
Math.PI/grad*180
sondern
Java:
grad/180*Math.PI
.
Wen das Thema interessiert, hier das (nicht sehr ausführliche) Tutorial:
TECH_REF
 

Massta

Mitglied
Weder noch, sondern [c]Math.toRadians(deg);[/c]...

Also es funktioniert auch so, aber ich probiere es mal aus wenn ich die toRadians Methode benutze!

Ich habe noch ein problem, zwar werden die dreidimensionalen Objekte jetzt richtig gezeichnet und man kann durch diesen cyberspace laufen und es funktioniert alles einigermaßen, aber sobald sich ein (oder mehrere) Objekte hinter die "Kamera" bewegen, werden zuerst Koordinaten berechnet die links oben in der Ecke sind (-21000000irgendwas, -21000000irgendwas), und wenn man noch mehr Schritte nach vorne macht werden diese Objekte ab der horizontalen Hälfte des Fensters gespiegelt und laufen rückwärts wieder in den Bildschirm rein! Woran liegt das? Eigentlich sollten diese hinter der Kamera ja weiter nach hinten verlaufen :D

https://www.dropbox.com/s/a5v2t0tphqajcgp/fehler.JPG

In der unteren Hälfte sieht man eine Reihe von Rechtecken, die an der x1-Achse entlang laufen. Hat man genug Abstand ist alles gut, geht man aber über diesen "Weg", passiert das was oben zu sehen ist. Wenn man weiter nach vorne geht kommen die unteren Objekte einem entgegen und die oberen entfernen sich.
 

Marco13

Top Contributor
Es geht um die Lesbarkeit, und dass bei toRadians der Fehler, den du oben erwähnt hast, gar nicht erst aufgetreten wäre.

Und zum Rest... Wenn du dich mit Kameras, perspektivischen Projkektionen, Clipping, vielleicht gleich noch auf der Ebene von Cohen Sutherland (und beim Zeichnen von Linien vielleicht gleich noch mit dem Bresenham) auseinandersetzen willst, kann ich dir http://www.amazon.de/Computer-Graphics-Principles-Addison-Wesley-Programming/dp/0201848406 empfehlen. Und wenn du jetzt sagst: "Aber das ist doch in C und nicht in Java" ist klar, dass du etwas falsch einschätzt.

Mal was ganz anderes: Warum machst du das per Hand und nicht mit einer 3D-Engine?
 

Massta

Mitglied
Mal was ganz anderes: Warum machst du das per Hand und nicht mit einer 3D-Engine?

Ich hab gerade nicht so viel Zeit, deswegen antworte ich einfach mal auf deine letzte Frage. In der Schule haben wir dieses Jahr einen Projektkurs, der, zumindest für mich und meine Gruppe, auf den Fächern Informatik und Mathe basiert. Wir schreiben eine Android App zur Berechnung und Darstellung von Vektoren und Matrizen und allem was dazu gehört, dazu brauchen wir ein 2D- und 3D Koordinatensystem. Ich weiß, es gibt auch bereits eine 3D Engine für Android, aber aus Zeitgründen ist es einfach leichter, das eben selbst zu schreiben. Es ist schon schwer genug sich auf Android umzustellen, da muss nicht auch noch 3D dazu kommen. Und ich habe ja jetzt fast alles was ich brauche :)
 

Massta

Mitglied
Äh - nein :) Aber die Schwierigkeiten werden vielleicht noch früh genug deutlich. (In der Hoffnung, dass nie z.B. eine Kugel oder auch nur ein gefülltes Rechteck dargestellt werden muss...)

Gott bewahre, nein! Punkte, Vektoren, Geraden und Ebenen (ich weiß, da haben wir das gefüllte Rechteck, aber dazu hab ich schon ne gute Idee :) ). Die Schwierigkeiten sind schon in meinem Kopf, aber ich hab jetzt erstmal knapp eine Woche Zeit, darüber nachzudenken und rumzuprobieren. Danke auf jeden Fall für deine Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
B Input/Output Probleme beim Ausführen von Shell-Befehlen mit Java Allgemeine Java-Themen 28
J Probleme beim einbinden von Zip4j library Allgemeine Java-Themen 6
F SQLite mit Java / Probleme beim INSERT Befehl Allgemeine Java-Themen 4
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
A Probleme beim Verstehen einer Aufgabenstellung Allgemeine Java-Themen 11
perlenfischer1984 Probleme beim Mocken Allgemeine Java-Themen 6
R probleme beim starten von jar unter linux Allgemeine Java-Themen 2
M Probleme beim rechnen, bei Zahlen mit führenden Nullen. Allgemeine Java-Themen 7
E JCuda-0.6.5 Probleme beim ausführen der Datei Allgemeine Java-Themen 0
W JNDI - LDAP - Probleme beim editieren von Usern Allgemeine Java-Themen 0
N Zahlensysteme umrechnen; Probleme beim Umwandeln Allgemeine Java-Themen 4
A Probleme beim auslesen von Quelltext (HTML) Allgemeine Java-Themen 5
S Probleme beim Auslesen einer Liste Allgemeine Java-Themen 8
H Probleme beim Erstellen einer txt. Datei Allgemeine Java-Themen 7
S Probleme beim Start von jar Datein Allgemeine Java-Themen 15
S Probleme beim Compilen Allgemeine Java-Themen 8
N Probleme mit Umlauten beim Einlesen Allgemeine Java-Themen 6
P Probleme beim Signieren Allgemeine Java-Themen 2
D Probleme beim schreiben / lesen in TreeMap Allgemeine Java-Themen 9
S Probleme beim Anzeigen des Dateiinhalts Allgemeine Java-Themen 6
O Probleme beim vergleichen von 2 Datumsangaben Allgemeine Java-Themen 2
hdi Probleme beim Rechnen mit BigDecimal Allgemeine Java-Themen 5
V Probleme beim Drucken mehrerer PDF's Allgemeine Java-Themen 17
E Probleme beim Umstieg auf Version 1.6.0_12 Allgemeine Java-Themen 4
J Java Plugin probleme beim Laden? Allgemeine Java-Themen 3
V Probleme beim Lesen mit readObject -> InvalidClassExcepti Allgemeine Java-Themen 3
D Probleme beim Umstellen von iText 1.4.4 auf Version 2.1.2 Allgemeine Java-Themen 5
G Probleme beim Sichern von Properties Allgemeine Java-Themen 2
W Probleme beim Ausführen einer Java Klasse auf Kommandozeile Allgemeine Java-Themen 17
S Probleme beim Einstieg Allgemeine Java-Themen 3
F Probleme beim speichern einer xml datei mit jdom Allgemeine Java-Themen 5
D Probleme beim FAQ (JTextField: Dokumentarten) Allgemeine Java-Themen 5
B probleme beim compilen/decompilen Allgemeine Java-Themen 4
G Probleme beim Mail-Api mit BCC Allgemeine Java-Themen 2
M Probleme beim ausführen meiner Klasse Allgemeine Java-Themen 8
G probleme beim sortieren einer ArrayList Allgemeine Java-Themen 8
G Probleme beim Entzippen Allgemeine Java-Themen 4
G jdk1.5 Probleme beim Installieren unter Win Allgemeine Java-Themen 2
J Probleme mit der CommApi beim ProgrammStart über Konsole Allgemeine Java-Themen 2
P Probleme beim Einlesen einer TXT/CSV-Datei aus einem JAR Allgemeine Java-Themen 7
C Probleme beim Starten eines Java-Programms Allgemeine Java-Themen 2
E Probleme beim Zugriff auf verschachtelte Vektoren Allgemeine Java-Themen 16
G Probleme beim Verbinden auf einen Notes 5 Server Allgemeine Java-Themen 3
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
M tomcat probleme Allgemeine Java-Themen 1
N Division macht Probleme Allgemeine Java-Themen 14
MarvinsDepression Probleme mit relativem Dateipfad Allgemeine Java-Themen 1
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
nibe1501 GUI Probleme Allgemeine Java-Themen 16
C Probleme mit dem WindowBuilder Allgemeine Java-Themen 3
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
K VisualVM Profiling Remote Probleme Allgemeine Java-Themen 1
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
D Regex Probleme Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
Dann07 Probleme mit OpenAL Allgemeine Java-Themen 0
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Probleme mit BigDecimal Allgemeine Java-Themen 1
T Probleme mit NumberFormat Allgemeine Java-Themen 5
J Probleme exe-Start mit Task Scheduler Allgemeine Java-Themen 1
F Variablen Palindromzahl (Probleme mit Methode) Allgemeine Java-Themen 9
K Data Konverter - Probleme mit Byte[] Kodierung Allgemeine Java-Themen 3
T Probleme mit dem Pfad zum Propertie file Allgemeine Java-Themen 7
H Swing HashMap zu Tabelle macht mir Probleme Allgemeine Java-Themen 4
Neoline Interpreter-Fehler Probleme mit Arrays.toString Allgemeine Java-Themen 7
J Erste Schritte Probleme mit der Hauptklasse Allgemeine Java-Themen 14
J Tetris Probleme bei Klassen Allgemeine Java-Themen 14
J MinMax VierGewinnt Probleme Allgemeine Java-Themen 22
J Probleme mit CodeCoverage und Lombok Equals Allgemeine Java-Themen 1
R Snake Probleme Allgemeine Java-Themen 2
RalleYTN 3D Objekt Translation basierend auf Rotation (Probleme mit Z Rotation) Allgemeine Java-Themen 0
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
E TableView Probleme Allgemeine Java-Themen 7
S Kaffemaschine Programmierung Probleme Allgemeine Java-Themen 2
K Threads Runtime und Process Probleme Allgemeine Java-Themen 3
S Probleme mit unterschiedlichen Java-Versionen (Mac OS X 10.11) Allgemeine Java-Themen 0
S Event Handling keyPressed()-Probleme Allgemeine Java-Themen 2
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
P Probleme mit Grafik (Java) Allgemeine Java-Themen 6
H Probleme mit DAY_OF_WEEK Allgemeine Java-Themen 4
Arif Probleme mit NullPointerException Allgemeine Java-Themen 2
E Probleme mit nextInt() und Exception Allgemeine Java-Themen 35
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
RalleYTN Probleme mit Encrypting Allgemeine Java-Themen 10
M Probleme mit Schriftarten PDFBox Allgemeine Java-Themen 3
J Probleme mit der Java-Runtime Allgemeine Java-Themen 10
G Probleme mit BufferedWriter und URL Allgemeine Java-Themen 4
S Probleme mit meinem MacBook Pro DRINGEND HILFE erbeten! Allgemeine Java-Themen 17
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
M Runtime.exec() verursacht auf manchen Systemen Probleme - Ursache unklar Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben