プログラミングで三角形の面積を求める方法をまとめてみた – KENTEM TechBlog

筆者が携わっている製品では三角形の面積を求めている箇所が多くあります。

三角形の面積を求める方法として底辺×高さ÷2という公式は広く知られています。

しかし、筆者が把握している範囲ではプログラミングでこの式を用いることはあまり見たことがありません。

プログラミングでは三角形の各頂点や各辺の長さの情報から求めることが多いです。

ところが、いざ実装しようとすると「どのような公式があったか」と忘れがちで調べ直すことが多々ありました。

そこで今回は代表的な方法を整理してまとめてみました。

ヘロンの公式は三角形の各辺の長さがわかっている時に用いることができる公式です。

辺の長さを a,  b,  c としたとき、面積 S は半周長 s を用い、下記の式で求めることができます。

 s = \frac{ a + b + c}{2}

  S = \sqrt{s (s - a) (s - b) (s - c)}

public static float AreaByHeron(float a, float b, float c)
{
    float s = (a + b + c) / 2f;
    float areaSquared = s * (s - a) * (s - b) * (s - c);

    return Mathf.Sqrt(areaSquared);
}

Debug.Log(AreaByHeron(5, 12, 13)); 

外積を用いた式は三角形の各点の座標がわかっている時に用いることができる公式です。

3点の座標を  \boldsymbol{A}, \boldsymbol{B}, \boldsymbol{C} としたとき

 S = \frac{ \big | | (\boldsymbol{B} - \boldsymbol{A}) \times (\boldsymbol{C} - \boldsymbol{A} ) | \big|}{2}

Debug.Log(AreaByCrossProduct(new Vector3(0, 0, 0), new Vector3(12, 0, 0), new Vector3(0, 5, 0))); 

public static float AreaByCrossProduct(Vector3 a, Vector3 b, Vector3 c)
{
    Vector3 ab = b - a;
    Vector3 ac = c - a;
    return Vector3.Cross(ab, ac).magnitude * 0.5f;
}

三角関数を用いた式は三角形の2辺の長さ  a,  b とその辺を挟む角度  \thetaがわかっている時に用いることができる公式です。

 S = \frac{ab\sin{\theta}}{2}

Debug.Log(AreaByTrig(5, 12, 90)); 

public static float AreaByTrig(float a, float b, float angleDeg)
{
    float angleRad = angleDeg * Mathf.Deg2Rad;
    return 0.5f * a * b * Mathf.Sin(angleRad);
}

KENTEMでは、様々な拠点でエンジニアを大募集しています!
建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。
recruit.kentem.jp
career.kentem.jp


元の記事を確認する

関連記事