檢查三條直線是否共點
這個問題包括檢查給定的三條直線是否共點。如果平面上的三條線都經過同一點,則稱它們為共點線。為了共點,它們必須恰好在一個點相交。

上圖描繪了三條共點線。根據上圖,任意兩條線的交點必須位於第三條線上才能共點。共點是這些線的交點。眾所周知,直線可以用一般的方程表示,例如$\mathrm{a_{1}x=b_{1}y+c_{1}=0}$ 或 $\mathrm{y=mx+c}$
在這個問題中,我們將考慮直線的一般方程。在這個方程中,a1、b1和c1被稱為直線的係數,而x和y代表直線經過的每個點的座標。
在這個問題中,我們將得到三條直線的係數值。我們必須確定這些直線是否共點,並相應地列印輸出。
讓我們透過一些例子更好地理解這個問題
輸入
a=2 , b=-3 , c=4 d=9 , e=5 , f=-19 g=2 , h=-7, i=12
輸出
Yes
解釋:直線的一般形式為$\mathrm{a_{1}x=b_{1}y+c_{1}=0}$。這裡,輸入中的a、b和c是第一條直線的係數,可以寫成2x-3y+4=0。類似地,d、e和f是第二條直線的係數,即9x+5y-19=0,g、h和i是第三條直線的係數,即2x-7y+12=0。這三條直線相交於點(1,2),這就是共點。因此,這些直線是共點線。
輸入
a=6 , b=3 , c=-12 d=2 , e=1 , f=-5 g=5 , h=-1 , i=14
輸出
No
解釋:使用直線的一般方程,我們可以找到使用其係數分別給出的三條直線的方程。這三條直線是6x+3y-12,2x+y-5=0。如果我們觀察前兩條線,它們具有相同的斜率,這意味著它們是平行線,因此這三條線永遠不可能是共點線,因為沒有共同的交點。
為了解決上述問題,我們必須開發一個演算法來檢查給定的三條線是否有任何共同的交點。如果所有線都經過同一點,則存在共點線,否則不存在。我們現在將透過演算法檢查共同的交點。
演算法
假設三條直線的方程為ax+by+c=0、dx+ey+f=0和gx+hy+i=0,其中a、b、c、d、e、f、g、h和i分別是直線的係數,將作為輸入提供。我們需要檢查這三條線是否有任何共同的交點。
共點線只在一個點相交。在數學中,如果三條線共點,則由三條線的係數分別構成的矩陣的行列式值為0。
由三條線的係數構成的矩陣將是
$\mathrm{\begin{vmatrix}a & b & c\\d & e & f\\g & h & i \end{vmatrix}\:=\:0}$
如果給定的線共點,則上述矩陣的行列式將為零。
我們只需要計算由三條線的係數構成的矩陣的行列式值來解決問題。
計算矩陣行列式的公式是
a ∗ (e ∗ i − f ∗ h) − b ∗ (d ∗ i − f ∗ g) + c ∗ (d ∗ h − e ∗ g) = 矩陣的行列式
當將三條線的係數值代入上述公式時,如果結果值為0,則三條線共點。根據數學原理,如果矩陣的行列式值不為0,則給定的線不是共點線。
我們將使用上述公式來確定這些線是否共點。
方法
為了解決這個問題,我們將實現上述演算法。在我們的方法中,必須採取以下步驟
我們將編寫一個函式來確定給定的直線是否共點。
宣告一個變數,然後將其設定為由指定直線的係數構成的矩陣的行列式的值。
我們將檢查變數的值是否為0。如果值為零,我們將返回true。
如果變數的值包含0以外的任何值,我們將返回false。
如果函式返回true,則在驅動程式程式碼中列印三條線共點的語句;否則,列印三條線不共點的語句。
該方法的C++程式碼
例子
#include <bits/stdc++.h>
using namespace std;
//function to check if the three given lines are concurrent or not
bool check(int a, int b, int c,
int d, int e, int f,
int g, int h, int i)
{
//to store the value of determinant of the matrix formed by
//the coefficients of the three lines
long long int ans= (a*(e*i-f*h) - b*(d*i-f*g) + c*(d*h-e*g));
if(ans==0){ //if value of determinant equals 0, they are concurrent
return true;
}
else //the value of determinant of the matrix is any value other than 0
return false;
}
int main()
{
int a, b, c;
int d, e, f;
int g, h, i;
a=3, b=4, c=-13;
d=2, e=-7, f=1;
g=5, h=-1, i=-14;
//to store the output of the function
bool concurrent=check(a,b,c,d,e,f,g,h,i);
if(concurrent==true){ //if function returns true
cout<<"The given three lines are concurrent"<<endl;
}
else //if function returns false
cout<<"The given three lines are not concurrent"<<endl;
return 0;
}
輸出
The given three lines are concurrent
時間複雜度:O(1),因為檢查線是否共點需要常數時間。
空間複雜度:O(1),因為我們沒有使用任何額外的空間。
結論
我們討論了共點線的概念,並提供了一個實用的C++方法來確定給定的三條直線是否共點。我們使用簡單數學概念的方法。
閱讀完這篇文章後,我希望您完全理解解決問題所需的各個概念。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP