Encuentra la imagen especular de un punto en un plano 2-D

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)
 

2-D plane

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

Deja una respuesta

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