domingo, 29 de março de 2015

Exercício: Jardim de flores

Utilizando a flor criada no exercício "Função flor" mostrado no blog anteriormente vamos imprimir na tela flores de cores e tamanhos diferentes, aleatoriamente.


Como a função da flor já estava criada só foi necessário dividir em uma função para o centro e outra para as pétalas, para que fosse possível colorir aleatoriamente e com cores diferentes cada uma das partes.
Depois foi só desenhar na tela com tamanhos também aleatórios. Segue o código completo:

 //definindo a nossa variável
float x;

void setup (){
size(600,600);
background(255);

frameRate(10);
}

//criei uma função para o círculo central da flor
 void circulo(float x,float y, float r){
     ellipse(x,y,r*2,r*2);
}


void flor(float x, float y, float r){ 
  //para colorir as pétalas com cores aleatórias
  fill(random(255),random(255),random(255));
  circulo(x+(2*r)*0.7,y+(2*r)*0.7,r);
  circulo(x-(2*r)*0.7,y-(2*r)*0.7,r);
  circulo(x-(2*r)*0.7,y+(2*r)*0.7,r);
  circulo(x+(2*r)*0.7,y-(2*r)*0.7,r);
  
  //agora colorindo o centro da flor com uma cor diferente das pétalas
  fill(random(255),random(255),random(255));
  circulo(x,y,r);
 }

//Desenhando aleatóriamente as flores na tela
void draw(){
  flor(random(600),random(600),random (20));
}

//temos o nosso jardim!

sexta-feira, 27 de março de 2015

Implementando o Yin Yang

Por coincidência o mesmo símbolo que escolhi para representar matematicamente foi o mesmo que foi escolhido em aula para ser implantado no Processing. Que maravilha, meio caminho andado!!
Como já vimos o passo a passo de como desenhar só precisamos colocar as nossas elipses em seus lugares e definir as cores corretamente




Segue o código:

int x;           // coordenada x do centro do circulo principal
int y;           // coordenada y do centro do circulo principal
int r;           // raio do circulo pequeno
int centrox;     // coordenada x do centro da tela
int centroy;     // coordenada y do centro da tela

void setup(){
size(200,200);


centrox = width/2;
centroy= height/2;

yinYang(10,centrox,centroy);

}
void yinYang(int r,int x,int y){
  fill(255);
 
  // circulo branco principal
  ellipse(x,y,(r*5)*2,(r*5)*2);
  fill(0);
 
  // Dividindo ao meio com um semi circulo preto
  arc(x,y,(r*5)*2,(r*5)*2,PI,2*PI,PIE);
 
  // circulo preto médio
  ellipse(x+(2.5*r),y,(2.5*r)*2,(2.5*r)*2);
  fill(255);
  noStroke();
 
  // circulo branco médio
  ellipse(x-(2.5*r),y,(2.5*r)*2,(2.5*r)*2);
 
  // circulo branco pequeno
  ellipse(x+(2.5*r),y,r*2,r*2);
  fill(0);
 
  // circulo preto pequeno
  ellipse(x-(2.5*r),y,r*2,r*2);
}

domingo, 15 de março de 2015

Função flor

Em aula aprendemos a desenhar uma flor de esferas iguais alinhadas com o diâmetro da esfera central.


Segue o código:

void setup (){
  size (600, 600);
}

void draw() {
 flor2 (300, 300, 60);
}

void circulo (int x, int y, int r) {
  ellipse (x, y, 2*r, 2*r);
}

void flor (int x, int y, int r) {
  circulo (300, 300, 20);
  circulo (300 + 40, 300, 20);
  circulo (300, 300 + 40, 20);
  circulo (300 - 40, 300, 20);
  circulo (300, 300 - 40, 20);
}

/* com esse código a flor é desenhada proporcionalmente em qualquer tamanho, dependendo do valor atribuído à variável "r" */

