Geometría usando Números Complejos en C++ | conjunto 2

Después de revisar la publicación anterior , sabemos qué son exactamente los números complejos y cómo podemos usarlos para simular puntos en un plano cartesiano. Ahora, tendremos una idea de cómo usar la clase compleja de STL en C++.
Para usar la clase compleja de STL usamos #include <complex>
 

Definición de clase de punto
Podemos definir nuestra clase de punto mediante typedef complex<double> point; al inicio del programa. Las coordenadas X e Y del punto son la parte real e imaginaria del número complejo respectivamente. Para acceder a nuestras coordenadas X e Y, podemos macro las funciones real() e imag() usando #define de la siguiente manera: 
 

# include <complex>
typedef complex<double> point;
# define x real()
# define y imag()

Inconveniente: dado que x e y se han utilizado como macros, no se pueden utilizar como variables. Sin embargo, este inconveniente no se compara con las muchas ventajas que ofrece.
 

CPP

// CPP program to illustrate
// the definition of point class
#include <iostream>
#include <complex>
 
using namespace std;
 
typedef complex<double> point;
 
// X-coordinate is equivalent to the real part
// Y-coordinate is equivalent to the imaginary part
#define x real()
#define y imag()
 
int main()
{
    point P(2.0, 3.0);
    cout << "The X-coordinate of point P is: " << P.x << endl;
    cout << "The Y-coordinate of point P is: " << P.y << endl;
 
    return 0;
}

Producción: 

The X-coordinate of point P is: 2
The Y-coordinate of point P is: 3

Implementación de atributos con respecto a P solo punto P en el plano: 
 

  1. La coordenada X de P: Px
  2. La coordenada Y de P: Py
  3. La distancia de P desde el origen (0, 0): abs(P)
  4. El ángulo formado por OP desde el eje X donde O es el origen: arg(z)
  5. Rotación de P sobre el origen: P * polar(r, θ) 
     

CPP

// CPP program to illustrate
// the implementation of single point attributes
#include <iostream>
#include <complex>
 
using namespace std;
 
typedef complex<double> point;
#define x real()
#define y imag()
 
// The 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;
}
 
int main()
{
    point P(4.0, 3.0);
 
    // X-Coordinate and Y-coordinate
    cout << "The X-coordinate of point P is: " << P.x << endl;
    cout << "The Y-coordinate of point P is: " << P.y << endl;
 
    // Distances of P from origin
    cout << "The distance of point P from origin is: " << abs(P) <<endl;
    cout << "The squared distance of point P from origin is: " << norm(P) <<endl;
 
    // Tangent Angle made by OP with the X-Axis
    cout << "The angle made by OP with the X-Axis is: "
        << arg(P) << " radians" << endl;
    cout << "The angle made by OP with the X-Axis is: "
        << arg(P)*(180/PI) << " degrees" << endl;
 
 
    // Rotation of P about origin
    // The angle of rotation = 90 degrees
    point P_rotated = P * polar(1.0, PI/2);
    cout<<"The point P on rotating 90 degrees anti-clockwise becomes: P_rotated";
    displayPoint(P_rotated);
 
    return 0;
}

Producción: 

The X-coordinate of point P is: 4
The Y-coordinate of point P is: 3
The distance of point P from origin is: 5
The squared distance of point P from origin is: 25
The angle made by OP with the X-Axis is: 0.643501 radians
The angle made by OP with the X-Axis is: 36.8699 degrees
The point P on rotating 90 degrees anti-clockwise becomes: P_rotated(-3, 4)
  1. Suma de vectores: P + Q
  2. Resta de vectores: P – Q
  3. Distancia Euclidiana: abs(P – Q)
  4. Pendiente de la línea PQ: tan(arg(Q – P)) 
     
point A = conj(P) * Q
  1. Producto escalar: Hacha
  2. Magnitud del Producto Cruzado: abs(Ay)

CPP

// CPP program to illustrate
// the implementation of two point attributes
#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;
}
 
int main()
{
    point P(2.0, 3.0);
    point Q(3.0, 4.0);
 
    // Addition and Subtraction
    cout << "Addition of P and Q is: P+Q"; displayPoint(P+Q);
    cout << "Subtraction of P and Q is: P-Q"; displayPoint(P-Q);
 
    // Distances between points P and Q
    cout << "The distance between point P ans Q is: " << abs(P-Q) <<endl;
    cout << "The squared distance between point P ans Q is: " << norm(P-Q) <<endl;
 
    // Slope of line PQ
    cout << "The angle of elevation for line PQ is: "
        << arg(Q-P)*(180/PI) << " degrees" << endl;
    cout << "The slope of line PQ is: " << tan(arg(Q-P)) <<endl;
 
    // Construction of point A
    point A = conj(P)*Q;
 
    // Dot Product and Cross Product
    cout << "The dot product P.Q is: " << A.x << endl;
    cout << "The magnitude of cross product PxQ is: " << abs(A.y) << endl;
 
    return 0;
}

Producción: 
 

Addition of P and Q is: P+Q(5, 7)
Subtraction of P and Q is: P-Q(-1, -1)
The distance between point P ans Q is: 1.41421
The squared distance between point P ans Q is: 2
The angle of elevation for line PQ is: 45 degrees
The slope of line PQ is: 1
The dot product P.Q is: 18
The magnitude of cross product PxQ is: 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 *