C++で2点を通る直線の方程式を求めるプログラムの作成方法
この記事では、座標平面上の2点AとBの座標が与えられたとき、その2点を通る直線の方程式を求めるC++プログラムの作成方法を解説します。
問題の概要
直線を求めるには、直線の方程式を利用し、与えられた座標を代入して解を導く必要があります。
例を使って問題を確認しましょう−
入力: A = (3, 3)、B = (6, 1)
出力: 2x + 3y = 15
解き方のアプローチ
直線の方程式を求めるには、直線の一般形を使用します。
ax + by = c
この式は、2点 A(x1, y1) と B(x2, y2) の両方を満たす必要があります。
すると、次の2つの連立方程式が得られます。
ax1 + by1 = c
ax2 + by2 = c
cはどちらの式でも共通であるため、以下の関係が成り立ちます。
ax1 + by1 = ax2 + by2
=> ax1 - ax2 = by2 - by1
整理すると、次の結果が得られます。
a = (y2 - y1)、b = (x1 - x2)
cは次の式から求められます。
ax1 + by1 = c
したがって、2点を通る直線の方程式は以下の式で表されます。
a = (y2 - y1)、b = (x1 - x2)、c = ax1 + by1
サンプルコード
#include <iostream>
using namespace std;
void findLine(int points[2][2]) {
int a = points[1][1] - points[0][1];
int b = points[0][0] - points[1][0];
int c = a * points[0][0] + b * points[0][1];
cout << "(" << a << "x) + (" << b << "y) = (" << c << ")";
}
int main() {
int points[2][2] = {{5, 9}, {1, 4}};
cout << "The equation of line is ";
findLine(points);
return 0;
}このプログラムでは、findLine関数が2点の座標を2次元配列として受け取り、先ほど導出した式に基づいて係数a、b、cを計算し、直線の方程式を標準出力に表示します。main関数では、点(5, 9)と点(1, 4)を例として使用しています。
出力結果
The equation of line is (-5x) + (4y) = (11)
まとめ
2点を通る直線の方程式は、連立方程式を解くことで係数a、b、cを求めることができます。計算式はシンプルで、a = y2 - y1、b = x1 - x2、c = ax1 + by1 とするだけで、任意の2点を通る直線を表現できます。座標計算を扱うプログラムの基礎として、ぜひ活用してください。
-
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++で同一直線上に存在する最大点数を求めるアルゴリズム
問題概要 2次元平面上に複数の点が与えられたとき、同じ直線上に存在する点の最大数を求めるのがこの問題の目的です。 例えば、下図のような6つの点が与えられた場合、最も多くの点が乗っている直線上には4つの点が存在します。 解法のアプローチ この問題は、隣り合う2点を通る直線を基準にして、残りのすべての点がその直線上に乗っているかどうかを順番に判定していくことで解けます。 3点 (x1, y1)、(x2, y2)、(x3, y3) が同一直線上にあるかどうかは、「傾きが等しい」こと、すなわち外積(クロス積)が0になることを利用して判定できます。 (y3 − y2) × (x2 − x1) = (