幾何学幾何学
空間上の平面; 3D Plane

概要
空間上の平面は平面の方程式\(a x + b y + cz + d = 0 \)で表現される。
この平面の法線ベクトルは\(\boldsymbol{v_n}=(a, b, c)^T \)である。

3点を通る平面
3つのベクトル\(\boldsymbol{v_0}, \boldsymbol{v_1}, \boldsymbol{v_2} \)を通る平面の法線ベクトル\(\boldsymbol{v_n}\)とパラメータ\(d\)は以下で与えられる。

\( \quad \displaystyle \boldsymbol{v_n} = (\boldsymbol{v_1} - \boldsymbol{v_0}) \times (\boldsymbol{v_2} - \boldsymbol{v_0}) \\ \quad d = -(a v_{0x} + b v_{0y} + c v_{0z}) \)

ソースコード

namespace Geometry.Geometry3D {

    /// <summary>平面</summary>
    /// <remarks>方程式 : ax + by + cz + d = 0</remarks>
    public class Plane3D {
        Vector3D normal;

        /// <summary>コンストラクタ</summary>
        public Plane3D(Vector3D normal, double d) {
            this.Normal = normal;
            this.D = d;
        }

        /// <summary>コンストラクタ</summary>
        public Plane3D(Vector3D normal, Vector3D v) {
            this.Normal = normal;
            this.D = -(A * v.X + B * v.Y + C * v.Z);
        }

        /// <summary>コンストラクタ</summary>
        public Plane3D(Vector3D v0, Vector3D v1, Vector3D v2) {
            this.Normal = (v1 - v0) * (v2 - v0);
            this.D = -(A * v0.X + B * v0.Y + C * v0.Z);
        }

        /// <summary>法線ベクトル</summary>
        public Vector3D Normal {
            get {
                return normal;
            }
            set {
                normal = value.Normal;
            }
        }

        /// <summary>A</summary>
        public double A => Normal.X;

        /// <summary>B</summary>
        public double B => Normal.Y;

        /// <summary>C</summary>
        public double C => Normal.Z;

        /// <summary>D</summary>
        public double D { get; set; }

        /// <summary>不正な平面</summary>
        public static Plane3D Invalid => new Plane3D(Vector3D.Invalid, double.NaN);

        /// <summary>有効な平面であるか判定</summary>
        public static bool IsValid(Plane3D plane) {
            return Vector3D.IsValid(plane.Normal) && !Vector3D.IsZero(plane.Normal) && !double.IsNaN(plane.D) && !double.IsInfinity(plane.D);
        }
    }
}

関連項目
空間ベクトル
空間上の同次変換行列
空間上の線分
空間上の直線
空間上の三角形
空間上の円
空間上の球体
空間上の四面体
空間上の交差
四元数
空間上の平面 単体テスト

ライブラリライブラリ
確率統計確率統計
線形代数線形代数
幾何学幾何学
最適化最適化
微分方程式微分方程式
画像処理画像処理
補間補間
機械学習機械学習
クラスタリングクラスタリング
パズルゲーム・パズル
未分類未分類