Dado un punto P en el plano 2-D y la ecuación del espejo, la tarea es encontrar la imagen de ese punto Q formado por el espejo.
La ecuación del espejo tiene la forma ax + by + c =
Ejemplos:
Input : P = (1, 0), a = -1, b = 1, c = 0 Output : Q = (0, 1) Input : P = (3, 3), a = 0, b = 1, c = -2 Output : Q = (3, 1)
Solución :
Let coordinate of P(given point) be (x1, y1) Let coordinate of Q(image point) be (x2, y2) Let coordinate of R(point on mirror) be (x3, y3)
Dado que el objeto y la imagen son equidistantes del espejo, R debe ser el punto medio de P y Q.
Dado que la ecuación del espejo es: ax + by + c = 0. La ecuación de la línea que pasa por P y Q es perpendicular al espejo. Por lo tanto, la ecuación de la línea que pasa por P y Q se convierte en ay – bx + d = 0. También P pasa por la línea que pasa por P y Q, así que ponemos la coordenada de P en la ecuación anterior,
a*y1 – b*x1 + d = 0
d = b*x1 – a*y1
También R es la intersección del espejo y la línea que pasa por P y Q. Entonces encontramos la solución de
ax + by + c = 0
ay -bx + d = 0
Dado que a, b, c, d todos son conocidos, podemos encontrar x e y aquí. Dado que ahora se conocen las coordenadas de R, es decir, ahora se conocen x3, y3.
Como R es el punto medio de PQ,
(x3, y3) = ((x1+x2)/2, (y1+y2)/2)
Dado que se conocen x1, y1, x3, y3, obtenemos la siguiente ecuación donde (x, y) son las coordenadas de Q (punto de imagen)
Usamos la fórmula anterior para encontrar la imagen especular del punto P(x1, y1) con respecto al espejo de la ecuación ax + by + c
C++
// C++ code to find mirror image #include <iostream> using namespace std; // C++ function which finds coordinates // of mirror image. // This function return a pair of double pair<double, double> mirrorImage( double a, double b, double c, double x1, double y1) { double temp = -2 * (a * x1 + b * y1 + c) / (a * a + b * b); double x = temp * a + x1; double y = temp * b + y1; return make_pair(x, y); } // Driver code to test above function int main() { double a = -1.0; double b = 1.0; double c = 0.0; double x1 = 1.0; double y1 = 0.0; pair<double, double> image = mirrorImage(a, b, c, x1, y1); cout << "Image of point (" << x1 << ", " << y1 << ") "; cout << "by mirror (" << a << ")x + (" << b << ")y + (" << c << ") = 0, is :"; cout << "(" << image.first << ", " << image.second << ")" << endl; return 0; }
Java
// Java code to find mirror image class GFG { static class pair { double first, second; public pair(double first, double second) { this.first = first; this.second = second; } } // function which finds coordinates // of mirror image. // This function return a pair of double static pair mirrorImage(double a, double b, double c, double x1, double y1) { double temp = -2 * (a * x1 + b * y1 + c) / (a * a + b * b); double x = temp * a + x1; double y = temp * b + y1; return new pair(x, y); } // Driver code public static void main(String []args) { double a = -1.0; double b = 1.0; double c = 0.0; double x1 = 1.0; double y1 = 0.0; pair image = mirrorImage(a, b, c, x1, y1); System.out.print("Image of point (" + x1 + ", " + y1 + ") "); System.out.print("by mirror (" + a + ")x + (" + b + ")y + (" + c + ") = 0, is :"); System.out.println("(" + image.first + ", " + image.second + ")"); } } // This code is contributed by 29AjayKumar
Python 3
# Python 3 code to find mirror image # Python function which finds coordinates # of mirror image. # This function return a pair of double def mirrorImage( a, b, c, x1, y1): temp = -2 * (a * x1 + b * y1 + c) /(a * a + b * b) x = temp * a + x1 y = temp * b + y1 return (x, y) # Driver code to test above function a = -1.0 b = 1.0 c = 0.0 x1 = 1.0 y1 = 0.0 x, y = mirrorImage(a, b, c, x1, y1); print("Image of point (" + str (x1) + ", " + str( y1) + ") ") print("by mirror (" + str (a) + ")x + (" + str( b) + ")y + (" +str(c) + ") = 0, is :") print( "(" + str(x) + ", " + str(y) + ")" ) # This code is contributed by ApurvaRaj
C#
// C# code to find mirror image using System; class GFG { class pair { public double first, second; public pair(double first, double second) { this.first = first; this.second = second; } } // function which finds coordinates // of mirror image. // This function return a pair of double static pair mirrorImage(double a, double b, double c, double x1, double y1) { double temp = -2 * (a * x1 + b * y1 + c) / (a * a + b * b); double x = temp * a + x1; double y = temp * b + y1; return new pair(x, y); } // Driver code public static void Main(String []args) { double a = -1.0; double b = 1.0; double c = 0.0; double x1 = 1.0; double y1 = 0.0; pair image = mirrorImage(a, b, c, x1, y1); Console.Write("Image of point (" + x1 + ", " + y1 + ") "); Console.Write("by mirror (" + a + ")x + (" + b + ")y + (" + c + ") = 0, is :"); Console.WriteLine("(" + image.first + ", " + image.second + ")"); } } // This code is contributed by PrinciRaj1992
Javascript
<script> // JavaScript code to find mirror image // JavaScript function which finds coordinates // of mirror image. // This function return a pair of double function mirrorImage(a, b, c, x1, y1) { var temp = (-2 * (a * x1 + b * y1 + c)) / (a * a + b * b); var x = temp * a + x1; var y = temp * b + y1; return [x, y]; } // Driver code to test above function var a = -1.0; var b = 1.0; var c = 0.0; var x1 = 1.0; var y1 = 0.0; var [x, y] = mirrorImage(a, b, c, x1, y1); document.write("Image of point (" + x1 + ", " + y1 + ") "); document.write( "by mirror <br> (" + a + ")x + (" + b + ")y + (" + c + ") = 0, is :" ); document.write("(" + x + ", " + y + ")"); </script>
Producción:
Image of point (1, 0) by mirror (-1)x + (1)y + (0) = 0, is :(0, 1)
Complejidad de tiempo: O(1)
Espacio auxiliar: O(1)
Este artículo es una contribución de Pratik Chhajer . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu 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