//Wendi Lee
//THANKSGIVING~!!
//SEEE the possibilities of blening R,G&B~!
Dot myDotA; 
Dot myDotB; 
Dot myDotC;  
Dot2 myDotA2;
Dot2 myDotB2;
Dot2 myDotC2;
Dot3 myDotA3; 
Dot3 myDotB3; 
Dot3 myDotC3; 
Dot4 myDotA4; 
Dot myDotD; 
Dot myDotE; 
Dot myDotF;  
Dot2 myDotD2;
Dot2 myDotE2;
Dot2 myDotF2;
Dot3 myDotD3; 
Dot3 myDotE3; 
Dot3 myDotF3; 
Dot4 myDotD4; 
int r;
void setup() 
{ 
  size(300, 300); 
  framerate(60); 
  noStroke(); 
  smooth();
  float r= random(0,255);

   float xdepos=random(0,300);
  float ydepos=random(0,180);
  // Construct each object 
  myDotA = new Dot(30, height/2,random(3.0,4.0), 10.0,10.0, 1); 
  myDotC = new Dot(200, height/1.7,random(3.0,4.0), 10.0,10.0, 1); 
  myDotB = new Dot(100, height/2.2, random(5.0,5.5), 10.0, 10.0,1); 
 myDotA2 = new Dot2(250, height/3,random(3.0,3.5), 10.0,10.0, 1); 
myDotB2 = new Dot2(145, height/3.2,random(1.0,2.0), 10.0,10.0, 1); 
myDotC2 = new Dot2(270, height/3.5,random(1.0,2.0), 10.0,10.0, 1); 
myDotA3 = new Dot3(100, height/1.5,random(2.0,2.5), 10.0,10.0, 1); 
myDotB3 = new Dot3(200, height/1.4,random(5.0,5.5), 10.0,10.0, 1); 
myDotC3 = new Dot3(49, height/1.2,random(3.0,3.5), 10.0,10.0, 1); 
 myDotA4 = new Dot4(100, height/3.1,random(4.0,4.5), 10.0,10.0, 1); 
 
 myDotD = new Dot(70, height/0.3,random(1.0,4.0), 10.0,10.0, 1); 
  myDotE = new Dot(100, height/2.2,random(3.0,4.0), 10.0,10.0, 1); 
  myDotF = new Dot(190, height/2.7, random(5.0,5.5), 10.0, 10.0,1); 
 myDotD2 = new Dot2(270, height/1.8,random(3.0,3.5), 10.0,10.0, 1); 
myDotE2 = new Dot2(245, height/2.4,random(3.0,4.0), 10.0,10.0, 1); 
myDotF2 = new Dot2(170, height/1.5,random(1.0,2.0), 10.0,10.0, 1); 
myDotD3 = new Dot3(60, height/3.5,random(6.0,6.5), 10.0,10.0, 1); 
myDotE3 = new Dot3(210, height/2.1,random(5.0,5.5), 10.0,10.0, 1); 
myDotF3 = new Dot3(29, height/1.1,random(3.0,3.5), 10.0,10.0, 1); 
 myDotD4 = new Dot4(30, height/3,random(5.0,5.5), 10.0,10.0, 1); 
 
} 
 
void draw() 
{   

 

  background(255); 
  // Update each object 
  myDotA.update(); 
  myDotB.update(); 
    myDotC.update(); 
  myDotA2.update(); 
    myDotB2.update(); 
        myDotC2.update(); 
         myDotA3.update(); 
         myDotB3.update(); 
         myDotC3.update(); 
            myDotA4.update(); 
  
  myDotD.update(); 
  myDotE.update(); 
    myDotF.update(); 
  myDotD2.update(); 
    myDotE2.update(); 
        myDotF2.update(); 
         myDotD3.update(); 
         myDotE3.update(); 
         myDotF3.update(); 
            myDotD4.update(); 
             

  // Display each object 

  myDotA.display(); 
 fill(255,0,0,100);
  myDotB.display(); 
    myDotC.display(); 
    fill(0,255,0,100);
 myDotA2.display();
   myDotB2.display(); 
      myDotC2.display(); 
    
       myDotA3.display();
        fill(0,0,255,100);
          myDotB3.display();
            fill(255,0,0,100);
               myDotC3.display();
                  fill(0,255,0,100);
                   myDotA4.display();
                   //
                     myDotD.display(); 
 fill(255,0,0,100);
  myDotE.display(); 
    myDotF.display(); 
    fill(0,255,0,100);
 myDotD2.display();
   myDotE2.display(); 
      myDotF2.display(); 
    
       myDotD3.display();
        fill(0,0,255,100);
          myDotE3.display();
            fill(255,0,0,100);
               myDotF3.display();
                  fill(0,0,255,100);
                   myDotD4.display();
} 

 
class Dot 
{ 

