C++ 检查三条直线是否共点

C++ 检查三条直线是否共点

该问题包括检查所给定的三条直线是否共点。如果平面上的三条直线都通过同一点,则它们被称为共点。它们必须恰好在一个交点相交才能共点。

C++ 检查三条直线是否共点输入

a=2 , b=-3 , c=4
d=9 , e=5 , f=-19
g=2 , h=-7, i=12

输出

Yes

解释:直线的一般形式是
ax=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++方法来确定所给出的三条直线是否相交。我们使用了直接的数学思想来解决这个问题。

阅读完这篇文章后,希望你完全理解了解决这个问题所需的概念。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程