Making Circles With a Set Radius

The following flowchart describes the final algorithm for creating a circle with a given R:

This algorithm also works well for all other regular polygons. 

Keep track of variables! The code below uses lowercase variables n and r for the same variables we have been calling N and R so far.  The code comments can help you if you get confused. 

/*
Final Circle Polygon Algorithm.c
Makes the ActivityBot do a circle or regular polygon
(By Nikos Giannakopoulos)

N = 3 equilateral triangle, N = 4 square, N = 5 regular
pentagon, N = 6 regular hexagon....N = number of polygon's
vertices and sides, N >= 36 circle

R = the radius of one circle (unit in mm) or of the circle
in which the polygon is registered.
*/
#include "simpletools.h"             // Include simpletools
#include "abdrive.h"

int main()                           // Main function
{
float pi, ext_pol_angle,side;

int n = 36;                          // N = number of polygon's vertices

int r = 150;                         // R = the radius of the circle in
                                     // which the polygon is registered
                                     // (unit = mm)  e.g. r = 150mm

pi = 4 * atan(1);                    // the number ᴨ = 3.14 tan(ᴨ/4) = 1

ext_pol_angle = 2 * pi / n;          // external angle of the polygon in rad

int ticks_for_angle = round(ext_pol_angle * (52.9/2.35)); // number of ticks
                                                          // for drive_goto to
                                                          // make robot turn the
                                                          // external angle

side = sqrt(2) * r * sqrt(1-cos(2*pi/n));   // side length of the regular polygon

int Side_ticks = round(side/3.25);   // number of ticks for drive_goto to drive
                                     // the side length of the polygon

for (int i = 1; i <= n; i++)         // repeats forward and right turn commands
                                     // N times to complete the polygon shape
 
  {
   drive_goto(Side_ticks,Side_ticks);   // Move forward
   pause(10);
   drive_goto(ticks_for_angle, -ticks_for_angle);   // Turn right or left
   pause(10);    
  }  
}

As you can see, the program could also make your ActivityBot form any regular polygon within a circle of radius r. Below are some polygons and circles that you can make with your AcrivityBot by changing the values of variables n and r in the above code.

 

Try This

  • Try altering the code slightly so that the robot moves counterclockwise instead of clockwise.  Remember that to go counterclockwise, you need to change make changes to the drive_goto command parameters. Check the bottom of the page on Calcuating Angles of Rotation if you need a refresher on how to do that.