  float x,y,speed, rad, baserad,rad2; 
  int dir; 
  float sizelo=random(20,40);
  float retreat=random(100,200);

  Dot(float xdepos, float ydepos,  float speedi, float radi, float rad2,int diri) { 

    x = xdepos; 
    y = ydepos; 
    speed = speedi; 
    rad2=rad2;
    rad = radi; 
    baserad = rad; 
    dir = diri; 
  } 
  
  void update() { 
    y += speed * dir; 
    if((y <baserad)) { 
      dir *= -1; 
      rad += rad*sizelo; 
      rad2+=rad2*sizelo;
    } 
    if((y >600)){
    dir*=-1;
    }
    
    if(rad > baserad) { 
      rad -= 5; 
    } 
    if(y>height){
    rad2=rad2;
    }

    if(y<600){
    rad2=rad;}
  } 
    
  void display() { 
    ellipse(x, y, rad*2, rad2*2); 
  } 
} 
class Dot2 
{ 

  float x,y,speed, rad, baserad,rad2; 
  int dir; 
  float sizelo=random(20,35);
  float retreat=random(100,200);

  Dot2(float xdepos, float ydepos,  float speedi, float radi, float rad2,int diri) { 

    x = xdepos; 
    y = ydepos; 
    speed = speedi; 
    rad2=rad2;
    rad = radi; 
    baserad = rad; 
    dir = diri; 
  } 
  
  void update() { 
    y += speed * dir; 
    if((y > height-baserad)) { 
      dir *= -1; 
      rad += rad*sizelo; 
      rad2+=rad2*sizelo;
    } 
    if((y < -retreat)){
    dir*=-1;
    }
    
    if(rad > baserad) { 
      rad -= 5; 
    } 
    if(y>height-200){
    rad2=rad2;
    }
   // if(rad2>55){
   // rad2=rad;}
    if(y<600){
    rad2=rad;}
  } 
    
  void display() { 
    ellipse(x, y, rad*2, rad2*2); 
  } 
} 
class Dot3 
{ 

  float x,y,speed, rad, baserad,rad2; 
  int dir; 
  float sizelo=random(10,30);
  float retreat=random(100,200);

  Dot3(float xdepos, float ydepos,  float speedi, float radi, float rad2,int diri) { 

    x = xdepos; 
    y = ydepos; 
    speed = speedi; 
    rad2=rad2;
    rad = radi; 
    baserad = rad; 
    dir = diri; 
  } 
  
  void update() { 
    x += speed * dir; 
    y+=speed*dir;
      if((y > height-baserad)) { 
      dir *= -1; 
      rad += rad*sizelo; 
      rad2+=rad2*sizelo;
    } 
    if((y < -retreat)){
    dir*=-1;
    }
    if((x > width-baserad)) { 
      dir *= -1; 
      rad += rad*sizelo; 
      rad2+=rad2*sizelo;
    } 
    if((x < -50)){
    dir*=-1;
    }
    
    if(rad > baserad) { 
      rad -= 5; 
    } 
   // if(y>height-200){
   // rad2=rad2;
   // }
   
    if(y<600){
    rad2=rad;}
  } 
    
  void display() { 
    ellipse(x, y, rad*2, rad2*2); 
  } 
} 
class Dot4 
{ 

  float x,y,speed, rad, baserad,rad2; 
  int dir; 
  float sizelo=random(10,30);
  float retreat=random(100,200);

  Dot4(float xdepos, float ydepos,  float speedi, float radi, float rad2,int diri) { 

    x = xdepos; 
    y = ydepos; 
    speed = speedi; 
    rad2=rad2;
    rad = radi; 
    baserad = rad; 
    dir = diri; 
  } 
  
  void update() { 
    y += speed * dir; 
    x-=speed*dir;
    if((x > height-baserad)) { 
      dir *= -1; 
      rad += rad*sizelo; 
      rad2+=rad2*sizelo;
    } 
    if((x < -retreat)){
    dir*=-1;
    }
      if((y > height-baserad)) { 
      dir *= -1; 
      rad += rad*sizelo; 
      rad2+=rad2*sizelo;
    } 
    if((y < -retreat)){
    dir*=-1;
    }
    
    if(rad > baserad) { 
      rad -= 5; 
    } 
    if(y>height-200){
    rad2=rad2+0.3;
    }
 
    if(y<300){
    rad2=rad;}
  } 
    
  void display() { 
    ellipse(x, y, rad*2, rad2*2); 
  } 
} 
Exercise 4.B: Dot
Write your own unique Dot class which has a different behavior than the one presented in the example. Design a kinetic composition with 20 of your Dots.