Sunday, September 27, 2009

Knots v1

float theta = radians(30);
float frame = 0;
int rcolor,gcolor,bcolor;
float[] zbuffer = new float[480000];
int r = 80;
float ratio;
int i;
float y = -2000;


void setup() {
  size(800,600);
  background(0);
  theta = radians(30);
  noStroke();
  rcolor = 50;
  gcolor = 50;
  bcolor = 200;
}

void draw() {
/*
  if (height/2 - y < 50){
    r = int(random (20,100));
    ratio = int(random (1,3));
    frame = -ratio*(height/2-50);
    rcolor=int(random(50,100));
    gcolor=int(random(50,100));
    bcolor=int(random(50,100));
  }
*/

  theta += 0.005;  

  translate(width/2-r,height/2);
  frame +=1;


  noStroke();

  float x = 2 * r * (cos(theta) + sin(theta/7)) + r +1;
  y = 200.0 * cos(frame/400 + theta + 2) * sin(2 * theta + 1 + frame/800 );
  float z = 2 * r * (sin(theta)+ cos(4*theta + 2))/2 + r +1;

  float displacementPerc = 1+(1/(-z-1))/100;
  x -= displacementPerc;
  y -= displacementPerc;


  int rectangleSize = int(1+((2*r+1)-z/2)/10);

  for (int j=0; j < rectangleSize; j++ ) { 
    for (int k=0; k < rectangleSize; k++ ) {

      i = int( x+k ) + 400 - r + 800 * ( 300 + int( j-y ) );

      if ( zbuffer[i] == 0.0 ) {
        zbuffer[i] = 1000.0;
      }


      if ( zbuffer[i] > z ) {

        // if this is a border pixel quite distant from    
        if ( (zbuffer[i] - z > 5) && ( j == 0 || k == 0 || j == rectangleSize-1 || k == rectangleSize-1 )) {

          fill( -z/3 + rcolor + r  , -z/3 + gcolor +r , -z/3 + bcolor + r,95 );
          rect(int(x+k),int(j-y),1,1);
          zbuffer[i] = 1000.0;
        }
        else {
          fill( -z/3 + rcolor + r, -z/3 + gcolor +r, -z/3 + bcolor + r);
          rect(int(x+k),int(j-y),1,1);
          zbuffer[i] = z;

        }

      }

    }

  }

}

info info

submitted by: DARYL_Gamma
views: 833


treeThis sketch has a parent
Tags:

comments comment

loading loading...

 

Add a comment: