top of page

ATV 13

  • Foto do escritor: Marcos André
    Marcos André
  • 19 de jun. de 2016
  • 2 min de leitura

"Criar o movimento de um barco no mar e discutir os resultados no blog"

Para a realização da tarefa, criei um array que armazena as alturas da onda, e desenhei o barquinho na altura correspondente.Como meu barco é uma imagem, realizei a importação da imagem e translação para o centro da imagem.

A rotação natural do barco, é dado pelo angulo da reta tangente com o eixo x da função sen(x).Isso é obtido, derivando a função seno, que resulta cos(x).Para se obter o ângulo, utilizamos a função inversa à inclinação encontrada.O problema é aplicar isso no processing. Por sorte um colega já havia feito e a partir do código, tentei adaptar à minha função seno.Para rotacionar a minha imagem,tive que realizar a translação para o centro desta e aplicar a função rotate().Os resultados não foram muito satisfatórios, mas mantive a tentativa no código.

Para conferir um efeito interessante, adicionei um valor aleatório na função que calcula as alturas da onda gerando um efeito de ruído.

Segue o código e vídeo abaixo:

int espacamentoX = 2; // Espaçamento horizontal da onda. int w; // Comprimento da onda. float Angulo = 0.0; // Angulo inicial float amplitude = 80.0; // Amplitude da onda float periodo = 370.0; // periodo de repetição da onda float dx; // Valor que incrementa 'x' float[] yvalues; // Array que armazena as alturas das ondas. float ang=0; PImage boat; float y=0; void desenhaBarco(float x,float y){ pushMatrix(); translate(width/2-boat.width/2,height/2-boat.height/2); rotate(asin(cos(radians(width/2+frameCount)*1))/4);//Rotação para o barquinho. image(boat,0,y+30); popMatrix();

}

void setup() { boat = loadImage("boat.png"); size(640, 360); w = width+16; dx = (TWO_PI / periodo) * espacamentoX; yvalues = new float[w/espacamentoX]; boat.resize(100,100);

}

void draw() { for (float n = 0; n <= height; n++) { stroke(170, 255, map(n, 0, height, 50, 255)); line(0, n, width, n); }

background(180,180,255);

calculaOnda(); desenhaOndas(); desenhaBarco(200,y); }

void calculaOnda() { Angulo += 0.02;

float x = Angulo; for (int i = 0; i < yvalues.length; i++) { yvalues[i] = sin(x)*amplitude+int(random(1,5));//O valor aleatório gera o 'noise' das ondas. x+=dx; } }

void desenhaOndas() { noStroke(); fill(60,60,200);

for (int x = 0; x < yvalues.length; x++) { y = yvalues[x]-60; ellipse(x*espacamentoX, 220+yvalues[x], 10,

//As diferentes ondas, em diferentes valores de y

fill(30,30,110); ellipse(x*espacamentoX, 200+yvalues[x], 20, 30); fill(60,60,210); ellipse(x*espacamentoX, 250+yvalues[x], 10, 20); fill(50,50,170); ellipse(x*espacamentoX, 300+yvalues[x], 20, 30); fill(50,50,150); ellipse(x*espacamentoX, 350+yvalues[x], 30, 40); } }


 
 
 

Comments


Sobre mim!

Meu nome é Marcos André, sou aluno de Ciência da Computação na Faculdade Farias Brito e Sistemas e Mídias digitais na UFC.Esse blog,será utilizado para postagem e divulgação de trabalhos realizados em ambos os cursos.

Outros Posts

© 2023 by BI World. Proudly created with Wix.com

bottom of page