でぶちんさんからの質問
問題
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));
}
とも書けます。
「算数・数学」の部屋に戻る