📜  检查两条直线是否正交

📅  最后修改于: 2021-05-04 16:40:35             🧑  作者: 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


输出:
Yes