点1と点2の座標を入力すると、2点間の距離を計算します。距離と同時に、2点を通る直線の傾きと直線の方程式も表示します。
目次
このページでできること
- 2点の座標を入れるだけで、2点間の距離 \(d\) がその場でわかります
- 距離と同時に、xの増加量 \(\Delta x\)・yの増加量 \(\Delta y\)・直線の傾き \(m\)・2点を通る直線の方程式 \(y = mx + b\) もまとめて計算します
- 計算結果はグラフでも表示され、「求めた距離が2点を結ぶ線分の長さである」ことが図で確認できます
- 式のやさしい解説・Excel/Googleスプレッドシート/Python用のコピペ数式・計算ドリル(演習問題)もこのページにまとまっています
この計算は何の役に立つ?
2Dゲームでは、自分のキャラクターと敵・アイテムの位置を座標で管理し、「距離が一定以下になったら当たり」と判定します。例えば自機が(1, 1)、敵が(4, 5)にいれば距離は \(\sqrt{3^2 + 4^2} = 5\) です。この計算をくり返しているのが、距離を使った当たり判定の正体です。
ゲーム開発の入門で最初に書く実用的な数式の一つが、この距離の公式です。
測量の世界では、土地の境界点や工事の基準点を「平面直角座標」という座標の数値で管理しています。2つの点の座標がわかれば、その間の水平距離はこのページの距離の公式で計算できます。
道路や建物の位置決めなど、社会のインフラづくりを支える計算です(なお、緯度・経度から地球の丸みを考えて距離を求める場合は、これとは別の計算式が使われます)。
データ分析では、例えば「身長と体重」のような2つの数値の組を座標平面上の点とみなし、点同士の距離が近いほど「似ているデータ」と考えます。この距離(ユークリッド距離)を使って、似た顧客をグループ分けしたり(クラスタリング)、近くのデータから予測したり(k近傍法)します。
AI・機械学習の教科書に必ず出てくる距離の測り方の基本が、このページの式です。
設計図やCADでは、部品の穴の中心などの位置を座標で指定します。図面に直接書かれていない「2つの穴の中心間の斜めの距離」は、座標の差から距離の公式で求められます。
例えば横に30mm・縦に40mm離れた2つの穴の中心間距離は \(\sqrt{30^2 + 40^2} = 50\)mm。加工や検査の現場で日常的に使われる計算です。
式と図
用語・記号の解説
記号
| \(d\) | ディー | 2点間の距離。distance(距離)の頭文字です。 |
| \((x_1, y_1)\), \((x_2, y_2)\) | エックスいち・ワイいち エックスワン・ワイワン | 2つの点の座標。\(x\) が横方向、\(y\) が縦方向の位置で、右下の小さい数字(添え字)は「1つ目の点・2つ目の点」の区別です。 |
| \(\Delta x\), \(\Delta y\) | デルタエックス、デルタワイ | 増加量(座標の差)。\(\Delta\)(デルタ)は「変化・差」を表すギリシャ文字で、\(\Delta x = x_2 - x_1\)、\(\Delta y = y_2 - y_1\) です。 |
| \(\sqrt{\phantom{a}}\) | ルート 根号(こんごう) | 平方根(2乗するとその数になる数)を表す記号。\(\sqrt{25} = 5\)(5² = 25 だから)。距離の公式では最後に1回だけルートをとります。 |
| \(m\) | エム | 2点を通る直線の傾き。「横に1進むごとに縦にいくつ変わるか」を表します。プラスなら右上がり、マイナスなら右下がりです。 |
| \(b\) | ビー | y切片。直線がy軸と交わる高さ(\(x = 0\) のときの \(y\) の値)です。 |
用語
| 座標 | ざひょう | 点の位置を(横の位置, 縦の位置)の数の組で表したもの。点(4, 5)は「原点から右へ4、上へ5」の位置です。中学1年で学びます。 |
| 座標平面 | ざひょうへいめん | 横のx軸と縦のy軸で位置を表す平面。このページの距離は、座標平面の上の2点をまっすぐ結んだ長さです。 |
| 線分 | せんぶん | 2つの点を端としてまっすぐ結んだ線。2点間の距離とは、この線分の長さのことです。 |
| 三平方の定理 | さんへいほうのていり | 直角三角形で「直角をはさむ2辺の2乗の和 = 斜辺の2乗」が成り立つという定理(ピタゴラスの定理)。距離の公式はこの定理を座標に当てはめたものです。中学3年で学びます。 |
| 斜辺 | しゃへん | 直角三角形で直角の向かい側にある、一番長い辺。距離の公式では、2点を結ぶ線分が直角三角形の斜辺にあたります。 |
| ユークリッド距離 | ユークリッドきょり | このページで計算している「2点をまっすぐ結んだ距離」の正式な呼び名。データ分析やAIの分野で、点同士の近さを測る基本の距離としてこの名前がよく使われます。 |
| 傾き | かたむき | 直線の傾き具合を表す数。「xが1増えるとyがいくつ増えるか」で、中学2年の一次関数で習う「変化の割合」と同じものです。 |
| 垂直な直線 | すいちょくなちょくせん | x軸に垂直な(真上に伸びる)直線。x座標が同じ2点を通る直線がこれで、xの増加量が0なので傾きは定義できません。式は \(x = 定数\) の形になります。 |
前提として理解しておくといいこと
このページの計算を「意味がわかって」使えるようになるために、前提として理解しておくといいことをまとめました。
つまずいたら、この表の内容に戻って復習するのが近道です。
| 座標平面(中学1年) |
|
| 正の数・負の数の計算(中学1年) |
|
| 平方根(中学3年) |
|
| 三平方の定理(中学3年) |
|
| 一次関数(中学2年) |
|
Excelで計算する方法
| 点1のx座標 x₁ | 1 |
| 点1のy座標 y₁ | 1 |
| 点2のx座標 x₂ | 4 |
| 点2のy座標 y₂ | 5 |
| 2点間の距離 d | =SQRT((B3-B1)^2+(B4-B2)^2) |
| 点1のx座標 x₁ | 1 |
| 点1のy座標 y₁ | 1 |
| 点2のx座標 x₂ | 4 |
| 点2のy座標 y₂ | 5 |
| xの増加量 Δx | =B3-B1 |
| yの増加量 Δy | =B4-B2 |
| 2乗の和 Δx²+Δy² | =B5^2+B6^2 |
| 2点間の距離 d | =SQRT(B7) |
| 点1のx座標 x₁ | 1 |
| 点1のy座標 y₁ | 5 |
| 点2のx座標 x₂ | 3 |
| 点2のy座標 y₂ | 2 |
| 傾き m | =(B4-B2)/(B3-B1) |
| y切片 b | =B2-B5*B1 |
「SQRT(…)」は平方根、「^2」は2乗の意味です。
1つ目の表なら距離5、2つ目の表はΔx=3・Δy=4・2乗の和25から同じ距離5が求められ、途中の値も確認できます。
3つ目の表は傾き−1.5とy切片6.5(直線の式 y = −1.5x + 6.5)になります。2点のx座標が同じときは0で割ることになりエラー(#DIV/0!)が出ますが、これは「傾きが定義できない(垂直な直線)」という意味です。
Googleスプレッドシートで計算する方法
| 点1のx座標 x₁ | 1 |
| 点1のy座標 y₁ | 1 |
| 点2のx座標 x₂ | 4 |
| 点2のy座標 y₂ | 5 |
| 2点間の距離 d | =SQRT((B3-B1)^2+(B4-B2)^2) |
| 点1のx座標 x₁ | 1 |
| 点1のy座標 y₁ | 1 |
| 点2のx座標 x₂ | 4 |
| 点2のy座標 y₂ | 5 |
| xの増加量 Δx | =B3-B1 |
| yの増加量 Δy | =B4-B2 |
| 2乗の和 Δx²+Δy² | =B5^2+B6^2 |
| 2点間の距離 d | =SQRT(B7) |
| 点1のx座標 x₁ | 1 |
| 点1のy座標 y₁ | 5 |
| 点2のx座標 x₂ | 3 |
| 点2のy座標 y₂ | 2 |
| 傾き m | =(B4-B2)/(B3-B1) |
| y切片 b | =B2-B5*B1 |
Pythonで計算する方法
import math
x1, y1 = 1.0, 1.0 # 点1の座標
x2, y2 = 4.0, 5.0 # 点2の座標
delta_x = x2 - x1 # xの増加量
delta_y = y2 - y1 # yの増加量
distance = math.hypot(delta_x, delta_y) # 2点間の距離(√(Δx²+Δy²)と同じ)
print(f"2点間の距離 d: {distance}")
# おまけ:2点を通る直線の傾きと直線の式(Δxが0=垂直な直線のときは定義できない)
if delta_x != 0:
slope = delta_y / delta_x # 傾きm
y_intercept = y1 - slope * x1 # y切片b
sign = "+" if y_intercept >= 0 else "-" # y切片がマイナスのとき「+ -0.3」表示にならないように符号を分ける
print(f"傾き m: {slope}")
print(f"y切片 b: {y_intercept}")
print(f"直線の式: y = {slope}x {sign} {abs(y_intercept)}")
else:
print(f"垂直な直線(x = {x1})なので傾きは定義できません")
数式記述言語(LaTeX等)での書き方(コピペ可)
d = √((x₂ − x₁)² + (y₂ − y₁)²)
d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>d</mi>
<mo>=</mo>
<msqrt>
<mrow>
<msup>
<mrow><mo>(</mo><msub><mi>x</mi><mn>2</mn></msub><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub><mo>)</mo></mrow>
<mn>2</mn>
</msup>
<mo>+</mo>
<msup>
<mrow><mo>(</mo><msub><mi>y</mi><mn>2</mn></msub><mo>−</mo><msub><mi>y</mi><mn>1</mn></msub><mo>)</mo></mrow>
<mn>2</mn>
</msup>
</mrow>
</msqrt>
</mrow>
</math>
d = sqrt((x_2 - x_1)^2 + (y_2 - y_1)^2)
Sqrt[(x2 - x1)^2 + (y2 - y1)^2]
d := sqrt((x2 - x1)^2 + (y2 - y1)^2);
d = sqrt((x2 - x1)^2 + (y2 - y1)^2);
d = √((x_2 - x_1)^2 + (y_2 - y_1)^2)
Δx² + Δy² = d²
\Delta x^2 + \Delta y^2 = d^2
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msup><mrow><mi mathvariant="normal">Δ</mi><mi>x</mi></mrow><mn>2</mn></msup>
<mo>+</mo>
<msup><mrow><mi mathvariant="normal">Δ</mi><mi>y</mi></mrow><mn>2</mn></msup>
<mo>=</mo>
<msup><mi>d</mi><mn>2</mn></msup>
</mrow>
</math>
(Delta x)^2 + (Delta y)^2 = d^2
dx^2 + dy^2 == d^2
dx^2 + dy^2 = d^2;
dx^2 + dy^2 == d^2
Δx^2 + Δy^2 = d^2
m = (y₂ − y₁) ÷ (x₂ − x₁), y = mx + b (b = y₁ − m·x₁)
m = \frac{y_2 - y_1}{x_2 - x_1}, \quad y = mx + b, \quad b = y_1 - m x_1
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>m</mi>
<mo>=</mo>
<mfrac>
<mrow><msub><mi>y</mi><mn>2</mn></msub><mo>−</mo><msub><mi>y</mi><mn>1</mn></msub></mrow>
<mrow><msub><mi>x</mi><mn>2</mn></msub><mo>−</mo><msub><mi>x</mi><mn>1</mn></msub></mrow>
</mfrac>
<mo>,</mo>
<mi>y</mi>
<mo>=</mo>
<mi>m</mi><mi>x</mi>
<mo>+</mo>
<mi>b</mi>
<mo>,</mo>
<mi>b</mi>
<mo>=</mo>
<msub><mi>y</mi><mn>1</mn></msub>
<mo>−</mo>
<mi>m</mi><msub><mi>x</mi><mn>1</mn></msub>
</mrow>
</math>
m = (y_2 - y_1)/(x_2 - x_1), y = m x + b, b = y_1 - m x_1
m = (y2 - y1)/(x2 - x1); b = y1 - m*x1; y = m*x + b
m := (y2 - y1)/(x2 - x1); b := y1 - m*x1; y := m*x + b;
m = (y2 - y1)/(x2 - x1); b = y1 - m*x1; y = m*x + b;
m = (y_2 - y_1)/(x_2 - x_1), y = mx + b, b = y_1 - mx_1
ChatGPT に聞いて計算してもらう方法
あなたは数学の計算アシスタントです。次の計算を、必ずPythonコードを実際に実行して行い、実行結果の数値だけを根拠に回答してください(暗算や推測で答えないでください)。 座標平面上の2点 (1, 1) と (4, 5) について、次の値をそれぞれ求めてください。 1. 2点間の距離 d(距離の公式 d = √((x2−x1)² + (y2−y1)²) を使う) 2. xの増加量 Δx と yの増加量 Δy 3. この2点を通る直線の傾き m と、直線の方程式 y = mx + b(y切片bの値も示す) 計算に使った式と、実行結果の数値を示してください。
計算ドリル(演習問題)
このページの式を、自分の手で計算できるようになるための演習問題です。
答えと解説は解答ページにあります。
使い方
-
1数値を入力計算したい数値を入力欄に入力します
-
2計算「計算する」ボタンを押します
-
3結果を確認計算結果がその場に表示されます。計算の考え方や式の解説も同じページで確認できます
DataChefの特徴
専門知識不要、直感的で簡単な操作
個人情報を登録することなく使用できます
「ダウンロード」押下でファイルを自動削除
クレジット表記不要
商用利用許諾の連絡も不要です
