Test Pattern with Processing

We have a couple of students who needed a test pattern printed out. The pattern was basically a circle cut into a given number of pieces of pie. They initially requested 100 “pieces”, but weren’t exactly sure if that was going to be what they wanted. There was no chance I’d be able to draw this by hand, so I wanted to write something that would generate the pattern and be easy to edit so they could generate patterns with a different number of pieces. I thought that Processing would be a good way to do this and it turned out to be very easy, once I remembered two things. One, all angles in Processing should be in radians, so 360 degrees is 2 * PI radians. And two, that [0,0] is the upper left corner of the drawing. Once I had those settled, I wrote the following:

/* draw_segmented_circle_with_arc

Printout of a circle broken up into 100 "pieces of pie"

  all angles are in radians.  PI radians = 180 degrees
  [0,0] is the upper left corner

import processing.pdf.*;

// These are globals since using in both setup and draw
int xsize = 1000;
int ysize = 1000;

void setup()
  // size defines our drawing size
  // Need to add the 10 for when print out
  // noLoop says to run the draw function below only once
  // white background
  // smooth our lines
  // along with drawing the output on the screen, write it to this file

void draw()
  // our stroke is black
  // setup some variables
  int i;
  float x, y, x2, y2;  // positions on the circumference of circle
  int xcenter = 500; // x coordinate of center of circle
  int ycenter = 500; // y coordinate of center of circle
  int r = 450;  // radius of circle
  float number_of_segments = 100.0; // number of segments to break circle into
  float angle = (2 * PI)/number_of_segments; // angle needed for each segment
  arc(xcenter, ycenter, 2*r, 2*r, 0, 2 * PI);
  for (i = 1; i <= number_of_segments; i = i + 1)
    // calculate the x,y coordinate on the circle
    x = r * cos(angle * i) + xcenter;
    y = r * sin(angle * i) + ycenter;
    // draw a line from the center to that point
    line(xcenter, ycenter, x, y);

Just by changing the value in number_of_segments (line 43), they can generate a new test file.

Here's what the original pattern looked like.