C++で線分が原点を通るかどうかを判定する方法
この記事では、与えられた線分が原点(0, 0)を通過するかどうかをC++で判定する方法を解説します。判定には、線分の両端を表す2つの座標点を使用します。
判定の考え方
アプローチは非常にシンプルです。まず2つの座標点から直線の方程式を導き、そこに (0, 0) を代入します。その結果、方程式が成立すれば、その直線は原点を通過していると判断できます。
2点をそれぞれ (x₁, y₁) と (x₂, y₂) とすると、この2点を通る直線の方程式は次のように表されます。
$$y-y_{1}=\left(\frac{y_{2}-y_{1}}{x_{2}-x_{1}}\right)*\lgroup x-x_{1}\rgroup$$
ここに x = 0、y = 0 を代入すると、次の条件式が得られます。
$$x_{1}\lgroup y_{2}-y_{1}\rgroup=y_{1}\lgroup x_{2}-x_{1}\rgroup$$
つまり、この等式が成り立てば線分は原点を通り、成り立たなければ原点は通らないことになります。
C++での実装例
#include<iostream>
using namespace std;
bool checkPassOrigin(int x1, int y1, int x2, int y2) {
return (x1 * (y2 - y1) == y1 * (x2 - x1));
}
int main() {
if (checkPassOrigin(10, 0, 20, 0) == true)
cout << "Passes Through Origin";
else
cout << "Not Passing Through Origin";
}出力結果
Passes Through Origin
この例では、点 (10, 0) と (20, 0) を結ぶ線分をチェックしています。両方の点のy座標が0であるため、この直線はx軸上にあり、原点を通過することが確認できます。
補足ポイント
- x₁ = x₂ の場合、傾きが定義できず垂直な直線となるため、別途ゼロ除算への注意が必要です。
- 整数演算ではオーバーフローに注意し、必要に応じてlong long型などを使用しましょう。
-
C++で線分の中点を求める方法とサンプルコード
本記事では、C++を使って線分の中点(ミッドポイント)を求めるプログラムの作成方法を解説します。線分の始点Aと終点Bの2つの座標が与えられたとき、その中点を計算するアルゴリズムについて学びましょう。 問題の概要 始点A(x1, y1)と終点B(x2, y2)で構成される線分があります。この線分の中点を求めるのが課題です。 入力例 a(x1, y1) = (4, -5) b(x2, y2) = (-2, 6) 出力例 (1, 0.5) 計算の説明 (x1 + x2)/2 = (4 + (-2)) / 2 = 1 (y1 + y2)/2 = (-5 + 6) / 2 = 0.5 解決アプローチ:中
-
C++で直線が円に接するか交わるかを判定する方法
円と1本の直線があるとします。この課題では、直線が円に接するか、交わるか、あるいは円の外側を通るかを判定します。つまり、直線と円の位置関係には次の3つの場合が考えられます。判定の手順この問題は、以下の手順で解くことができます。円の中心から直線までの垂線の長さ P を求める垂線の長さ P と半径 r を比較するP > r の場合:直線は円の外側を通るP = r の場合:直線は円に接するP < r の場合:直線は円と交わる(円の内部を通る)垂線の距離を求める公式直線が ax + by + c = 0 で表され、円の中心点が (h, k) の場合、中心から直線までの垂線の距離は次の公式で