📜  寻找通过 2 点的线的程序

📅  最后修改于: 2021-10-23 09:10:42             🧑  作者: Mango

给定坐标平面中的两个点 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 现场工作专业课程学生竞争性编程现场课程