Reflexión de un punto sobre una línea en C++

Primero consideremos un caso general donde la línea no es más que el eje X. Ahora definitivamente podemos decir que el conjugado de un punto es el reflejo del punto sobre el eje X.
Ahora, usando los métodos de traslación y rotación de ejes de coordenadas encontraremos la reflexión de un punto sobre la recta genérica. 
La idea de la traducción se describió en la publicación anterior. Aquí describimos la idea de rotación. 
¿Qué es la rotación?  
En geometría euclidiana, una rotación de ejes en dos dimensiones es un mapeo de un sistema de coordenadas cartesianas xy a un sistema de coordenadas cartesianas x’y’ en el que el origen se mantiene fijo y los ejes x’ e y’ se obtienen rotando los ejes x e y a través de un ángulo θ. 
¿Cómo realizar la rotación? 
La rotación se puede interpretar como la multiplicación (rotación en sentido contrario a las agujas del reloj) o la división (rotación en el sentido de las agujas del reloj) de cada punto del sistema de coordenadas por un vector constante. 
Note aquí que si queremos rotar un punto por θ en dirección contraria a las manecillas del reloj alrededor del origen, lo multiplicamos por polar (1.0, θ) como se discutió en el CONJUNTO 1 . De manera similar, dividimos por polar (1.0, θ) para rotar el punto por θ en el sentido de las agujas del reloj. 
Después de la rotación, se realizan los cálculos necesarios y la rotación se anula dividiendo o multiplicando cada punto por el vector constante, respectivamente.
Entonces, tenemos que reflejar un punto P sobre una línea especificada por los puntos A y B denotados como AB. Ya que sabemos que el conjugado de un punto es el reflejo del punto sobre el eje X. Para poder usar este hecho, primero realizaremos la traslación (haciendo que A sea el origen en el nuevo sistema) y luego rotaremos los ejes de coordenadas de tal manera que la línea se convierta en el eje X en el nuevo sistema de coordenadas. 
Ahora podemos simplemente aplicar la fórmula para la reflexión sobre el eje X y luego anular los efectos de rotación y traslación para obtener el resultado final.
Estos pasos se pueden describir de la siguiente manera: 
 

1.Traslación (Desplazamiento del origen en A): Reste A de todos los puntos. 
 

Pt = P – A
Bt = B – A
At is origin

2. Rotación (desplazamiento de B t A t al eje X): divida todos los puntos por B t (dividir significa girar en el sentido de las agujas del reloj, que es el requisito aquí para activar el eje X). 
 

Pr = Pt/Bt 

3. Reflexión de P r sobre B r A r (que no es más que el eje X): simplemente tome el conjugado del punto. 
 

Prreflected = conj(Pr) 

4. Restauración desde la rotación: multiplique todos los puntos por Bt. 
 

Ptreflected= conj(Pr)*Bt 

5. Restauración desde la traducción: agregue A a todos los puntos. 
P reflejada = conj(P r )*B t + A

De este modo, 
 

return conj(Pr)*Bt + A
where, Bt = B – A 
Pt = P – A 
Pr = Pt/Bt

Rotation of Coordinate Axes

CPP

// CPP example to illustrate the
// reflection of a point about a line
#include <iostream>
#include <complex>
 
using namespace std;
 
typedef complex<double> point;
#define x real()
#define y imag()
 
// Constant PI for providing angles in radians
#define PI 3.1415926535897932384626
 
// Function used to display X and Y coordinates of a point
void displayPoint(point P)
{
    cout << "(" << P.x << ", " << P.y << ")" << endl;
}
 
// Function for Reflection of P about line AB
point reflect(point P, point A, point B)
{
    // Performing translation and shifting origin at A
    point Pt = P-A;
    point Bt = B-A;
 
    // Performing rotation in clockwise direction
    // BtAt becomes the X-Axis in the new coordinate system
    point Pr = Pt/Bt;
 
    // Reflection of Pr about the new X-Axis
    // Followed by restoring from rotation
    // Followed by restoring from translation
 
    return conj(Pr)*Bt + A;
}
 
int main()
{
    // Rotate P about line AB
    point P(4.0, 7.0);
    point A(1.0, 1.0);
    point B(3.0, 3.0);
 
     
    point P_reflected = reflect(P, A, B);
    cout << "The point P on reflecting about AB becomes:";
    cout << "P_reflected"; displayPoint(P_reflected);
 
    return 0;
}

Producción: 
 

The point P on reflecting about AB becomes: P_reflected(7, 4)

Tiempo Complejidad: O(1) 
Espacio Auxiliar: O(1)

Este artículo es una contribución de Aarti_Rathi y Aanya Jindal . 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 *