给定2D平面上的两个点,任务是找到穿过给定点的直线的x –截距和y –截距。
例子:
Input: points[][] = {{5, 2}, {2, 7}}
Output:
6.2
10.333333333333334
Input: points[][] = {{3, 2}, {2, 4}}
Output:
4.0
8.0
方法:
- 使用给定的点找到斜率。
- 将斜率的值放在直线的表达式中,即y = mx + c 。
- 现在使用等式y = mx + c中任何给定点的值找到c的值
- 要找到x截距,请将y = 0放入y = mx + c 。
- 要找到y截距,请将x = 0放入y = mx + c 。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to find the X and Y intercepts
// of the line passing through
// the given points
void getXandYintercept(int P[], int Q[])
{
int a = P[1] - Q[1];
int b = P[0] - Q[0];
// if line is parallel to y axis
if (b == 0) {
cout << P[0] << endl; // x - intercept will be p[0]
cout << "infinity"; // y - intercept will be infinity
return;
}
// if line is parallel to x axis
if (a == 0) {
cout << "infinity"; // x - intercept will be infinity
cout << P[1] << endl; // y - intercept will be p[1]
return;
}
// Slope of the line
double m = a / (b * 1.0);
// y = mx + c in where c is unknown
// Use any of the given point to find c
int x = P[0];
int y = P[1];
double c = y - m * x;
// For finding the x-intercept put y = 0
y = 0;
double r = (y - c) / (m * 1.0);
cout << r << endl;
// For finding the y-intercept put x = 0
x = 0;
y = m * x + c;
printf("%.8f", c);
}
// Driver code
int main()
{
int p1[] = { 5, 2 };
int p2[] = { 2, 7 };
getXandYintercept(p1, p2);
return 0;
}
// This code is contributed by Mohit Kumar
Java
// Java implementation of the approach
class GFG {
// Function to find the X and Y intercepts
// of the line passing through
// the given points
static void getXandYintercept(int P[],
int Q[])
{
int a = P[1] - Q[1];
int b = P[0] - Q[0];
// if line is parallel to y axis
if (b == 0) {
// x - intercept will be p[0]
System.out.println(P[0]);
// y - intercept will be infinity
System.out.println("infinity");
return;
}
// if line is parallel to x axis
if (a == 0) {
// x - intercept will be infinity
System.out.println("infinity");
// y - intercept will be p[1]
System.out.println(P[1]);
return;
}
// Slope of the line
double m = a / (b * 1.0);
// y = mx + c in where c is unknown
// Use any of the given point to find c
int x = P[0];
int y = P[1];
double c = y - m * x;
// For finding the x-intercept put y = 0
y = 0;
double r = (y - c) / (m * 1.0);
System.out.println(r);
// For finding the y-intercept put x = 0
x = 0;
y = (int)(m * x + c);
System.out.print(c);
}
// Driver code
public static void main(String[] args)
{
int p1[] = { 5, 2 };
int p2[] = { 2, 7 };
getXandYintercept(p1, p2);
}
}
// This code is contributed by kanugargng
Python3
# Python3 implementation of the approach
# Function to find the X and Y intercepts
# of the line passing through
# the given points
def getXandYintercept(P, Q):
a = P[1] - Q[1]
b = P[0] - Q[0]
# if line is parallel to y axis
if b == 0:
print(P[0]) # x - intercept will be p[0]
print("infinity") # y - intercept will be infinity
return
# if line is parallel to x axis
if a == 0:
print("infinity") # x - intercept will be infinity
print(P[1]) # y - intercept will be p[1]
return
# Slope of the line
m = a / b
# y = mx + c in where c is unknown
# Use any of the given point to find c
x = P[0]
y = P[1]
c = y-m * x
# For finding the x-intercept put y = 0
y = 0
x =(y-c)/m
print(x)
# For finding the y-intercept put x = 0
x = 0
y = m * x + c
print(y)
# Driver code
p1 = [5, 2]
p2 = [7, 2]
getXandYintercept(p1, p2)
C#
// C# implementation of the approach
using System;
class GFG {
// Function to find the X and Y intercepts
// of the line passing through
// the given points
static void getXandYintercept(int[] P,
int[] Q)
{
int a = P[1] - Q[1];
int b = P[0] - Q[0];
// if line is parallel to y axis
if (b == 0) {
Console.WriteLine(P[0]); // x - intercept will be p[0]
Console.WriteLine("infinity"); // y - intercept will be infinity
return;
}
// if line is parallel to x axis
if (a == 0) {
Console.WriteLine("infinity"); // x - intercept will be infinity
Console.WriteLine(P[1]); // y - intercept will be p[1]
return;
}
// Slope of the line
double m = a / (b * 1.0);
// y = mx + c in where c is unknown
// Use any of the given point to find c
int x = P[0];
int y = P[1];
double c = y - m * x;
// For finding the x-intercept put y = 0
y = 0;
double r = (y - c) / (m * 1.0);
Console.WriteLine(r);
// For finding the y-intercept put x = 0
x = 0;
y = (int)(m * x + c);
Console.WriteLine(c);
}
// Driver code
public static void Main()
{
int[] p1 = { 5, 2 };
int[] p2 = { 2, 7 };
getXandYintercept(p1, p2);
}
}
// This code is contributed by AnkitRai01
输出:
6.2
10.33333333333
时间复杂度: O(1)