Tuesday, September 14, 2010

Processing: collition

float X1, X2, Y;

float Sp1, Sp2;

int r;



void setup(){

  size(400, 400);

  colorMode(HSB, 100);

  X1 = width/2 + 30;

  X2 = width/2 - 30;

  Y = height/2;

  Sp1 = 5;

  Sp2 = -Sp1;

  r = 20;

  frameRate(30);

  smooth();

}



void draw(){

  fadeToWhite(99, 100);



  bounce();

  collide();

  X1 += Sp1;

  X2 += Sp2;

 

  fill(90, 60, 60, 90);

  ellipse(X1, Y, r*2, r*2);

  fill(40, 60, 60, 90);

  ellipse(X2, Y, r*2, r*2);

}



void bounce() {

  if (X1 <= r || X1 >= width-r){

    Sp1 = -Sp1;

    if (X1 <= r) { X1 = 2*r - X1; }

    if (X1 >= width-r) { X1 = 2*(width-r) - X1; }

  }

  if (X2 <= r || X2 >= width-r){

    Sp2 = -Sp2;

    if (X2 <= r){ X2 = 2*r - X2; }

    if (X2 >= width-r) { X2 = 2*(width-r) - X2; }

  }

}



void collide() {

  float dd = dist(X1, Y, X2, Y);

  float min = r * 2;

  if (dd <= min){

    Sp1 = -Sp1;

    Sp2 = -Sp2;

    X1 = X1 - (min - dd);

    X2 = X2 - (min - dd);

  }

}



void fadeToWhite(int max_color, float fade_speed) {

  noStroke();

  fill(max_color, fade_speed);

  rectMode(CORNER);

  rect(0, 0, width, height);

}

No comments: