Example Code 2

Class Code

//Feb 12, 2020
float maxSize = 100;
float minSize = 30;
void setup(){
  size( 600, 600);
  colorMode(HSB, 360, 100, 100, 100);//HSBA
}

 void draw(){
  //select 2 colors for positive region
  color c1Pos = color( 280, 100, 100);//purple
  color c2Pos = color(80, 100, 100);//

  if(mousePressed){
     translate( mouseX, mouseY); //move origin to mouse position
     posRecursivePattern( maxSize, 5,c1Pos, c2Pos);
     resetMatrix();
  }

 }


 //repeat of a shape with varying size and color
 void posRecursivePattern(float size,  int count, color c1, color c2  ){
   if( count <0){ //test for termination
     return; //end function execution
   }

   float fraction = map( size, minSize, maxSize, 0.0, 1.0);
   color c3 = lerpColor( c1, c2, fraction); //0, c1....1, c2 
   PShape s1 = customPosShape(size, c3 );  //create our shape
   shape( s1, 0,0); //render the shape to the canvas

   posRecursivePattern(size*0.8, count-1, c1, c2 );
 }

//function to create a custom shape
PShape customPosShape( float len, color cfground ){
  PShape s; //declare our first object-type variable //heap - object memory
  fill( cfground);//attempt to set color for the shape
  s = createShape( );//initialize our shape
  s.beginShape();
  s.vertex( 0,0  ); //1 x, y points
  s.vertex(.5 * len , 0 ); //2
  s.vertex(len , .5* len ); //3
  s.vertex(.5 * len , len  );//4
  s.vertex( 0,  .5* len ); //5
  s.vertex( 0, 0 ); //6


  s.beginContour(); //make internal cutout 
  s.vertex( len*.25,len*.45); //inner cutouts - point 5
  s.vertex(len*.6, len*.6);  // 
  s.vertex( len*.45, len*.25); // 
  s.vertex(0,0);
  s.endContour(); //end internal cutout


  s.endShape();
  //shape( s, 0,0);  //render to the canvas
  return s; //return the PShape
}

Last updated