行列式を使って三角形の面積を計算するC++プログラム
この記事では、行列式(デターミナント)を利用して、2次元座標空間上の三角形の面積を求める方法を解説します。ここでは対象となる空間は2次元であると仮定します。
行列式による面積の求め方
まず、三角形の3つの頂点の座標を1つの行列に配置します。具体的には、x座標を第1列に、y座標を第2列に、そして第3列にはすべて「1」を入れて3×3の行列を作成します。この行列の行列式を計算し、その絶対値の半分が三角形の面積となります。行列式が負の値になった場合でも、絶対値を取れば問題ありません。
$$Area\:=\:absolute\:of\begin{pmatrix}\frac{1}{2} \begin{vmatrix} x_1\:\:y_1\:\:1 \\ x_2\:\:y_2\:\:1 \\ x_3\:\:y_3\:\:1 \end{vmatrix} \end{pmatrix}$$
なお、この方法では3×3の行列を前提としているため、それ以外のサイズの行列に対しては行列式を計算できない点に注意してください。
サンプルコード
#include<iostream>
#include<cmath>
using namespace std;
double det(double M[3][3]) {
double t1 = (M[1][1] * M[2][2])-(M[1][2] * M[2][1]);
double t2 = (M[1][0] * M[2][2])-(M[1][2] * M[2][0]);
double t3 = (M[1][0] * M[2][1])-(M[1][1] * M[2][0]);
return (M[0][0]*t1) + (-M[0][1]*t2) + (M[0][2]*t3);
}
main() {
double M[3][3];
cout << "Enter Point p1 (x, y):";
cin >> M[0][0] >> M[0][1];
M[0][2] = 1;
cout << "Enter Point p2 (x, y):";
cin >> M[1][0] >> M[1][1];
M[1][2] = 1;
cout << "Enter Point p3 (x, y):";
cin >> M[2][0] >> M[2][1];
M[2][2] = 1;
int determinant = det(M);
cout << "The area is: " << fabs(determinant) * 0.5;
}実行結果
Enter Point p1 (x, y):3 4 Enter Point p2 (x, y):6 4 Enter Point p3 (x, y):3 9 The area is: 7.5
このプログラムでは、ユーザーから3つの頂点の座標を入力として受け取り、それぞれを3×3の行列に格納した後、余因子展開によって行列式を計算しています。最後にfabs()関数で絶対値を取り、0.5を掛けることで三角形の面積を出力します。
-
C++で正六角形に内接する最大の三角形の面積を求める方法
本記事では、正六角形に内接する最大の三角形の面積を求める方法を解説します。正六角形の一辺の長さを「a」、その内側に描ける最大の三角形の一辺の長さを「b」とします。図から分かるように、六角形の一辺を利用して三角形を作ると、その一辺は2つの部分に分けられます。このとき、2つの直角三角形が現れます。三平方の定理(ピタゴラスの定理)を用いると、次の関係が成り立ちます。つまり、正六角形に内接する最大の三角形は正三角形となり、その一辺 b は b = √3 × a で表されます。この関係を正三角形の面積の公式に代入すると、最大の三角形の面積は次の式で求められます。面積 = (√3 ÷ 4) × b2 =
-
C++で楕円の面積を求めるプログラムの作成方法
この記事では、C++を使って楕円(だえん)の面積を求める方法を解説します。楕円にはいくつかの重要な構成要素があり、それぞれの意味を理解しておくと計算の仕組みがより明確になります。楕円の主な構成要素要素説明中心楕円の中心点。2つの焦点を結ぶ線分の中点でもあります。長軸楕円における最も長い直径です。短軸楕円における最も短い直径です。弦楕円上の2点を結ぶ線分のことです。焦点楕円を定義する2つの特別な点。図中に示された2点が該当します。通径焦点を通り、長軸に対して垂直な直線(線分)のことです。楕円の面積の公式楕円の面積は、長半径 a と短半径 b を使って次の式で表されます。面積 = π × a ×