给定坐标平面中的两个点 P 和 Q,求通过这两个点的直线的方程。
这种转换在许多几何算法中非常有用,例如线的交点、找到三角形的外心、找到三角形的中心等等……
例子:
Input : P(3, 2)
Q(2, 6)
Output : 4x + 1y = 14
Input : P(0, 1)
Q(2, 4)
Output : 3x + -2y = -2
让给定的两个点是 P(x 1 , y 1 ) 和 Q(x 2 , y 2 )。现在,我们找到由这些点组成的直线方程。
任何一条线都可以表示为,
ax + by = c
让两点满足给定的线。所以,我们有,
斧头1 + 乘以1 = c
斧头2 + 乘以2 = c
我们可以设置以下值,以便所有方程都成立,
a = y2 - y1
b = x1 - x2
c = ax1 + by1
这些可以通过首先直接获得斜率然后找到直线的截距来推导出来。或者这些也可以通过简单的观察巧妙地推导出如下:
推导:
ax1 + by1 = c ...(i)
ax2 + by2 = c ...(ii)
Equating (i) and (ii),
ax1 + by1 = ax2 + by2
=> a(x1 - x2) = b(y2 - y1)
Thus, for equating LHS and RHS, we can simply have,
a = (y2 - y1)
AND
b = (x1 - x2)
so that we have,
(y2 - y1)(x1 - x2) = (x1 - x2)(y2 - y1)
AND
Putting these values in (i), we get,
c = ax1 + by1
因此,我们现在有了 a、b 和 c 的值,这意味着我们在坐标平面中有直线。
C++
// C++ Implementation to find the line passing
// through two points
#include
using namespace std;
// This pair is used to store the X and Y
// coordinate of a point respectively
#define pdd pair
// Function to find the line given two points
void lineFromPoints(pdd P, pdd Q)
{
double a = Q.second - P.second;
double b = P.first - Q.first;
double c = a * (P.first) + b * (P.second);
if (b < 0) {
cout << "The line passing through points P and Q "
"is: "
<< a << "x - " << b << "y = " << c << endl;
}
else {
cout << "The line passing through points P and Q "
"is: "
<< a << "x + " << b << "y = " << c << endl;
}
}
// Driver code
int main()
{
pdd P = make_pair(3, 2);
pdd Q = make_pair(2, 6);
lineFromPoints(P, Q);
return 0;
}
Java
// Java Implementation to find the line passing
// through two points
class GFG {
// This pair is used to store the X and Y
// coordinate of a point respectively
static class Pair {
int first, second;
public Pair(int first, int second)
{
this.first = first;
this.second = second;
}
}
// Function to find the line given two points
static void lineFromPoints(Pair P, Pair Q)
{
int a = Q.second - P.second;
int b = P.first - Q.first;
int c = a * (P.first) + b * (P.second);
if (b < 0) {
System.out.println(
"The line passing through points P and Q is: "
+ a + "x - " + b + "y = " + c);
}
else {
System.out.println(
"The line passing through points P and Q is: "
+ a + "x + " + b + "y = " + c);
}
}
// Driver code
public static void main(String[] args)
{
Pair P = new Pair(3, 2);
Pair Q = new Pair(2, 6);
lineFromPoints(P, Q);
}
}
// This code is contributed by Princi Singh
Python3
# Python3 Implementation to find the line passing
# through two points
# This pair is used to store the X and Y
# coordinate of a point respectively
# define pdd pair
# Function to find the line given two points
def lineFromPoints(P, Q):
a = Q[1] - P[1]
b = P[0] - Q[0]
c = a*(P[0]) + b*(P[1])
if(b < 0):
print("The line passing through points P and Q is:",
a, "x - ", b, "y = ", c, "\n")
else:
print("The line passing through points P and Q is: ",
a, "x + ", b, "y = ", c, "\n")
# Driver code
if __name__ == '__main__':
P = [3, 2]
Q = [2, 6]
lineFromPoints(P, Q)
# This code is contributed by ash264
C#
// C# Implementation to find the line passing
// through two points
using System;
class GFG {
// This pair is used to store the X and Y
// coordinate of a point respectively
public class Pair {
public int first, second;
public Pair(int first, int second)
{
this.first = first;
this.second = second;
}
}
// Function to find the line given two points
static void lineFromPoints(Pair P, Pair Q)
{
int a = Q.second - P.second;
int b = P.first - Q.first;
int c = a * (P.first) + b * (P.second);
if (b < 0) {
Console.WriteLine(
"The line passing through points P and Q is: "
+ a + "x - " + b + "y = " + c);
}
else {
Console.WriteLine(
"The line passing through points P and Q is: "
+ a + "x + " + b + "y = " + c);
}
}
// Driver code
public static void Main(String[] args)
{
Pair P = new Pair(3, 2);
Pair Q = new Pair(2, 6);
lineFromPoints(P, Q);
}
}
// This code has been contributed by 29AjayKumar
Javascript
输出:
The line passing through points P and Q is: 4x + 1y = 14
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。