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