Any different from 1.0v for this sample?

edited October 2013 in Questions about Code

This is a sample of 2006 from Tom, but I try to execute in 2.0v, it seems can not do the trick. no any wrong warning, either. any different from them?

// draws 32 points and their approximate voronoi regions
// only using cones, and P3D's depth buffer

int NUM_POINTS = 12;
float x[];  // point x
float y[];  // point y
float av[]; // point angular velocity
color c[];  // point color

void setup() {
  size(400,400, P3D);

  // FIXME: ortho seems to be a bit strange, I am investigating
  ortho(-width/2,width/2,-height/2,height/2,-10,10);

  x = new float[NUM_POINTS];
  y = new float[NUM_POINTS];
  av = new float[NUM_POINTS];
  c = new color[NUM_POINTS];

  for (int i = 0; i < NUM_POINTS; i++) {
    x[i] = random(width);
    y[i] = random(height);
    av[i] = random(-0.02,0.02);
    c[i] = color(random(255),random(255),random(255));
  }

}

void draw() {

  background(0);

  // draw the cones
  pushMatrix();
  // -10 means the cones are below the surface
  // (so we can draw on top of them later)
  translate(0,0,-10);
  for (int i = 0; i < NUM_POINTS; i++) {
    fill(c[i]);
    noStroke();
    // if you have more points, use a smaller radius 
    // (but you risk having gaps)
    cone(x[i],y[i],200.0,10.0); 
  }
  popMatrix();

  // give user control of first point
  x[0] = mouseX;
  y[0] = mouseY;

  // on mouse pressed, orbit the points around the centre of the screen
  if (mousePressed) {  
    for (int i = 1; i < NUM_POINTS; i++) {
      float r = dist(width/2,height/2,x[i],y[i]);
      float a = atan2(y[i]-(height/2),x[i]-(width/2)) + av[i];
      x[i] = (width/2) + (r * cos(a));
      y[i] = (height/2) + (r * sin(a));
    }
  }

  // draw dots for the points
  for (int i = 0; i < NUM_POINTS; i++) {
    fill(0);
    noStroke();
    ellipse(x[i],y[i],5.0,5.0);
  }

}

/**
cone taken from http://processinghacks.com/hacks:cone
@author Tom Carden
*/


static float unitConeX[];
static float unitConeY[];
static int coneDetail;

static {
  coneDetail(24);
}

// just inits the points of a circle, 
// if you're doing lots of cones the same size 
// then you'll want to cache height and radius too
static void coneDetail(int det) {
  coneDetail = det;
  unitConeX = new float[det+1];
  unitConeY = new float[det+1];
  for (int i = 0; i <= det; i++) {
    float a1 = TWO_PI * i / det;
    unitConeX[i] = (float)Math.cos(a1);
    unitConeY[i] = (float)Math.sin(a1);
  }
}

// places a cone with it's base centred at (x,y),
// beight h in positive z, radius r.
void cone(float x, float y, float r, float h) {
  pushMatrix();
  translate(x,y);
  scale(r,r);
  beginShape(TRIANGLES);
  for (int i = 0; i < coneDetail; i++) {
    vertex(unitConeX[i],unitConeY[i],0.0);
    vertex(unitConeX[i+1],unitConeY[i+1],0.0);
    vertex(0,0,h);
  }
  endShape();
  popMatrix();
}
Tagged:

Answers

Sign In or Register to comment.