web-dev-qa-db-ja.com

平面への点の正射影をどのように見つけますか

点(x、y、z)と平面(a、b、c)と法線(d、e、f)がある平面があるとします。平面への最初の点の正射影の結果である点を見つけたいです。私はこれを3Dグラフィックプログラミングで使用しています。飛行機で何らかの切り抜きをしたい。

25
DogDog

q = (x, y, z)と、法線p = (a, b, c)によって与えられる平面への点n = (d, e, f)の投影は、

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

この計算では、nが単位ベクトルであることを前提としています。

53
antonakos

QVector3Dを使用してこの関数をQtに実装しました。

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