3D-Koordinaten in 2D-Koordinaten umrechnen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

3D-Koordinaten in 2D-Koordinaten umrechnen

Beitrag 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.
Zuletzt geändert von NicTheQuick am 27.06.2007 15:19, insgesamt 3-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
a14xerus
Beiträge: 1440
Registriert: 14.12.2005 15:51
Wohnort: Aachen

Beitrag von a14xerus »

" HTML in diesem Beitrag deaktivieren", dann sollte es gehn
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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. :)
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag 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.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag 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.
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag von mueckerich »

Einfach nur Genial! :allright:
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
Antworten