# C/C++ Program to draw an angle with stars

The following program draws two arms of a given angle. The horizontal arm is fairly simple. But the inclined arm is drawn by using a 2-D array by filling stars in those elements that satisfy the equation y = x tanθ.
(Rev. 27-Oct-2023)

## Categories | About | |

,

### The Plan

1. Obtain an angle from the user.
3. Create a canvas of a blank 2D char array.
4. Run a loop over each element to check whether the point lies on (y = 0, x > 0) or (y - x tanθ). The tolerance is ±0.75 so that we can have as many points, for better looks.
5. Finally print the array.
6. The math function from the C- library is tan (double), which requires a double value. So we have used double throughout, but it may not be optimal.

### Pre-requisites

We are going to use a canvas of 2D array to implement this program. For a better understanding please refer the article(s):

### The Source Code

You can copy paste this directly into your cpp file and compile

```#include <iostream>

#include <cstdio>

#include <cmath>

using namespace std;

int main()
{

const double PI = 3.14;

double angle;

cout << "Angle in degree?:";

cin >> angle;

double radians = (PI * angle)/180.0;

// prepare the canvas
const int DIMEN = 24;

// fill the canvas with NULLs
char canvas [DIMEN][DIMEN] = {{0}};

for(int row = 0; row < DIMEN; row++)
{

for(int col = 0; col < DIMEN; col++)
{

// origin is at the center,
// so obtain the x and y coord-
//-inates of each element with
// respect to the middle
double x = col - DIMEN/2;

double y = DIMEN/2 - row;

if(y < 0)
{

continue;

}

// equation to be plotted: y = mx
// y = x tanθ
double eqn = y - x * tan(radians);

// select all those points that
// satisfy the above line,
// tolerance of ±0.75 so that
// more points can be shown
// and also select all
// those as lie on the "horizontal
// arm" of the angle towards
// the +x side
if(
(abs(eqn) <= 0.75)
||
((0 == y) && (x >= 0)
)
)
{

canvas[row][col] = '*';

}

}

}

// print
for(int row = 0; row < DIMEN; row++)
{

for(int col = 0; col < DIMEN; col++)
{

// THERE IS A SPACE AFTER %c
// ... done for nicer looks
printf("%c ", canvas[row][col]);

}

cout << endl;

}

printf("Angle: %0.2f degree\n",angle);

return 0;

}

```

### The Output

The output may be a bit distorted.

```
Angle in degree?:45

*
*
*
*
*
*
*
*
*
*
*
* * * * * * * * * * * *

Angle drawn: 45.00 degree

```