2012-01-20 11 views
20

Powiedzmy, że mam punkt (x, y, z) i płaszczyznę z punktem (a, b, c) i normalnym (d, e, f). Chcę znaleźć punkt, który jest wynikiem ortogonalnego rzutu pierwszego punktu na płaszczyznę. Używam tego w programowaniu grafiki 3D. Chcę osiągnąć pewien rodzaj obcinania w samolocie.Jak znaleźć rzut ortogonalny punktu na płaszczyznę

Odpowiedz

45

Występ punktu q = (x, y, z) na płaszczyźnie określonej przez punkt p = (a, b, c) i normalnych n = (d, e, f) jest

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

Obliczenie zakłada n jest wektorem jednostkowym.

0

I zostały wdrożone tej funkcji w QT przy użyciu 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

używa tego samego algorytmu, jak w poprzednim, zaakceptowanej odpowiedzi i używa języka nie hasła. Tylko co ta odpowiedź dodaje do zaakceptowanej odpowiedzi? –

Powiązane problemy