でぶちんさんからの質問

問題
C言語で「二つの座標 A(x1,y1)、B(x2,y2)間の距離」を計算する関数を作成する。

解答
 
2点A、Bから、x軸、y軸に平行な直線を引いて、上図のような直角三角形を作ります。
求める長さは、ABですが、ここでは、△ABCについてのピタゴラスの定理を利用します。
△ABCにおけるピタゴラスの定理は、
 AB2=AC2+BC2
ABは負になることはありませんから、
 AB=√(AC2+BC2) ・・・(1)
と書けます。

ここで、ACはAとBのx座標の差ですから、
 AC=x1−x2 (x1>x2 のとき)
 AC=x2−x1 (x1<x2 のとき) x1=x2 のときは、どちらに含めても良い。
と書けますが、2乗すれば、(x1−x2)2 も (x2−x1)2 も同じ値なので、
 AC2=(x2−x1)2 ・・・(2)
と書けます。

同様に、
 BC2=(y2−y1)2 ・・・(3)
と書けます。

(2),(3) を (1) に代入して、
 AB=√{(x2−x1)2+(y2−y1)2}
を得ます。
2点のx座標が等しい場合(ABがy軸に並行)、y座標が等しい場合(ABがx軸に並行)、
x座標、y座標ともに等しい場合(点Aと点Bが一致する:距離=0)も含め、すべてこの式で
距離を求めることが出来ます。

これをC言語で書くと、

double dist(double x1, double y1, double x2, double y2)
{
  return(sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)));
}

または、直角三角形の斜辺を求める標準関数 hypot を使って
double dist(double x1, double y1, double x2, double y2)
{
  return(hypot(x2-x1,y2-y1));
}
とも書けます。

「算数・数学」の部屋に戻る