domingo, 17 de maio de 2015

Exercício 11: Função cria polígonos(Fazendo o trabalho do processing)

Esse código cria polígonos regulares baseado no numero de lados e um "raio".

A função criaPoligono recebe o raio e o numero de lados. baseado no numero de lados a função gera as coordenadas X e Y dos vértices do polígono, exemplo: 4 lados ele gera coordenadas de três pontos, sendo o ultimo também o primeiro, após gerar os valores ela os guarda em dois vetores X e Y criadas com o numero de índices sendo o numero de lados.

Após isso linhas são desenhadas com as coordenadas, tendo um pequeno tratamento de exceção para ArrayOutOfBounds, para se o próximo índice não existir, indicar para o primeiro índice.

A segunda função se difere apenas na opção de passar o centro do poligono.

Pretendo atualizar esse código usando o código da flor x para deixar os pontos em x invés de +.

Código-Fonte:

float x,y;
void setup() {
  size(800, 600);

  //criaPoligono(120,4);
  criaPoligono2(120,4,width/2,height/2);

 //linhas centrais que cruzam a tela
  line(0,height/2,width,height/2);
  line(width/2,0,width/2,height);
}

void draw() {
  retornaLinha(2,60);

  //println("X = "+x+" Y = "+y);
  //line(width/2,height/2,int(x)*16,int(y)*16);
}

void retornaLinha(float r, float ang){
      int[] numbers = new int[3];
   

      x = r * cos(radians(ang));
      y = r * sin(radians(ang));
   
      //pontos[0] = int(x);
     // pontos[1] = int(y);

}


void criaPoligono(float r, int lados){
      int[] X = new int[lados];
      int[] Y = new int[lados];
   
   
      int angulo = 360 / lados;
      int yopa = 0;
      int cont = 0;
      while(cont<lados){

      x = r * cos(radians(yopa));
      y = r * sin(radians(yopa));
   
      X[cont] = int(x);
      Y[cont] = int(y);
   
      strokeWeight(2);
     // line(width/2+int(x),height/2+int(y),int(x)+width/2,int(y)+height/2);
      println("X = "+x+" Y = "+y);
      cont++;
      yopa+=angulo;
   
      }
   
      cont=0;
      while(cont<lados){
   
        try{
        line(X[cont]+width/2,Y[cont]+height/2,X[cont+1]+width/2,Y[cont+1]+height/2);
        }catch(Exception e){
          line(X[cont]+width/2,Y[cont]+height/2,X[0]+width/2,Y[0]+height/2);
        }
   
      cont++;
   
      }
   

}

void criaPoligono2(float r, int lados, int centerX, int centerY){
      int[] X = new int[lados];
      int[] Y = new int[lados];
   
   
      int angulo = 360 / lados;
      int yopa = 0;
      int cont = 0;
      while(cont<lados){

      x = r * cos(radians(yopa));
      y = r * sin(radians(yopa));
   
      X[cont] = int(x);
      Y[cont] = int(y);
   
      strokeWeight(2);
     // line(width/2+int(x),height/2+int(y),int(x)+width/2,int(y)+height/2);
      println("X = "+x+" Y = "+y);
      cont++;
      yopa+=angulo;
   
      }
   
      cont=0;
      while(cont<lados){
   
        try{
        line(X[cont]+centerX,Y[cont]+centerY,X[cont+1]+centerX,Y[cont+1]+centerY);
        }catch(Exception e){
          line(X[cont]+centerX,Y[cont]+centerY,X[0]+centerX,Y[0]+centerY);
        }
   
      cont++;
   
      }
   

}



Nenhum comentário:

Postar um comentário