幾何学幾何学
平面上の三角形; 2D Triangle

概要
平面上の三角形は3つのベクトル\(\boldsymbol{v_0},\boldsymbol{v_1},\boldsymbol{v_2}\)で表現される。

面積
三角形の面積\(S\)は以下で与えられる。
\(\quad \displaystyle S = \frac{1}{2} \sqrt{|\boldsymbol{a}|^2 |\boldsymbol{b}|^2 - (\boldsymbol{a} \cdot \boldsymbol{b})^2 } \\ \quad \boldsymbol{a} = \boldsymbol{v_1} - \boldsymbol{v_0}, \quad \boldsymbol{b} = \boldsymbol{v_2} - \boldsymbol{v_0} \quad \)

ソースコード

namespace Geometry.Geometry2D {

    /// <summary>三角形</summary>
    public class Triangle2D {

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

        /// <summary>構成点0</summary>
        public Vector2D V0 { get; set; }
        
        /// <summary>構成点1</summary>
        public Vector2D V1 { get; set; }

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

        /// <summary>面積</summary>
        public double Area {
            get {
                Vector2D a = V1 - V0, b = V2 - V0;
                double inner_product_ab = Vector2D.InnerProduct(a, b);

                return Math.Sqrt(a.SquareNorm * b.SquareNorm - inner_product_ab * inner_product_ab) / 2;
            }
        }

        /// <summary>行列積</summary>
        public static Triangle2D operator *(Matrix2D matrix, Triangle2D triangle) {
            return new Triangle2D(matrix * triangle.V0, matrix * triangle.V1, matrix * triangle.V2);
        }

        /// <summary>不正な三角形</summary>
        public static Triangle2D Invalid => new Triangle2D(Vector2D.Invalid, Vector2D.Invalid, Vector2D.Invalid);

        /// <summary>有効な三角形であるか判定</summary>
        public static bool IsValid(Triangle2D triangle) {
            return Vector2D.IsValid(triangle.V0) && Vector2D.IsValid(triangle.V1) && Vector2D.IsValid(triangle.V2);
        }
    }
}

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

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