📜  程序找到通过2点的线

📅  最后修改于: 2021-04-29 16:28:27             🧑  作者: 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 )。现在,我们找到由这些点形成的直线方程。
任何行都可以表示为
斧+ 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


输出:

The line passing through points P and Q is: 4x + 1y = 14