📜  检查两条直线是否正交

📅  最后修改于: 2021-10-23 08:38:02             🧑  作者: Mango

给定具有 A(x 1 , y 1 )、B(x 2 , y 2 )、C(x 3 , y 3 ) 和 D(x 4 , y 4 ) 的两条线段 AB 和 CD。任务是检查这两条线是否正交。如果两条线在交点处垂直,则称它们为正交。

例子:

Input: x1 = 0, y1 = 3, x2 = 0, y2 = -5
        x3 = 2, y3 = 0, x4 = -1, y4 = 0
Output: Yes

Input:  x1 = 0, y1 = 4, x2 = 0, y2 = -9
        x3 = 2, y3 = 0, x4 = -1, y4 = 0
Output: Yes

方法:如果两条线的斜率分别为m 1m 2那么为了使它们正交,我们需要检查是否:

  • 两条线都有无限斜率,那么答案是否定的。
  • 一条线具有无限斜率,如果另一条线具有 0 斜率,则答案为是,否则为否。
  • 两条线的斜率都是有限的,它们的乘积是-1,那么答案是肯定的。

下面是上述方法的实现:

C++
// C++ implementation of above approach
#include 
using namespace std;
 
// Function to check if two straight
// lines are orthogonal or not
bool checkOrtho(int x1, int y1, int x2, int y2,
                int x3, int y3, int x4, int y4)
{
 
    int m1, m2;
 
    // Both lines have infinite slope
    if (x2 - x1 == 0 && x4 - x3 == 0)
        return false;
 
    // Only line 1 has infinite slope
    else if (x2 - x1 == 0) {
 
        m2 = (y4 - y3) / (x4 - x3);
 
        if (m2 == 0)
            return true;
        else
            return false;
    }
 
    // Only line 2 has infinite slope
    else if (x4 - x3 == 0) {
 
        m1 = (y2 - y1) / (x2 - x1);
 
        if (m1 == 0)
            return true;
        else
            return false;
    }
 
    else {
        // Find slopes of the lines
        m1 = (y2 - y1) / (x2 - x1);
        m2 = (y4 - y3) / (x4 - x3);
 
        // Check if their product is -1
        if (m1 * m2 == -1)
            return true;
        else
            return false;
    }
}
 
// Driver code
int main()
{
    int x1 = 0, y1 = 4, x2 = 0, y2 = -9;
    int x3 = 2, y3 = 0, x4 = -1, y4 = 0;
 
    checkOrtho(x1, y1, x2, y2, x3, y3, x4, y4) ? cout << "Yes"
                                               : cout << "No";
 
    return 0;
}


Java
//Java implementation of above approach
 
import java.io.*;
 
class GFG {
     
    // Function to check if two straight
    // lines are orthogonal or not
    static boolean checkOrtho(int x1, int y1, int x2, int y2,
                    int x3, int y3, int x4, int y4)
    {
 
        int m1, m2;
     
        // Both lines have infinite slope
        if (x2 - x1 == 0 && x4 - x3 == 0)
            return false;
 
        // Only line 1 has infinite slope
        else if (x2 - x1 == 0)
        {
            m2 = (y4 - y3) / (x4 - x3);
            if (m2 == 0)
                return true;
            else
                return false;
        }
 
        // Only line 2 has infinite slope
        else if (x4 - x3 == 0)
        {
             m1 = (y2 - y1) / (x2 - x1);
            if (m1 == 0)
                return true;
            else
                return false;
        }
 
        else
        {
            // Find slopes of the lines
            m1 = (y2 - y1) / (x2 - x1);
            m2 = (y4 - y3) / (x4 - x3);
 
            // Check if their product is -1
            if (m1 * m2 == -1)
                return true;
            else
                return false;
        }
    }
 
    // Driver code
    public static void main (String[] args)
    {
        int x1 = 0, y1 = 4, x2 = 0, y2 = -9;
        int x3 = 2, y3 = 0, x4 = -1, y4 = 0;
 
        if(checkOrtho(x1, y1, x2, y2, x3, y3, x4, y4)==true)
            System.out.println ("Yes");
        else
            System.out.println("No" );
    }
}
 
//This code is contributed by akt_mit..


Python3
# Python 3 implementation of above approach
 
# Function to check if two straight
# lines are orthogonal or not
def checkOrtho(x1, y1, x2, y2, x3, y3, x4, y4):
     
    # Both lines have infinite slope
    if (x2 - x1 == 0 and x4 - x3 == 0):
        return False
 
    # Only line 1 has infinite slope
    elif (x2 - x1 == 0):
        m2 = (y4 - y3) / (x4 - x3)
 
        if (m2 == 0):
            return True
        else:
            return False
 
    # Only line 2 has infinite slope
    elif (x4 - x3 == 0):
        m1 = (y2 - y1) / (x2 - x1);
 
        if (m1 == 0):
            return True
        else:
            return False
 
    else:
         
        # Find slopes of the lines
        m1 = (y2 - y1) / (x2 - x1)
        m2 = (y4 - y3) / (x4 - x3)
 
        # Check if their product is -1
        if (m1 * m2 == -1):
            return True
        else:
            return False
     
# Driver code
if __name__ == '__main__':
    x1 = 0
    y1 = 4
    x2 = 0
    y2 = -9
    x3 = 2
    y3 = 0
    x4 = -1
    y4 = 0
     
    if(checkOrtho(x1, y1, x2, y2,
                  x3, y3, x4, y4)):
        print("Yes")
    else:
        print("No")
 
# This code is contributed by
# Shashank_Sharma


C#
// C# implementation of above approach
using System;
 
class GFG
{
     
    // Function to check if two straight
    // lines are orthogonal or not
    static bool checkOrtho(int x1, int y1, int x2, int y2,
                    int x3, int y3, int x4, int y4)
    {
 
        int m1, m2;
     
        // Both lines have infinite slope
        if (x2 - x1 == 0 && x4 - x3 == 0)
            return false;
 
        // Only line 1 has infinite slope
        else if (x2 - x1 == 0)
        {
            m2 = (y4 - y3) / (x4 - x3);
            if (m2 == 0)
                return true;
            else
                return false;
        }
 
        // Only line 2 has infinite slope
        else if (x4 - x3 == 0)
        {
            m1 = (y2 - y1) / (x2 - x1);
            if (m1 == 0)
                return true;
            else
                return false;
        }
 
        else
        {
            // Find slopes of the lines
            m1 = (y2 - y1) / (x2 - x1);
            m2 = (y4 - y3) / (x4 - x3);
 
            // Check if their product is -1
            if (m1 * m2 == -1)
                return true;
            else
                return false;
        }
    }
 
    // Driver code
    public static void Main ()
    {
        int x1 = 0, y1 = 4, x2 = 0, y2 = -9;
        int x3 = 2, y3 = 0, x4 = -1, y4 = 0;
 
        if(checkOrtho(x1, y1, x2, y2, x3, y3, x4, y4) == true)
            Console.WriteLine("Yes");
        else
            Console.WriteLine("No" );
    }
}
 
// This code is contributed by Ryuga


PHP


Javascript


输出:
Yes