给定具有 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 1和m 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