2012-01-20 13 views
20

Diciamo che ho punto (x, y, z) e piano con punto (a, b, c) e normale (d, e, f). Voglio trovare il punto che è il risultato della proiezione ortogonale del primo punto sul piano. Sto usando questo nella programmazione grafica 3d. Voglio ottenere una sorta di ritaglio sull'aereo.Come trovo la proiezione ortogonale di un punto su un piano

risposta

45

La proiezione di un punto q = (x, y, z) su un piano in un punto p = (a, b, c) e un normale n = (d, e, f) è

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

Questo calcolo presuppone che n è un vettore unitario.

0

Ho implementato questa funzione in Qt usando QVector3D:

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; 
} 
+0

Questo utilizza lo stesso algoritmo come il precedente, risposta accettata e usa un linguaggio non richiesto. Che cosa aggiunge questa risposta alla risposta accettata? –

Problemi correlati