# Geometry using Complex Numbers in C++ | Set 2

After going through previous post, we know what exactly are complex numbers and how we can use them to simulate points in a cartesian plane. Now, we will have an insight as to how to use the complex class from STL in C++.

To use the complex class from STL we use #include <complex>

Defining Point Class

We can define our point class by typedef complex<double> point; at the start of the program. The X and Y coordinates of the point are the real and imaginary part of the complex number respectively. To access our X- and Y-coordinates, we can macro the real() and imag() functions by using #define as follows:

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

Drawback: Since x and y have been used as macros, these can’t be used as variables. However, this drawback doesn’t stand in front of the many advantages this serves.

 `// CPP program to illustrate  ` `// the definition of point class ` `#include ` `#include ` ` `  `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; ` `} `

Output:

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

Implementation of attributes with respect to P single point P in plane:

1. The X coordinate of P: P.x
2. The Y coordinate of P: P.y
3. The distance of P from origin (0, 0): abs(P)
4. The angle made by OP from the X-Axis where O is the origin: arg(z)
5. Rotation of P about origin: P * polar(r, θ)

 `// CPP program to illustrate ` `// the implementation of single point attributes ` `#include ` `#include ` ` `  `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 coordiantes 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 orgin is: "` `<< ``abs``(P) <

Output:

```The X-coordinate of point P is: 4
The Y-coordinate of point P is: 3
The distance of point P from orgin is: 5
The squared distance of point P from orgin is: 25
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)
```
6. Let us consider points P (a, b) and Q (c, d) on the Euclidean Plane.
Implementation of attributes with respect to P and Q.

7. Vector Addition: P + Q
8. Vector Subtraction: P – Q
9. Euclidean Distance: abs(P – Q)
10. Slope of line PQ: tan(arg(Q – P))
`point A = conj(P) * Q`
11. Dot Product: A.x
12. Magnitude of Cross Product: abs(A.y)

 `// CPP program to illustrate  ` `// the implementation of two point attributes ` `#include ` `#include ` ` `  `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 coordiantes 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) <

Output:

```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
```

This article is contributed by Aanya Jindal. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.