Rotación de un punto sobre otro punto en C++

Ya hemos discutido la rotación de un punto P sobre el origen en el Conjunto 1 y el Conjunto 2 . La rotación del punto P sobre el origen con un ángulo θ en el sentido contrario a las agujas del reloj se da a continuación:

Rotation of P about origin: P * polar(1.0, θ)

Rotación de P sobre el punto Q

Ahora, tenemos que rotar el punto P no sobre el origen sino sobre un punto general Q. Esto se puede entender fácilmente por el método de traslación, que es una técnica bastante común adoptada en el análisis geométrico. ¿Qué es la traducción? En la geometría euclidiana, la traslación es una transformación geométrica que mueve todos los puntos de una figura o un espacio en la misma cantidad en una dirección dada. ¿Cómo realizar la traducción? La traslación también se puede interpretar como la adición de un vector constante a cada punto, o como el desplazamiento del origen del sistema de coordenadas. Después de la traducción, se realizan los cálculos requeridos y la traducción se anula restando el vector constante a cada punto o desplazando el origen hacia atrás.Traducción de ejes de coordenadasEntonces, para rotar P alrededor de Q, cambiamos el origen en Q, es decir, restamos el vector equivalente de Q de cada punto del plano de coordenadas. Ahora el nuevo punto P – Q tiene que ser rotado sobre el origen y luego la traslación tiene que ser anulada. Estos pasos se pueden describir de la siguiente manera:

  1. Traslación (Desplazamiento del origen en Q): Restar Q de todos los puntos. Así, P se convierte en P – Q
  2. Rotación de (P – Q) sobre el origen: (P – Q) * polar(1.0, θ)
  3. Restaurando el Origen: Agrega Q a todos los puntos.

De este modo,

 Rotation of P about Q : (P – Q) * polar(1.0, θ) + Q

CPP

// CPP example to illustrate the rotation
// of a point about another point
#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 Rotation of P about Q by angle theta
point rotate(point P, point Q, double theta)
{
    return (P-Q) * polar(1.0, theta) + Q;
}
 
int main()
{
    // Rotate P about Q
    point P(4.0, 3.0);
    point Q(2.0, 2.0);
 
    // Angle of rotation = 90 degrees
    double theta = PI/2;
     
    point P_rotated = rotate(P, Q, theta);
    cout << "The point P on rotating 90 degrees anti-clockwise about Q becomes:";
    cout << "P_rotated"; displayPoint(P_rotated);
 
    return 0;
}

Producción:

The point P on rotating 90 degrees anti-clockwise about Q becomes: P_rotated(1, 4)

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Este artículo es una contribución de 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 *