web-dev-qa-db-ja.com

3ポイントが与えられた場合、法線ベクトルをどのように計算しますか?

3つの3Dポイント(A、B、C)が与えられた場合、法線ベクトルをどのように計算しますか? 3つの点が平面を定義し、この平面に垂直なベクトルが必要です。

これを示すサンプルC#コードを入手できますか?

26
DenaliHardtail

ポイントの順番によります。ポイントが方向から見て反時計回りの順序で指定されている場合opposing法線であれば、計算は簡単です。

Dir = (B - A) x (C - A)
Norm = Dir / len(Dir)

ここで、xは外積です。

OpenTKまたはXNAを使用している(Vector3クラスにアクセスできる)場合、それは単に次の問題です。

class Triangle {
    Vector3 a, b, c;
    public Vector3 Normal {
        get {
            var dir = Vector3.Cross(b - a, c - a);
            var norm = Vector3.Normalize(dir);
            return norm;
        }
    }
}
37
Frank Krueger

ベクトルBAとBCのクロス積を形成します。 http://mathworld.wolfram.com/CrossProduct.html を参照してください。

4
Steve Emmerson

表面上の任意の2つの非平行ベクトルの クロス積 を計算する必要があります。 3つの点があるので、たとえばベクトルABとACの外積を取ることでこれを理解できます。

これを行うとき、あなたは 表面法線 を計算しています。その中のWikipediaにはかなり広範な説明があります。

1
Todd Gamblin