セージ の メモ書き

メモこそ命の恩人だ

C# - 三平方の定理

直角三角形

直角三角形 - Wikipedia

  • 角の1つが 直角 (90度) である三角形である。
  • 直角以外の角を 鋭角 と呼ぶ。
  • 直角の対辺を 斜辺 と呼ぶ。残りの辺を 隣辺 と呼ぶ。

三平方の定理 (= ピタゴラスの定理)

ピタゴラスの定理 - Wikipedia

  • 直角三角形の 3辺 の長さの関係を表す定理。
  • ピタゴラス古代ギリシアの数学者である。( 紀元前の人 )
  • 直角三角形の 3辺 の内、2辺 の長さがわかれば、残りの長さがわかる。
  • 定理を使えば、物理的に測定が難しい距離を計算できる。
  • 定理は以下の通り。 ( c : 斜辺, a / b : 隣辺 )

c2 = a2 + b2

証明

上図より、四角形の面積の求め方は2通りある。

c2 + 2ab = (a+b)2

c2 + 2ab = a2 + 2ab + b2

c2 = a2 + b2

サンプル

座標間の距離

public double CalculateDistance(Point point1, Point point2)
{
    var x1 = point1.X;
    var y1 = point1.Y;
    var x2 = point2.X;
    var y2 = point2.Y;

    var a = x2 - x1;
    var b = y2 - y1;
    var cSquared = Math.Pow(a, 2) + Math.Pow(b, 2);
    var c = Math.Sqrt(cSquared);
    return c;
}
Debug.WriteLine(CalculateDistance(new Point(x: 0, y: 4), new Point(x: 3, y: 0)));
// 5

Debug.WriteLine(CalculateDistance(new Point(x: 0, y: -4), new Point(x: 3, y: 0)));
// 5

Debug.WriteLine(CalculateDistance(new Point(x: 0, y: 4), new Point(x: -3, y: 0)));
// 5

Debug.WriteLine(CalculateDistance(new Point(x: 0, y: -4), new Point(x: -3, y: 0)));
// 5

Debug.WriteLine(CalculateDistance(new Point(x: 10, y: 100), new Point(x: 100, y: 10)));
// 127.279220613579

水平線までの距離

  • 以下の情報から計算できる。
    • 地球の半径:6,371 km
    • 人の身長:1.7 m ( = 0.0017 km )

a2 + 63712 = (6371 + 0.0017)2

a2 + 40589641 = 40589662.66140289‬

a2 = 21.66140289

a = 4.65... (km)

他の身長で計算してみる。(半径は地球サイズで固定)

public double CalculateDistance(double height)
{
    const double earthRadius = 6371;
    var heightKm = height / 1000;
    var c = earthRadius + heightKm;
    var b = earthRadius;
    var aSquared = Math.Pow(c, 2) - Math.Pow(b, 2);
    var a = Math.Sqrt(aSquared);
    return a;
}
Debug.WriteLine(CalculateDistance(0.1));
// 1.12880468406631

Debug.WriteLine(CalculateDistance(1.7));
// 4.65418122644532

Debug.WriteLine(CalculateDistance(5));
// 7.98185598749079

Debug.WriteLine(CalculateDistance(10));
// 11.2880512048573

Debug.WriteLine(CalculateDistance(100));
// 35.6960782160778

Debug.WriteLine(CalculateDistance(1000));
// 112.884897129776
身長 (m) 距離 (km)
0.1 1.12
1.7 4.65
5 7.98
10 11.28
100 35.69
1000 112.88

以上