Seite 1 von 5

3D-Koordinaten in 2D-Koordinaten umrechnen

Verfasst: 26.06.2007 22:19
von NicTheQuick
Tagchen mal wieder!

Da ich momentan einen Ferienjob bei der Bosch hier um die Ecke mache
und zwischen dem Abarbeiten der Teile auf dem Fließband immer wieder
jede Menge Zeit bleibt, die ich zum Ideen sammeln, grübeln und rechnen
verwende, fällt ab und zu mal ein brauchbarer Code an.
Einen davon stelle ich hier mal vor.

Mit folgender Include kann man eine oder mehrere virtuelle Kameras im
3D-Raum mit Drehung um alle drei Achsen erstellen und sogar den
Öffnungswinkel einstellen. Dazu gibt es eine Procedure, die
3D-Koordinaten in die 2D-Koordinaten aus Sicht der Kamera umrechnet.
Außerdem kann man die relativen Koordinaten zur Kamera zurückgeben
lassen.
Convert3Dto2D.pbi

Und jetzt ein kleiner Beispielcode mit einem farbigen Würfel und einer Pixel-Kugel drumherum.
Example.pb (Link tot)

Die Steuerung:
Maus:
- links/rechts: Drehung um Y-Achse
- hoch/runter: Drehung um X-Achse

Tastatur:
- links/rechts: Bewegung nach links oder rechts
- hoch/runter: Bewegung nach vorne oder hinten
- links/rechts + STRG: Bewegung nach oben oder unten
- hoch/runter + STRG: Drehung um X-Achse
- A/Y: Drehung um X-Achse
- S/X: Drehung um Z-Achse
- D/C: Ranzoomen oder Rauszoomen
- ESC: Beenden


Bemerkung:
Das langsamste an der Include ist die Berechnung der Kamera-Achsen,
wenn ein oder mehrere Winkel geändert wurden. Die Umrechnungs-
Procedure selbst kommt ohne Winkelfunktionen aus und ist
daher auch recht schnell. Ruckelfreies Berechnen von über 200.000
Koordinaten ist problemlos möglich! Auf schnelleren Rechnern als meinem
geht es sicherlich noch höher.

Viel Spaß damit!

Auch wenn der Code in diesem Forum steht, freue ich mich über
Feedback, Verbesserungsvorschläge, Kritik, usw.

///Edit1:
Codes durch Links ersetzt.

Verfasst: 26.06.2007 22:28
von Kiffi
Hallo Nic,

welcome back! :allright:
NicTheQuick hat geschrieben:Auch wenn der Code in diesem Forum steht, freue ich mich über
Feedback, Verbesserungsvorschläge, Kritik, usw.

Code: Alles auswählen

Procedure.d Camera_FOV
Das fehlt eine If- und eine With-Zeile am Anfang der Proc. ;-)

Grüße ... Kiffi

Verfasst: 27.06.2007 05:41
von NicTheQuick
Das Forum macht Unsinn, wenn ich die beiden Procedures poste:
- Procedure.d Camera_FOV(*Camera.Camera, FOV.d = -1) ;Setzt "Field of view" der Kamera in Grad (0 < FOV < 180) oder gibt es zurück
- Procedure Camera_Size(*Camera.Camera, MinX.d, MaxX.d, MinY.d, MaxY.d) ;Setzt die maximalen Ausgabekoordinaten

Scheinbar immer bei "<180"

Ich werde den Code heute Mittag einfach hochladen, wenn ich von der Arbeit
komme. Also bis dann.

Verfasst: 27.06.2007 09:16
von a14xerus
" HTML in diesem Beitrag deaktivieren", dann sollte es gehn

Verfasst: 27.06.2007 13:44
von Kaeru Gaman
stimmt.

das dürfte an dem neuen zusätzlich freigegebenen HTML liegen.
Rob sollte vielleicht noch einbaun, dass diese wie alle anderen Tags auch von code-tags außer kraft gesetzt werden...

Verfasst: 27.06.2007 15:21
von NicTheQuick
Ohje, HTML ist jetzt möglich. Das erklärt einiges. Und ja, das sollte in
Code-Tags deaktiviert sein.

Hab jetzt die Codes rausgenommen und verlinkt. Funktioniert genauso gut. :)

Verfasst: 27.06.2007 20:04
von THEEX
Wow, ich bin beeindruckt, daß könnte genau das sein, was ich brauche, wollte schon beim Lesen des Titels vor Freude in die Luft springen...

Allerdings sollte man die Dateien runterladen und nicht den Inhalt rauskopieren, das verursacht Fehler.

Verfasst: 27.06.2007 21:00
von Kiffi
CSprengel hat geschrieben:Allerdings sollte man die Dateien runterladen und nicht den Inhalt rauskopieren
öhm, Rechtsklick -> Ziel speichern unter... ausprobiert?

Grüße ... Kiffi

Verfasst: 28.06.2007 20:31
von THEEX
öhm, Rechtsklick -> Ziel speichern unter... ausprobiert?
*grinst*
Wenn ich schreibe, runterladen ist besser, werd ich das wohl gemacht haben... ;-)
Wollt nur allgemein drauf hinweisen, weil ich es eben zuerst mit rauskopieren probierte und vielleicht andere Leute es auch so versuchen.

Verfasst: 28.06.2007 21:12
von mueckerich
Einfach nur Genial! :allright: