it-swarm.com.de

Wie finde ich die orthogonale Projektion eines Punktes auf eine Ebene?

Nehmen wir an, ich habe einen Punkt (x, y, z) und eine Ebene mit Punkt (a, b, c) und normal (d, e, f). Ich möchte den Punkt finden, der das Ergebnis der orthogonalen Projektion des ersten Punktes auf die Ebene ist. Ich verwende dies in der 3D-Grafikprogrammierung. Ich möchte eine Art Clipping auf das Flugzeug erreichen.

23
DogDog

Die Projektion eines Punktes q = (x, y, z) auf eine durch einen Punkt p = (a, b, c) und eine normale n = (d, e, f) gegebene Ebene ist

q_proj = q - dot(q - p, n) * n

Diese Berechnung geht davon aus, dass n ein Einheitsvektor ist.

50
antonakos

Ich habe diese Funktion in Qt mit QVector3D implementiert:

QVector3D getPointProjectionInPlane(QVector3D point, QVector3D planePoint, QVector3D planeNormal)
{
    //q_proj = q - dot(q - p, n) * n
    QVector3D normalizedPlaneNormal = planeNormal.normalized();
    QVector3D pointProjection = point - QVector3D::dotProduct(point - planePoint, normalizedPlaneNormal) * normalizedPlaneNormal;
    return pointProjection;
}
1
Fernando