変換の向きを選び、円の方程式の係数を入力してください。下の数式は入力欄と連動していて、係数の部分を直接書き換えても計算できます。円と直線の位置関係を調べるときは、一番下の選択欄で「直線 px + qy + s = 0 との位置関係も調べる」を選んでください。
このページでできること
- 円の方程式の一般形 \(x^{2} + y^{2} + lx + my + n = 0\) を平方完成して標準形 \((x - a)^{2} + (y - b)^{2} = r^{2}\) に直し、中心と半径を分数・\(\sqrt{\ }\) の厳密値で求められます(途中式付き)
- 逆に、中心と右辺(半径の2乗)から展開して一般形に直すこともできます
- 右辺の \(r^{2}\) が 0 以下になって「円にならない」ケース(1点だけを表す・図形なし)も、理由付きで判定します
- 直線 \(px + qy + s = 0\) との位置関係(異なる2点で交わる・接する・共有点なし)を、中心と直線の距離 \(d\) と半径 \(r\) の比較で判定し、共有点の座標も厳密値で求められます
- 計算機には手書きと同じ形の円の方程式が表示され、係数の部分を直接書き換えて計算することもできます。計算結果は円と直線の図でも確認できます
この計算は何の役に立つ?
2Dゲームでは、キャラクターや弾の「当たり判定」を円で近似するのが定番の手法です。弾の軌道(直線)が敵の円に当たったかは、まさにこのページの「中心と直線の距離 \(d\) と半径 \(r\) の比較」で判定されています。2つの円が重なったかも、中心どうしの距離を半径の和と比べるという同じ発想の距離比較で判定されます。
円を使うのは、向きが変わっても形が変わらず、距離の計算1回で判定が済むからです。ゲームプログラミングを学ぶと、円の方程式が毎フレーム動いている現場に出会えます。
携帯電話の基地局やWi-Fiルーターの電波が届く範囲は、障害物のない理想的な条件では「アンテナを中心とした円(半径=届く距離)」でモデル化されます。「この場所は圏内か」は、中心からの距離と半径の比較、つまり円の内側か外側かの判定です。
実際の電波は地形や建物の影響を受けるのでこの通りにはなりませんが、基地局をどこに置けばエリアの穴がなくなるかを考える出発点として、円によるモデルが使われています。
GPSの位置測位は「衛星からの距離がわかると、自分のいる場所の候補が球面(平面で考えると円)に絞られる」という考え方に基づいています。複数の衛星からの距離の円(球)を連立して交点を求めることで、現在地が計算されます。
実際には3次元で、時計の誤差の補正なども加わったもっと複雑な計算ですが、「距離が一定の点の集まり=円」という円の方程式の考え方が土台になっています。
機械部品や建築の図面では、ボルト穴・円弧状の縁・配管の断面など、円だらけです。CADソフトは円を「中心の座標と半径」のデータ、つまり標準形の情報として管理していて、円と直線の交点や接線の計算が図形操作のたびに実行されています。
「この位置に穴をあけると縁からの距離が足りるか」のようなチェックも、中心からの距離の計算に帰着します。
道路や鉄道のカーブの基本形は「円曲線」と呼ばれる円弧で、設計図では中心と半径で管理されます。半径が小さいほど急カーブになるため、道路の設計基準は設計速度ごとに使ってよい円曲線の最小半径を定めています。
直線区間とカーブをなめらかにつなぐ場面では「直線と円が接する」条件がそのまま使われており、接線の考え方が現実の道路の形を決めています。
式と図
用語・記号の解説
記号
| \((x,\ y)\) | エックス・ワイ | 円の上を動く点の座標。円の方程式は「この式を満たす \((x,\ y)\) を全部集めると円になる」という意味の式です。 |
| \(a,\ b\) | エー・ビー | 円の中心の座標 \((a,\ b)\) を表す文字。「決まった数」を表すときはアルファベットの最初の方の文字 \(a,\ b,\ c\) を使う慣例があります。動く点の \(x,\ y\) と違って、1つの円では値が固定されています。 |
| \(r\) | アール | 円の半径。radius(半径)の頭文字です。標準形の右辺に現れるのは \(r\) そのものではなく2乗の \(r^{2}\) である点に注意してください。 |
| \(\mathrm{C}\) | シー | 円の中心を表すのによく使われる文字。center(中心)の頭文字です。円そのものを \(C\) と名付けることもあります。 |
| \(l,\ m,\ n\) | エル・エム・エヌ | 一般形 \(x^{2} + y^{2} + lx + my + n = 0\) の係数。教科書によっては \(A,\ B,\ C\) や \(D,\ E,\ F\) と書くこともありますが、意味は同じです。 |
| \(d\) | ディー | 中心と直線の距離。distance(距離)の頭文字です。半径 \(r\) との大小比較で、円と直線の位置関係が決まります。 |
| \(p,\ q,\ s\) | ピー・キュー・エス | このページで直線の式を \(px + qy + s = 0\) と書くときの係数。直線の式は \(ax + by + c = 0\) と書くのが普通ですが、このページでは円の中心 \((a,\ b)\) と文字が重ならないように別の文字を使っています。 |
| \(\sqrt{\ }\) | ルート(根号) | 2乗するとその数になる正の数(平方根)を表す記号。半径は \(r = \sqrt{r^{2}}\) として求めます。例えば \(r^{2} = 8\) なら \(r = \sqrt{8} = 2\sqrt{2}\) です。 |
用語
| 円 | えん | 平面の上で、ある点(中心)からの距離が一定(半径)である点を全部集めてできる図形。この「距離が一定」という定義を式にしたものが円の方程式です。 |
| 円の方程式 | えんのほうていしき | 座標平面の上の円を表す式。式を満たす点 \((x,\ y)\) の集まりがちょうど円になります。高校では数学IIの「図形と方程式」で学びます。 |
| 標準形 | ひょうじゅんけい | \((x - a)^{2} + (y - b)^{2} = r^{2}\) の形。中心 \((a,\ b)\) と半径 \(r\) が式を見ただけで読み取れるのが長所です。 |
| 一般形 | いっぱんけい | 標準形を展開して整理した \(x^{2} + y^{2} + lx + my + n = 0\) の形。中心や半径は直接読み取れませんが、展開済みなので計算の途中で扱いやすい形です。 |
| 平方完成 | へいほうかんせい | \(x^{2} + lx\) のような式を、\(\left(x + \dfrac{l}{2}\right)^{2} - \dfrac{l^{2}}{4}\) のように「(かたまり)の2乗+定数」の形に直す変形。二次関数の頂点を求めるときにも使う、このページの計算の中心となる技術です。 |
| 中心 | ちゅうしん | 円の真ん中の点。円の上のどの点からも距離が等しい(=半径)点です。標準形の \((a,\ b)\) がそのまま中心の座標です。 |
| 半径 | はんけい | 中心から円の上の点までの距離 \(r\) のこと。長さなので必ず正の数です。標準形の右辺 \(r^{2}\) の平方根をとって求めます。 |
| 三平方の定理 | さんへいほうのていり | 直角三角形で「斜辺の2乗=他の2辺の2乗の和」が成り立つという定理(ピタゴラスの定理)。2点間の距離の計算のもとになっていて、円の方程式の標準形はこの定理を式にしたものです。中学3年で学びます。 |
| 共有点 | きょうゆうてん | 2つの図形の両方に含まれる点。円と直線なら、交わるとき2個・接するとき1個・離れているとき0個です。座標は2つの式を連立して求めます。 |
| 接する | せっする | 円と直線がただ1点だけを共有すること。このときの直線を接線(せっせん)、共有点を接点(せってん)といいます。中心と接線の距離はちょうど半径と等しくなります。 |
| 弦 | げん | 円と直線が2点で交わるとき、その2点を結ぶ線分。中心から弦に下ろした垂線は弦をちょうど半分に分けるので、弦の半分・中心と直線の距離 \(d\)・半径 \(r\) が三平方の定理で結ばれます。 |
| 点と直線の距離 | てんとちょくせんのきょり | 点から直線に下ろした垂線の長さ(点から直線への最短距離)。公式 \(d = \dfrac{|ax_0 + by_0 + c|}{\sqrt{a^{2} + b^{2}}}\) で計算でき、円と直線の位置関係の判定に使います。 |
| 判別式 | はんべつしき | 二次方程式 \(ax^{2} + bx + c = 0\) の解の個数を教えてくれる式 \(D = b^{2} - 4ac\) のこと。円と直線の式を連立してできる二次方程式の判別式でも、位置関係を判定できます(\(D > 0\) で2点・\(D = 0\) で接する・\(D < 0\) で共有点なし)。 |
| 座標平面 | ざひょうへいめん | 横の数直線(\(x\) 軸)と縦の数直線(\(y\) 軸)を直角に組み合わせ、点の位置を \((x,\ y)\) の数の組で表せるようにした平面。図形を式で扱う「図形と方程式」の舞台です。 |
前提として理解しておくといいこと
このページの計算を「意味がわかって」使えるようになるために、前提として理解しておくといいことをまとめました。
つまずいたら、この表の内容に戻って復習するのが近道です。
| 座標平面と点の座標(中学1年) |
|
| 三平方の定理と2点間の距離(中学3年) |
|
| 平方根(中学3年) |
|
| 展開・因数分解と平方完成(高校 数学I) |
|
| 点と直線の距離(高校 数学II) |
|
Excelで計算する方法
| x の係数 l | -4 |
| y の係数 m | -6 |
| 定数項 n | 9 |
| 中心の x 座標(−l/2) | =-B1/2 |
| 中心の y 座標(−m/2) | =-B2/2 |
| 半径の2乗 r²(l²/4 + m²/4 − n) | =B1^2/4+B2^2/4-B3 |
| 半径 r(r²>0 のときだけ円) | =IF(B6>0,SQRT(B6),"円にならない") |
| 中心の x 座標 a | 1 |
| 中心の y 座標 b | -2 |
| 右辺の値(半径の2乗 r²) | 9 |
| x の係数 l(−2a) | =-2*B1 |
| y の係数 m(−2b) | =-2*B2 |
| 定数項 n(a² + b² − r²) | =B1^2+B2^2-B3 |
| 中心の x 座標 a | 2 |
| 中心の y 座標 b | 3 |
| 半径 r | 2 |
| 直線の x の係数 p | 3 |
| 直線の y の係数 q | 4 |
| 直線の定数項 s | -8 |
| 中心と直線の距離 d | =ABS(B4*B1+B5*B2+B6)/SQRT(B4^2+B5^2) |
| 位置関係の判定 | =IF(B7<B3,"異なる2点で交わる",IF(B7=B3,"接する","共有点なし")) |
1つ目の表は x²+y²−4x−6y+9=0 の例で、中心 (2, 3)・r²=4・半径 2 になります。r² が 0 以下のときは円にならないので、「円にならない」と表示されます。
2つ目の表は中心 (1, −2)・r²=9 の例で、l=−2・m=4・n=−4、つまり x²+y²−2x+4y−4=0 になります。
3つ目の表は円 (x−2)²+(y−3)²=4 と直線 3x+4y−8=0 の例で、d=2 が半径 2 と等しいので「接する」になります。SQRT の計算は小数の誤差が出ることがあるため、接するかどうかの厳密な判定は d² と r² の比較(=(B4*B1+B5*B2+B6)^2/(B4^2+B5^2) と B3^2 の比較)で行うとより確実です。
Googleスプレッドシートで計算する方法
| x の係数 l | -4 |
| y の係数 m | -6 |
| 定数項 n | 9 |
| 中心の x 座標(−l/2) | =-B1/2 |
| 中心の y 座標(−m/2) | =-B2/2 |
| 半径の2乗 r²(l²/4 + m²/4 − n) | =B1^2/4+B2^2/4-B3 |
| 半径 r(r²>0 のときだけ円) | =IF(B6>0,SQRT(B6),"円にならない") |
| 中心の x 座標 a | 1 |
| 中心の y 座標 b | -2 |
| 右辺の値(半径の2乗 r²) | 9 |
| x の係数 l(−2a) | =-2*B1 |
| y の係数 m(−2b) | =-2*B2 |
| 定数項 n(a² + b² − r²) | =B1^2+B2^2-B3 |
| 中心の x 座標 a | 2 |
| 中心の y 座標 b | 3 |
| 半径 r | 2 |
| 直線の x の係数 p | 3 |
| 直線の y の係数 q | 4 |
| 直線の定数項 s | -8 |
| 中心と直線の距離 d | =ABS(B4*B1+B5*B2+B6)/SQRT(B4^2+B5^2) |
| 位置関係の判定 | =IF(B7<B3,"異なる2点で交わる",IF(B7=B3,"接する","共有点なし")) |
Pythonで計算する方法
from fractions import Fraction
import math
# 一般形 x² + y² + lx + my + n = 0 の係数(3/4 のような分数は Fraction(3, 4) と書ける)
coef_l = Fraction(-4)
coef_m = Fraction(-6)
coef_n = Fraction(9)
center_x = -coef_l / 2
center_y = -coef_m / 2
radius_squared = coef_l ** 2 / 4 + coef_m ** 2 / 4 - coef_n
print(f"中心: ({center_x}, {center_y})")
print(f"半径の2乗 r²: {radius_squared}")
if radius_squared > 0:
print(f"半径 r: {math.sqrt(radius_squared)}")
elif radius_squared == 0:
print("円にはならず、中心の1点だけを表します")
else:
print("円にはならず、この式を満たす点はありません")
# 直線 px + qy + s = 0 との位置関係(d² と r² を分数のまま比べるので誤差なしで判定できる)
line_p = Fraction(3)
line_q = Fraction(4)
line_s = Fraction(-8)
distance_squared = (line_p * center_x + line_q * center_y + line_s) ** 2 / (line_p ** 2 + line_q ** 2)
if distance_squared < radius_squared:
print("円と直線は異なる2点で交わる")
elif distance_squared == radius_squared:
print("円と直線は接する")
else:
print("円と直線に共有点はない")
数式記述言語(LaTeX等)での書き方(コピペ可)
(x − a)² + (y − b)² = r²
(x - a)^{2} + (y - b)^{2} = r^{2}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msup><mrow><mo>(</mo><mi>x</mi><mo>−</mo><mi>a</mi><mo>)</mo></mrow><mn>2</mn></msup>
<mo>+</mo>
<msup><mrow><mo>(</mo><mi>y</mi><mo>−</mo><mi>b</mi><mo>)</mo></mrow><mn>2</mn></msup>
<mo>=</mo>
<msup><mi>r</mi><mn>2</mn></msup>
</mrow>
</math>
(x - a)^2 + (y - b)^2 = r^2
(x - a)^2 + (y - b)^2 == r^2
(x - a)^2 + (y - b)^2 = r^2;
(x - a)^2 + (y - b)^2 == r^2
(x - a)^2 + (y - b)^2 = r^2
(x + l/2)² + (y + m/2)² = l²/4 + m²/4 − n
\left(x + \frac{l}{2}\right)^{2} + \left(y + \frac{m}{2}\right)^{2} = \frac{l^{2}}{4} + \frac{m^{2}}{4} - n
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msup><mrow><mo>(</mo><mi>x</mi><mo>+</mo><mfrac><mi>l</mi><mn>2</mn></mfrac><mo>)</mo></mrow><mn>2</mn></msup>
<mo>+</mo>
<msup><mrow><mo>(</mo><mi>y</mi><mo>+</mo><mfrac><mi>m</mi><mn>2</mn></mfrac><mo>)</mo></mrow><mn>2</mn></msup>
<mo>=</mo>
<mfrac><msup><mi>l</mi><mn>2</mn></msup><mn>4</mn></mfrac>
<mo>+</mo>
<mfrac><msup><mi>m</mi><mn>2</mn></msup><mn>4</mn></mfrac>
<mo>−</mo>
<mi>n</mi>
</mrow>
</math>
(x + l/2)^2 + (y + m/2)^2 = l^2/4 + m^2/4 - n
Simplify[(x + l/2)^2 + (y + m/2)^2 - (l^2/4 + m^2/4 - n) == x^2 + y^2 + l x + m y + n]
Student:-Precalculus:-CompleteSquare(x^2 + y^2 + l*x + m*y + n, [x, y]);
expand((x + l/2)^2 + (y + m/2)^2 - (l^2/4 + m^2/4 - n))
(x + l/2)^2 + (y + m/2)^2 = l^2/4 + m^2/4 - n
d = |pa + qb + s| / √(p² + q²)
d = \frac{\left|pa + qb + s\right|}{\sqrt{p^{2} + q^{2}}}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>d</mi>
<mo>=</mo>
<mfrac>
<mrow><mo>|</mo><mi>p</mi><mi>a</mi><mo>+</mo><mi>q</mi><mi>b</mi><mo>+</mo><mi>s</mi><mo>|</mo></mrow>
<msqrt><mrow><msup><mi>p</mi><mn>2</mn></msup><mo>+</mo><msup><mi>q</mi><mn>2</mn></msup></mrow></msqrt>
</mfrac>
</mrow>
</math>
d = |p a + q b + s| / sqrt(p^2 + q^2)
d = Abs[p a + q b + s]/Sqrt[p^2 + q^2]
d := abs(p*a + q*b + s)/sqrt(p^2 + q^2);
d = abs(p*a + q*b + s)/sqrt(p^2 + q^2);
d = |pa + qb + s|/√(p^2 + q^2)
ChatGPT に聞いて計算してもらう方法
あなたは数学(図形と方程式)の計算アシスタントです。次の計算を、必ずPythonコードを実際に実行して行い、実行結果の数値だけを根拠に回答してください(暗算や推測で答えないでください)。 円の方程式 x² + y² − 4x − 6y + 9 = 0 について、次の内容をそれぞれ示してください。 1. 平方完成して標準形 (x−a)² + (y−b)² = r² に直した式 2. 中心の座標と半径(厳密値で) 3. 直線 3x + 4y − 8 = 0 との位置関係(異なる2点で交わる/接する/共有点なし)と、共有点があればその座標 Pythonでは標準ライブラリの fractions モジュール(または sympy)を使って厳密に計算し、距離と半径の比較は d² と r² の比較で行ってください。計算に使った式と実行結果の数値を示してください。
計算ドリル(演習問題)
このページの式を、自分の手で計算できるようになるための演習問題です。
答えと解説は解答ページにあります。
使い方
-
1数値を入力計算したい数値を入力欄に入力します
-
2計算「計算する」ボタンを押します
-
3結果を確認計算結果がその場に表示されます。計算の考え方や式の解説も同じページで確認できます
DataChefの特徴
専門知識不要、直感的で簡単な操作
個人情報を登録することなく使用できます
「ダウンロード」押下でファイルを自動削除
クレジット表記不要
商用利用許諾の連絡も不要です
