在数学和计算机科学中,找到通过两个点的线的方程是一个基础问题。假设我们有两个点 P1(x1,y1) 和 P2(x2,y2),我们想要找到通过这两个点的直线方程。
直线方程的形式
直线的方程通常表示为 y=mx+b,其中 m 是斜率,b 是 y 轴截距。
计算斜率 m
斜率 m 可以通过以下公式计算:
m=x2−x1y2−y1
计算 y 轴截距 b
一旦我们有了斜率 m,我们就可以通过代入一个点的坐标来找到 y 轴截距 b。使用点 P1(x1,y1):
y1=mx1+b
解这个方程以找到 b:
b=y1−mx1
示例
假设我们有两个点 P1(2,3) 和 P2(4,7)。
- 计算斜率 m:
m=4−27−3=24=2
- 计算 y 轴截距 b:
b=3−2×2=3−4=−1
- 因此,通过点 P1 和 P2 的直线方程是:
y=2x−1
下面举例一些示例图片:



给定坐标平面中的两个点 P 和 Q,求出通过这两个点的直线方程。
 这种转换在许多几何算法中非常有用,例如直线交点、求三角形的外心、求三角形的内心等等……
例子:
输入:P(3, 2) 
         Q(2, 6)
输出:4x + 1y = 14
输入:P(0, 1) 
         Q(2, 4)
输出:3x + -2y = -2
假设给定的两个点分别为 P(x 1 , y 1 ) 和 Q(x 2 , y 2 )。现在,我们找到由这些点形成的直线方程。
 任何直线都可以表示为, 
 ax + by = c 
假设这两个点满足给定的直线。因此,我们有, 
 ax 1 + by 1 = c 
 ax 2 + by 2 = c 
我们可以设置以下值,使得所有方程成立,
a = y 2 - y 1 
 b = x 1 - x 2 
 c = ax 1 + by 1
这些可以通过首先直接获得斜率,然后找到直线的截距来推导。或者也可以通过以下简单的观察巧妙地推导这些:
推导:
ax 1 + by 1 = c ...(i) 
 ax 2 + by 2 = c ...(ii)
 使 (i) 和 (ii) 相等,
 ax 1 + by 1 = ax 2 + by 2 
 => a(x 1 - x 2 ) = b(y 2 - y 1 )
因此,为了使 LHS 和 RHS 相等,我们可以简单地得到,
 a = (y 2 - y 1 ) 
 AND 
 b = (x 1 - x 2 )
 从而得到,
 (y 2 - y 1 )(x 1 - x 2 ) = (x 1 - x 2 )(y 2 - y 1 ) 
 AND
将这些值放入 (i) 中,我们得到,
 c = ax 1 + by 1 
 因此,我们现在有了 a、b 和 c 的值,这意味着我们在坐标平面上有一条线。
编程实现:
// C++ Implementation to find the line passing
 // through two points
 #include <iostream>
 using namespace std;
  
 // This pair is used to store the X and Y
 // coordinate of a point respectively
 #define pdd pair<double, double>
  
 // 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;
 }
输出
经过点 P 和 Q 的直线为:4x + 1y = 14
时间复杂度: O(1)
辅助空间: O(1),因为没有占用额外的空间。



















