平面と点が与えられた場合、点が平面のどちら側にあるかをどのように判断できますか?


8

ポイントを考えると

Vector pos = new Vector(0.0, 0.20156815648078918, -78.30000305175781, 1.0);

と平面(三角形)

Vector a = new Vector(-6.599999904632568, 0.0, -78.5, 1.0);
Vector b = new Vector(6.599999904632568, 0.0, -78.5, 1.0);
Vector c = new Vector(6.599999904632568, 4.400000095367432, -78.5, 1.0);

の方向を指す平面法線を取得したい pos

//Getting plane normal
Vector ac = Vector.Subtract(a,c);
Vector bc = Vector.Subtract(b,c);
Vector planeNormal = Vector.CrossProduct(bc, ac);

//Testing which side of the plane the point is on
double dprod = Vector.DotProduct(planeNormal, pos);
if (dprod < 0)
{
    planeNormal.Negate();
}

しかし、この方法は間違っています。結果のplaneNormalポイントは負のZ方向を指すため、無効にしないでください。このためのベストプラクティスはありますか?私を助けてください、私は@数学で大失敗します:)


ライティング計算に同様の方法を使用している場合は、法線を正規化します。
レイ・デイ

回答:


9

あなたの方法はほとんど正しいですが、1つのステップを逃しています。点積を取得するためのベクトルとして点の位置を単純に使用することはできません。平面上の点から方向ベクトルを作成する必要があります。平面上の任意のポイントで実行できるため(方向は正確である必要はありません)、いずれかのコーナーを使用します。


涼しい。平面上のどの点を選択することが重要でないのですか?
Cameron

なぜなら、最後にドット積から正または負のみを探しているからです。計算された正確な値に関係なく、内積は、一方を指すベクトルの場合は正で、もう一方を指すベクトルの場合は負になります。
ジョッキング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.