quarta-feira, 11 de maio de 2016

Aula 12 - Polygonz




int n = 3;
float p = 0;

void setup() {
  size(500, 400);
  colorMode(HSB);
}

void draw() {
  background(0);
  for (int m = 0; m < n; m++) {
    stroke(255/n*m, 255, 255);
    line(width/2+cos(TAU/n*m+p)*150, height/2+sin(TAU/n*m+p)*150, 
      width/2+cos(TAU/n*(m-1)+p)*150, height/2+sin(TAU/n*(m-1)+p)*150);
  }
  noStroke();
  fill(140, 255, 255);
  ellipse(50, height/2, 50, 50);
  fill(20, 255, 255);
  ellipse(450, height/2, 50, 50);
  fill(255);
  rect(30, height/2-5, 40, 10);
  rect(430, height/2-5, 40, 10);
  rect(445, height/2-20, 10, 40);
  fill((sin(p)+1)*127, 255, 255);
  textAlign(CENTER);
  text(n, width/2, height/2);
  p += 0.01;
}

void mouseClicked() {
  if (dist(mouseX, mouseY, 50, height/2) < 25 && n > 3) {
    n--;
  } else if (dist(mouseX, mouseY, 450, height/2) < 25) {
    n++;
  }
}

float dist(int x1, int y1, int x2, int y2) {
  return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}


Para construir um polígono regular de n lados eu divido o angulo de uma circunferência completa (2π radiano ou τ radiano) e divido pelo número n de lados para conseguir o ângulo que vou usar para definir o início e fim das linhas. Para construir a linha eu a faço com o x igual ao da metade da tela somado ao cosseno do ângulo e multiplicado pelo raio pretendido e o y igual ao da metade da tela somado ao seno do ângulo e multiplicado pelo raio pretendido.

Nenhum comentário:

Postar um comentário

Pode falar, eu não mordo... Pelo menos não através da internet