Stars


  // Routines for drawing stars and asters  - Jim Bumgardner
  
  void setup()
  {
    size(500, 250);
    smooth();
    noLoop();
  }
  
  
  // Only looks star-like if skipPoints is relatively prime with nbrPoints
  void drawStar(int nbrPoints, float cx, float cy, float odiam, int skipPoints )
  {
    float orad = odiam / 2.0;
  
    pushMatrix();
    translate(cx, cy);
    rotate(radians(-90)); // Point upwards  
  
    float  a = TWO_PI / nbrPoints;
  
    beginShape();
    int  n = 0;
    for (int i = 0; i < nbrPoints; ++i) {
      vertex( cos( a * n) * orad, sin( a * n) * orad);
      n += skipPoints;
    }
    endShape(CLOSE);
    popMatrix();
  }
  
  void drawAster(int nbrPoints, float cx, float cy, float odiam, float idiamRatio)
  {
    float orad = odiam / 2;
    float irad = orad * idiamRatio;
   
    pushMatrix();
    translate(cx, cy);
    rotate(radians(-90)); // Point upwards  
  
    float  a = TWO_PI / nbrPoints;
  
    beginShape();
    for (int i = 0; i < nbrPoints; ++i) {
      vertex( cos( a * i) * orad, sin( a * i) * orad);
      vertex( cos( a * (i+.5)) * irad, sin( a * (i+.5)) * irad);
    }
    endShape(CLOSE);
    popMatrix();
  }
  
  void draw()
  {
  
    background(0);
  
    // Dim randomized stars on background
    stroke(100);
    strokeWeight(.5);
    noFill();
    for (int y = 0; y < height; y += 24) {
      for (int x = 0; x < width; x += 24) {
        
        if (random(2) < 1) {
          int nbrPoints = ((int)random(2,6))*2+1;
          int skipPoints = (int) (nbrPoints/2);
          drawStar(nbrPoints, x, y, 24, skipPoints);
        } else {
          int nbrPoints = (int)random(5,13);
          drawAster(nbrPoints, x, y, 24, random(.1,.6));
        }
      }
    }
  
    stroke(#FFCC00);
    strokeWeight(2);
    noFill();
  
    drawStar(5, width*1/5, height*1/4, height*.4, 2);
    drawAster(5, width*2/4, height*1/4, height*.4, .25);
    drawAster(5, width*4/5, height*1/4, height*.4, .55);
  
    noStroke();
    fill(#FFCC00);
  
    drawStar(5, width*1/5, height*3/4, height*.4, 2);
    drawAster(5, width*2/4, height*3/4, height*.4, .25);
    drawAster(5, width*4/5, height*3/4, height*.4, .55);
  
  }