• Nenhum resultado encontrado

Plotando gráficos simples

No documento Livro sobre arduino (páginas 136-142)

Conhecendo agora da linguagem Processing as oito funções de desenho e seus principais atributos, já podemos criar nossos primeiros gráficos; comecemos com uma senoide. Abra o PDE do Processing e copie a listagem abaixo na janela de edição.

//Processing – grafico de uma senoide //desenha senoide numa janela 360x240

size(360,240); // tamanho da janela float angulo = 0.0; // angulo da função seno float resGrafica=360.0; // resolução grafica

int amplitude=100; // nivel p-p da senoide

for(int i=0; i < resGrafica; i++) { // eixo-x com resGrafica pontos strokeWeight(2); // espessura da linha da senoide smooth(); // suaviza contorno dos pontos point(i, 120+amplitude*sin(angulo)); // desenha a senoide angulo += TWO_PI/resGrafica; // passo = 6.28/resolução. }

Como esse sketch só será executado apenas uma vez, ainda não precisamos das funções loop( ) e draw( ). Inicialmente dimensionamos uma janela de 360x240 pixels

137

Experimentos com o Arduino - Edição 2.0

com a função size( ). A cor do fundo dessa janela é por default cinza. Criamos as variáveis em ponto flutuante angulo e resGrafica, e a variável inteira amplitude. A variável angulo guarda os valores dos ângulos que serão passados como parâmetros à função seno, sin( ); a variável resGrafica determina a resolução do gráfico que queremos plotar, ou seja, o número de ‘fatias’ da nossa senoide; a variável amplitude determina o nível pico-a-pico da senoide plotada. O comando de iteração for traça os pontos ao longo do eixo horizontal do gráfico. A função strokeWeight() determina o número de pixels de cada ponto do traçado da senoide, e a função smooth() torna o traçado gráfico mais suave.

É a função point( ) que desenha a senoide dentro da janela criada no início do programa; essa função recebe como parâmetros os valores do contador i para percorrer o eixo horizontal, e os valores dos senos dos ângulos para plotar o eixo vertical. Algumas experiências podem ser feitas nesse sketch, por exemplo mudando os valores das variáveis resGrafica e amplitude, suprimindo a função strokeWeight(

) ou a função smooth( ) ou trocando a função sin( ) por cos( ) e observando o que

acontece com o traçado gráfico. Experimente tambem trocar a função sin(angulo) por random(-1,1).

Vamos agora plotar um gráfico interessante, o gráfico do ruído Perlin usando a função

noise( ). O ruído Perlin é uma função matemática usada em programas gráficos para

simular efeitos naturais como fogo, fumaça, nuvens e folhagens. Veja o sketch a seguir e o gráfico na figura 50.

//processing - experimento#

//plota ruido Perlin numa janela 360x240

size(360,240); //tamanho da janela

float p=0.0; //variavel ponto flutuante do passo int amplitude=300; //nivel p-p do ruido gerado

for(int i=0; i < width; i++) { //tempo no eixo-x

strokeWeight(3); //pixels dos pontos do traçado smooth(); //suaviza contorno dos pontos point(i, amplitude*noise(p)); //ruido amplificado no eixo-y

p+=0.01; //passo no eixo-x. }

A função noise( ) que aparece como parâmetro da função point( ) gera uma sequência de números aleatórios entre 0,0 e 1,0 e seu parâmetro é incrementado em passos de 0,01.

138

Experimentos com o Arduino - Edição 2.0

Se incluirmos as funções setup( ) e draw( ) mudamos bastante o comportamento do programa. Veja como fica a listagem desse sketch:

//plota ruido de Perlin numa janela 360x240 //

int i;

int amplitude=300; //nivel p-p do ruido gerado float p=0.0; void setup() { size(360,240); } void draw() { background(255);

for(int i=0; i < width; i++) { //tempo no eixo-x

strokeWeight(2); //pixels dos pontos do traçado smooth(); //suaviza contorno dos pontos point(i, amplitude*noise(p)); //ruido amplificado no eixo-y

p+=0.01; //passo no eixo-x. }

}

139

Experimentos com o Arduino - Edição 2.0

A função draw( ) é chamada continuamente, assim todas as funções dentro dos colchetes desta função são executadas continuamente, e a uma taxa padrão de 60 vezes por segundo. Para desacelerar a amostragem do gráfico inclua dentro da função

setup( ) a função frameRate(1); depois da função size( ). O parâmetro unitário passado

a essa função reduz a taxa de atualização a um só quadro por segundo, permitindo visualizar melhor cada gráfico que é plotado. Experimente outras taxas mais altas nessa função frameRate( ).

Resumo do capítulo 6

- Processing é uma linguagem de programação de computadores criada segundo

o conceito de software livre como uma ferramenta para desenvolvimento de projetos gráficos e interativos para artistas e designers com pouco conhecimento de programação de computadores.

- Com a função size( ) definimos na tela do computador as dimensões altura x largura da janela dentro da qual um desenho em Processing será mostrado.

- Para posicionar um simples pixel em qualquer ponto de uma janela criada com a função size( ) usamos a função point( ) que requer os parâmetros da abcissa e da ordenada do ponto.

- Linhas são traçadas com a função line( ) que requer quatro parâmetros: dois para

marcar o início da linha e dois outros para marcar o final da linha.

- Para desenhar um triângulo utilizamos a função triangle( ) que requer um par de

parâmetros para cada um dos tres vértices do triângulo.

- A função quad( ) serve para desenhar um quadrilátero e requer quatro pares de coordenadas, um para cada vértice do quadrilátero.

- Um retângulo é mais facilmente desenhado com a função rect( ) que requer apenas dois pares de parâmetros: um para as coordenadas cartesianas de onde começa o retângulo e um par para definir sua largura e altura.

- Para desenhar uma elípse ou um círculo usamos a função ellipse( ) que requer os mesmos tipos de parâmetros da função que desenha o retângulo. Para desenhar um círculo os parâmetros largura e altura devem ser iguais.

- Arcos de círculos são desenhados com a função arc( ), que exige dois parâmetros a mais que a função ellipse( ). Os dois últimos parâmetros marcam o ângulo, em

140

Experimentos com o Arduino - Edição 2.0

radianos, de início e de término do arco.

- Linhas com aparência serrilhada podem ser melhor definidas com a função smooth

( ) que suaviza os contornos das figuras geométricas desenhadas na janela de aplicação

criada com size( ).

- Para definir a espessura do traçado das figuras desenhadas usamos a função

strokeWeight( ) que requer um único parâmetro.

- A função StrokeJoin( ) define o tipo de canto, se reto, cortado ou arredondado, que liga as junções em um desenho.

- A função strokeCap( ) é a equivalente da função StrokeJoin( ) para linhas; seus parâmetros são ROUND para arredondar os extremos da linha e SQUARE, para fazê-los retos.

141

Capítulo

7

No documento Livro sobre arduino (páginas 136-142)