幾何学幾何学
空間上の四面体; 3D Tetrahedron

概要
空間上の四面体は4つのベクトル\(\boldsymbol{v_0},\boldsymbol{v_1},\boldsymbol{v_2},\boldsymbol{v_3}\)で表現される。

体積
四面体の体積\(V\)は以下で与えられる。
\(\quad \displaystyle V = \frac{1}{6} | ((\boldsymbol{v_1}-\boldsymbol{v_0}) \times (\boldsymbol{v_2}-\boldsymbol{v_0})) \cdot (\boldsymbol{v_3}-\boldsymbol{v_0}) | \)


ソースコード

namespace Geometry.Geometry3D {

    /// <summary>四面体</summary>
    public class Tetrahedron3D {

        /// <summary>コンストラクタ</summary>
        public Tetrahedron3D(Vector3D v0, Vector3D v1, Vector3D v2, Vector3D v3) {
            this.V0 = v0;
            this.V1 = v1;
            this.V2 = v2;
            this.V3 = v3;
        }

        /// <summary>構成点0</summary>
        public Vector3D V0 { get; set; }

        /// <summary>構成点1</summary>
        public Vector3D V1 { get; set; }

        /// <summary>構成点2</summary>
        public Vector3D V2 { get; set; }

        /// <summary>構成点3</summary>
        public Vector3D V3 { get; set; }

        /// <summary>面積</summary>
        public double Area {
            get {
                Triangle3D t123 = new Triangle3D(V1, V2, V3), t023 = new Triangle3D(V0, V2, V3), t013 = new Triangle3D(V0, V1, V3), t012 = new Triangle3D(V0, V1, V2);

                return t123.Area + t023.Area + t013.Area + t012.Area;
            }
        }

        /// <summary>体積</summary>
        public double Volume{
            get {
                return Math.Abs(Vector3D.InnerProduct((V1 - V0) * (V2 - V0), V3 - V0)) / 6;
            }
        }
        /// <summary>行列積</summary>
        public static Tetrahedron3D operator *(Matrix3D matrix, Tetrahedron3D tetrahedron) {
            return new Tetrahedron3D(matrix * tetrahedron.V0, matrix * tetrahedron.V1, matrix * tetrahedron.V2, matrix * tetrahedron.V3);
        }

        /// <summary>不正な四面体</summary>
        public static Tetrahedron3D Invalid => new Tetrahedron3D(Vector3D.Invalid, Vector3D.Invalid, Vector3D.Invalid, Vector3D.Invalid);

        /// <summary>有効な四面体であるか判定</summary>
        public static bool IsValid(Tetrahedron3D tetrahedron) {
            return Vector3D.IsValid(tetrahedron.V0) && Vector3D.IsValid(tetrahedron.V1) && Vector3D.IsValid(tetrahedron.V2) && Vector3D.IsValid(tetrahedron.V3);
        }
    }
}

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

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