Programa para encontrar recta que pasa por 2 Puntos

Dados dos puntos P y Q en el plano de coordenadas, encuentre la ecuación de la línea que pasa por ambos puntos.
Este tipo de conversión es muy útil en muchos algoritmos geométricos como la intersección de líneas, encontrar el circuncentro de un triángulo, encontrar el incentro de un triángulo y muchos más…

Ejemplos: 

Input : P(3, 2)
        Q(2, 6)
Output : 4x + 1y = 14

Input : P(0, 1)
        Q(2, 4)
Output : 3x + -2y = -2

Sean los dos puntos dados P(x 1 , y 1 ) y Q(x 2 , y 2 ). Ahora, encontramos la ecuación de la línea formada por estos puntos.
Cualquier línea se puede representar como, 
ax + by = c 
Deje que los dos puntos satisfagan la línea dada. Entonces, tenemos, 
ax 1 + by 1 = c 
ax 2 + by 2 = c 

Podemos establecer los siguientes valores para que todas las ecuaciones sean verdaderas,  

a = y2 - y1
b = x1 - x2
c = ax1 + by1

Estos se pueden derivar obteniendo primero la pendiente directamente y luego encontrando la intersección de la línea. O estos también se pueden derivar inteligentemente mediante una simple observación como en:

Derivación : 

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 

Por lo tanto, ahora tenemos los valores de a, b y c, lo que significa que tenemos la línea en el plano de coordenadas.

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;
}

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<double, double>
 
# 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

<script>
 
// Javascript implementation to find the
// line passing through two points
 
// Function to find the line given two points
function lineFromPoints(P, Q)
{
    var a = Q[1] - P[1]
    var b = P[0] - Q[0]
    var c = a*(P[0]) + b*(P[1])
 
    if (b < 0)
        document.write("The line passing through " +
                       "points P and Q is:  " + a +
                       "x - " + b + "y = " + c + "<br>")
    else
        document.write("The line passing through " +
                       "points P and Q is:  "+ a + 
                       "x + " + b + "y = " + c + "<br>")
}
 
// Driver code
var P = [ 3, 2 ]
var Q = [ 2, 6 ]
 
lineFromPoints(P, Q)
 
// This code is contributed by akshitsaxenaa09
 
</script>

Producción: 

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

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Este artículo es una contribución de Aanya Jindal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *