Punkte im Raum in eine Ebene projizieren?

Hallo zusammen,

derzeit arbeite ich an einem kleinen Programm, welches Punkte im Raum in 2D darstellen soll, und zwar in Abhängigkeit von einem beliebigen Betrachtungspunkt (quasi eine sehr simple 3D-Engine).

Dazu habe ich mir Folgendes überlegt:

  • gegeben sind:

  • der Ursprung P0 (0|0|0)

  • der Betrachtungspunkt V (xv|yv|zv), wobei xv, yv und zv bekannt - also Konstanten - sind

  • der zu projizierende Punkt Pn (xn|yn|zn), wobei auch hier xn, yn und zn bekannte Konstanten sind

  • die Projektionsebene geht durch P0 und ist rechtwinklig zur Geraden durch P0 und V

  • die Projektion von Pn ist der Punkt an dem die Gerade durch V und Pn die Projektionsebene schneidet.

Errechnet werden soll der Punkt Qn (xp_n|yp_n|zp_n), welcher die Projektion von Pn in der Projektionsebene darstellt.
Dieser müsste dann noch umgerechnet werden in Rn (xe_n|ye_n), also die 2D-Koordinaten bezogen auf die Ebene.

Zwar war ich in Vektor-Rechnung mal ganz gut, aber der Mathe-LK ist mittlerweile einfach zu lange her, als dass ich das hier noch alleine hinbekommen würde…
Daher wäre ich für etwas Hilfe sehr dankbar!

Dazu habe ich mir Folgendes überlegt:

  • gegeben sind:
  • der Ursprung P0 (0|0|0)
  • der Betrachtungspunkt
    V (xv|yv|zv), wobei
    xv, yv und zv bekannt - also
    Konstanten - sind
  • der zu projizierende Punkt
    Pn (xn|yn|zn),
    wobei auch hier xn, yn und
    zn bekannte Konstanten sind
  • die Projektionsebene geht durch P0

und ist rechtwinklig zur Geraden durch P0
und V

  • die Projektion von

Pn ist der Punkt an dem die Gerade
durch V und Pn die
Projektionsebene schneidet.

Errechnet werden soll der Punkt
Qn (xp_n|yp_n|zp_n),
welcher die Projektion von Pn in der
Projektionsebene darstellt.
Dieser müsste dann noch umgerechnet werden in
Rn (xe_n|ye_n),
also die 2D-Koordinaten bezogen auf die Ebene.

Zwar war ich in Vektor-Rechnung mal ganz gut, aber der
Mathe-LK ist mittlerweile einfach zu lange her, als dass ich
das hier noch alleine hinbekommen würde…
Daher wäre ich für etwas Hilfe sehr dankbar!

Also ich rechne mal ein bißchen ins blaue…

sehr günstig in dem Problem ist die Tatsache, das der normalen-Vektor immer bekannt ist. Den braucht man zum projezieren.
Der normalen-vektor ist derjenige vektor der Senkrecht auf der Ebene steht und die Länge 1 hat.

in diesem Fall steht der Ortsvektor des Betrachterstandpunkts senkrecht auf der ebene! yay. den durch seine Länge teilen, und wir haben unseren normalenvektor.

Jetzt bilden der zu projezierende Punkt P und der normalenvektor eine Gerade. Die schneiden wir mit der Ebene und das ergebnis ist der projezierte punkt.

gut, gerade erstellen dürfte kein problem darstellen. schneiden vermutlich auch nicht. Die Ebene ist als Hesse-Normalform bekannt.

ein punkt x liegt in der Ebene, falls gilt: normalenvektor * x = 0
g = P + \lambda *x
x ist schnittpunkt, falls:
normalenvektor * x = P + \lambda *x

Zunächst mal vielen Dank!

Den Projektionspunkt Q (q1|q2|q3) habe ich jetzt: http://file.autohotkey.net/Ace_NoOne/tmp/Projektion.png
Allerdings weiß ich nicht, wie ich daraus nun die 2D-Koordinaten in Relation zur Ebene - also R (r1|r2) - errechne…

http://file.autohotkey.net/Ace_NoOne/tmp/Projektion.png
Allerdings weiß ich nicht, wie ich daraus nun die
2D-Koordinaten in Relation zur Ebene - also
R (r1|r2) - errechne…

Du willst einen Koordinatenwechsel vornehmen, wenn ich dich richtig verstehe.
Stelle dazu die Ebene in der Form E= Aufpunkt + lambda*richtungsvektor1 +mue*richtungsvektor2
dar.
du willst deine Ebene so drehen, das hinterher die darstellung so aussieht:
E= Ursprung + lambda*(1 0 0)transponiert +mue*(0 1 0)
Die Drehmatrix wendest du dann auf den Vektor an, der deinen Punkt beschreibt.
Die drehmatrix ist invers zu folgender:
[richtungsvektor1 richtungsvektor2 drittervektor]
hmm wie sieht der dritte Vektor aus?
nimm den normalenvektor, denn der Steht senkrecht auf der ebene und müsste passen. ich bin mir da jetzt aber auch nicht mehr ganz sicher… am besten du googlest basiswechsel oder basistransformation etc… da findest du dann bestimmt was nettes. Vermutlich kannst du damit die Implementierung auch optimaler gestalten.
grüsse,

Schlorz