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θ.

Categories | About |     |  

Parveen,

The Plan

  1. Obtain an angle from the user.
  2. Convert to radians.
  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;

  // convert to radians 
  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


This Blog Post/Article "C/C++ Program to draw an angle with stars" by Parveen is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Comments and Discussion