Ich habe ein 3D-Matheproblem, das ich einfach nicht lösen kann.
Ich habe Daten von 3 Punkten. Die Daten sind eine (2D)-Koordinate auf einer Ebene, die irgendwo im 3D-Raum schwebt. Ich kenne auch die (2D)-Koordinate der Projektion. Daraus ergibt sich das folgende Array von Daten:
[[[x1,y1], [px1,py1],
[[x2,y2], [px2,py2],
[[x3,y3], [px3,py3]]
Dabei stehen die normalen (x1 usw.) Koordinaten für die Koordinaten in der Ebene und die anderen (px1 usw.) für die projizierten Koordinaten.
Ich würde gerne eine neu 2D-Koordinate ([x4,y4]).
.
Was ich bisher ausprobiert habe:
Natürlich braucht man ein Auge für die Projektion, also habe ich das auf [xe,ye,-1] gesetzt. Die xe und ye sind bekannt. (Da es sich um eine Fotoreferenzierung handelt, habe ich das Auge einfach in die Mitte des Fotos gesetzt).
Unter dem Auge habe ich die Projektionsfläche platziert (z=0). Das ergibt die folgenden Projektionskoordinaten:
[[[x1,y1], [px1,py1,0],
[[x2,y2], [px2,py2,0],
[[x3,y3], [px3,py3,0]]
Das Gleiche kann ich für die Koordinaten des Flugzeugs nicht tun, da ich nichts über dieses Flugzeug weiß.
Ich dachte mir auch, dass ich eine parametrisierte Formel für die Linien erstellen könnte, die vom Auge durch die Projektionskoordinaten verlaufen. Für Linie1 wäre das:
line1x = xe+(px1-xe)*t1
line1y = ye+(py1-ye)*t1
line1z = -1+t1 // = -1+(0--1)*t1
Ich kenne auch den Abstand zwischen den Punkten in 3D. Das ist derselbe wie in 2D. Das heißt, der Abstand zwischen Punkt1 und Punkt2 wäre sqrt((x1-x2)^2+(y1-y2)^2).
Ich kenne auch den Abstand zwischen den Linien (Linie1 und Linie2) zu jedem Zeitpunkt. Das ist sqrt((line1x-line2x)^2+(line1y-line2y)^2+(line1z-line2z)^2).
Allerdings weiß ich nicht wirklich, wie es weitergehen soll... Oder ob dies überhaupt der richtige Weg ist.
.
Ich hoffe, dass Sie verstehen, was ich tun möchte, und dass Sie mir helfen können.
Vielen Dank im Voraus!