void flor2 (int x, int y, int r) {
  circulo (300, 300, r);
  circulo (300 + 2*r, 300, r);
  circulo (300, 300 + 2*r, r);
  circulo (300 - 2*r, 300, r);
  circulo (300, 300 - 2*r, r);
}


Agora o desafio da atividade é desenhar uma flor com as quatro "pétalas" na diagonal em relação ao círculo central.


Segue o código:

void setup (){
  size (600, 600);
}

void draw() {
 florDiag (300, 300, 40);
}

void circulo (int x, int y, int r) {
  ellipse (x, y, 2*r, 2*r);
}

void florDiag(int x, int y, int r)
{

//a variável "d" corresponde ao diâmetro

  int d = 2*r;

  float diag = d * sqrt(2); 
  circulo(x, y, r);
  circulo(x + int(diag/2), y + int(diag/2), r);
  circulo(x - int(diag/2), y - int(diag/2), r);
  circulo(x + int(diag/2), y - int(diag/2), r);
  circulo(x - int(diag/2), y + int(diag/2), r);
  
}





Fórmula matemática para calcular um símbolo

Para esse exercpicio escolhi o símbolo do Yin Yang. Para simplificar a explicação fiz um passo a passo.


Na primeira imagem iniciamos o desenho com um círculo de raio "r", logo em seguida desenhamos dois círculos menores no seu interior. Os círculos estão centralizados com o diâmetro do maior, logo concluímos que seu raio é metade do raio do primeiro círculo pois "r" corresponde ao seu diâmetro.

Na segunda imagem recortamos um semi círculo de cada um dos círculos menores, o de cima do lado direito e o de baixo do lado esquerdo.

Na terceira imagem desenhamos outros 2 círculos, também alinhados com o diâmetro do círculo maior. Agora eles possuem 1/3 do raio das esferas médias, o que corresponde a 1/6 de "r". 
Esses círculos estão centralizados dentro dos círculos médios, sendo a distância entre seus centros igual a "r".

Na quarta imagem vemos o símbolo finalizado com suas características cores opostas.

domingo, 8 de março de 2015

Simulador de Balística

A ideia era simular o lançamento de um objeto implantando as fórmulas de MRU e MRUV.
O objeto deveria ter a trajetória de parábola e no meu decidi traçar 1/4 de círculo ou elipse.



Segue o código bonitinho:

//definição das variáveis

float t = 0;   //tempo
float dx;      //distancia horizontal
float dy;      //distancia vertical
float a = -5;   //aceleracao
int v0 = 60;   //velocidade


void setup()
{
   frameRate(60);
   size(600,600);
   noStroke();
}

void draw()
{
  background(0);

  // um jeito menos penoso de desenhar a tal da grade
  drawGrade();
  fill(255);

  //exibindo as coordenadas na tela
  text ("Tempo: " + t + "s", 20, 20);
  text ("Distancia: " + dx, 20, 60);
  text ("Velocidade: " + (v0 + a*t), 20, 40);

  lancamentoBalistico();
  t = t + 0.0166666666666667;
}

// desenhando a grade
void drawGrade()
{
  for(int i=0; i<(width/50); i++)
 {
   stroke(100, 100, 100);
   line(i * 50, 0, i * 50, width);
   line(0, i * 50, height, i * 50);
 }

 //Fórmula do Movimento Retilíneo Uniforme da bolinha
void moveBolaMRU()
{
   dx = v0 * t;
   ellipse(dx, 150, 20, 20);
}


//Fórmula do Movimento Retilíneo Uniforme Variado da bolinha
void moveBolaMRUV()
{
   dx = v0*t + a*(pow(t,2)/2);
   noStroke();
   fill(124,252,0);
   ellipse(300, height - dx, 20, 20);
}

//lançando a bolinha
void lancamentoBalistico()
{
  dx = v0 * t;
  dy = v0*t + a*(pow(t,2)/2);
  float lanc = dx + dy;
   ellipse(dx, 600 - dy, 20, 20);
}

}