Mostrando postagens com marcador MAMI. Mostrar todas as postagens
Mostrando postagens com marcador MAMI. Mostrar todas as postagens
segunda-feira, 1 de fevereiro de 2016
Trabalho parte 2 - modelos natural, matemático e computacional.
Segue abaixo o vídeo da segunda parte do trabalho da cadeira:
sexta-feira, 29 de janeiro de 2016
The beauty of data visualization - Comentários
Nesse post, farei comentários sobre a palestra “The beauty of data Visualization”. A palestra está disponível neste link:
https://www.ted.com/talks/david_mccandless_the_beauty_of_data_visualization
A visão é o sentido mais rápido do ser humano. É a partir dela que obtemos informações ao nosso redor, de forma consciente ou não, numa velocidade extremamente rápida. Informações essas, que podem ser as cores dos carros que vê na rua, ou números num extrato bancário, ou padrões encontrados em uma parede.
Por isso, quando representamos informações graficamente, as pessoas conseguem entende-las melhor. Comparações de tamanho, cor, posição, são mais bem interpretadas do que simples números em uma tabela. Se certas informações forem colocadas em um gráfico, por exemplo, provavelmente um padrão será criado, uma forma estranha, um desenho familiar, e tudo isso atrai a visão humana, então as informações serão transmitidas de forma mais eficiente
https://www.ted.com/talks/david_mccandless_the_beauty_of_data_visualization
A visão é o sentido mais rápido do ser humano. É a partir dela que obtemos informações ao nosso redor, de forma consciente ou não, numa velocidade extremamente rápida. Informações essas, que podem ser as cores dos carros que vê na rua, ou números num extrato bancário, ou padrões encontrados em uma parede.
Por isso, quando representamos informações graficamente, as pessoas conseguem entende-las melhor. Comparações de tamanho, cor, posição, são mais bem interpretadas do que simples números em uma tabela. Se certas informações forem colocadas em um gráfico, por exemplo, provavelmente um padrão será criado, uma forma estranha, um desenho familiar, e tudo isso atrai a visão humana, então as informações serão transmitidas de forma mais eficiente
Teoria dos conjuntos - Aplicações em recursos multimídia
A Teoria dos conjuntos é aplicada no desenvolvimento de diversas aplicações multimídia: desde programas de edição de imagens até jogos.
A técnica de Chroma Key (exibida nem sala de aula), por exemplo, consiste em separar o fundo verde (ou de uma cor sólida) do resto da imagem, para que depois seu fundo possa ser modificado.
Quando separamos o fundo do resto da imagem, encontramos a diferença entre os pixels do fundo e do resto da imagem, criando uma máscara. Depois, os pixels do fundo são substituídos por pixels do fundo desejado, checando se os pixels pertencem à máscara de fundo. Por fim, o fundo resultante e o restante da imagem original se juntam para formar uma imagem só, num processo de união.
Analisando uma imagem no Photoshop, vemos que o programa divide a imagem em canais, dependendo do modo de cores que o usuário está utilizando (RGB, CYMK, etc.). Cada canal desse é um conjunto, que indica a intensidade de cada cor que deve ser aplicada a cada pixel da imagem.
Caso coloquemos canais de imagens diferentes, podemos obter efeitos interessantes, como a técnica de Harris-shutter, exibida nesse blog anteriormente. A imagem é dada pela união de canais RGB, porém um canal de cada imagem.
A técnica de Chroma Key (exibida nem sala de aula), por exemplo, consiste em separar o fundo verde (ou de uma cor sólida) do resto da imagem, para que depois seu fundo possa ser modificado.
Quando separamos o fundo do resto da imagem, encontramos a diferença entre os pixels do fundo e do resto da imagem, criando uma máscara. Depois, os pixels do fundo são substituídos por pixels do fundo desejado, checando se os pixels pertencem à máscara de fundo. Por fim, o fundo resultante e o restante da imagem original se juntam para formar uma imagem só, num processo de união.
Analisando uma imagem no Photoshop, vemos que o programa divide a imagem em canais, dependendo do modo de cores que o usuário está utilizando (RGB, CYMK, etc.). Cada canal desse é um conjunto, que indica a intensidade de cada cor que deve ser aplicada a cada pixel da imagem.
Caso coloquemos canais de imagens diferentes, podemos obter efeitos interessantes, como a técnica de Harris-shutter, exibida nesse blog anteriormente. A imagem é dada pela união de canais RGB, porém um canal de cada imagem.
quarta-feira, 27 de janeiro de 2016
Olho - tangente, coordenadas polares e distância entre pontos
Segue abaixo o código comentado da aplicação feita, que faz um olho que "persegue" o mouse:
Utilizando coordenadas polares, a pupila não "foge" do olho quando o mouse está fora do mesmo.
O resultado nesse GIF:
Cronômetro - millis() e ângulos
Segue abaixo o código comentado da aplicação. que desenha um cronômetro que marca os segundos em tempo real:
O resultado final:
Knob - Fade in e Fade out
Na aplicação abaixo, uma imagem transita para a outra, com efeitos simultâneos de Fade in e Fade out, seguindo a posição Y do mouse. Segue abaixo o código comentado:
O resultado segue no gif a seguir (imagens de Justing Currie - http://chasingartwork.deviantart.com/):
Polígonos regulares - um pouco de trigonometria
Abaixo segue o código comentado de uma aplicação que, dado uma quantidade n de lados, desenha um polígono regular:
Resultados:
Tilesets - Construindo um mapa isométrico:
Um mapa isométrico dá impressão de profundidade, apesar de ser formado por imagens 2D.
Jogos como Final Fantasy Tatics e Ogre Battle têm mapas isométricos.
Abaixo, segue o código comentado de um mapa isométrico que fiz, utilizando um tileset que baixei da internet (infelizmente, perdi o link do dowload do tileset):
Resultado final:
quinta-feira, 26 de novembro de 2015
Luis Sacliotto - Concretion 8469, 1984 - Apropriação e aplicação
A obra que escolhi foi essa
escultura, Concretion 8469 de Luiz Sacliotto, ano 1984. Feita de alumínio, é composta de duas chapas
padronizadas, interligadas por uma terceira chapa em forma de paralelogramo.
Abaixo, temos um desenho com a análise
geométrica das chapas padronizadas:
São formadas por 10 pedaços de
alumínio cortados geometricamente, dispostos de forma que nos faz lembrar o
formato de um losango de altura e largura iguais (da forma do desenho acima).
Considerando que m=h/10 (módulo igual à altura dividido por dez), os pedaços de
alumino podem ser formados geometricamente por retângulos e triângulos
retângulos. A composição geométrica de cada um desses pedaços (contando de cima
para baixo) é a seguinte:
·
1 triângulo retângulo de catetos = m;
·
1 triângulo retângulo de catetos = m e 1
quadrado de lado=m;
·
1 retângulo de altura=m e largura=2m e 1
triângulo retângulo de catetos = m;
·
1 triângulo retângulo de cateto =m e um
retângulo de altura=m e largura=3m;
·
1 retângulo de altura=m e largura=4m e 1
triângulo retângulo de catetos = m;
·
1 triângulo retângulo de catetos = m e 1
retângulo de altura=m e largura=4m;
·
1 retângulo de altura=m e largura=3m e 1
triângulo retângulo de catetos = m;
·
1 triângulo retângulo de catetos = m e 1
retângulo de altura=m e largura=2m;
·
1 quadrado de lado=m e 1 triângulo retângulo de
catetos = m;
·
1 triângulo retângulo de catetos = m;
Minha aplicação desenvolvida no
Processing se apropria da forma geométrica dessa chapa principal da escultura.
Para isso, criei três funções: trianguloRetanguloA(x,y,l), trianguloRetanguloB(x,y,l),
e Sacliotto(x,y,h). As duas primeiras foram criadas para auxiliar na construção
do padrão, enquanto a terceira é o padrão em si.
trianguloRetanguloA(x,y,l) cria
um triângulo retângulo com origem (x,y) no ângulo reto. Caso o valor de l seja
positivo, a hipotenusa fica virada para o 4° quadrante. Se l for negativo, a
hipotenusa fica virada para o 2° quadrante.
trianguloRetanguloB(x,y,l) também
cria um triângulo retângulo com origem (x,y) no ângulo reto. Caso o valor de l
seja positivo, a hipotenusa fica virada para o 3° quadrante. Se l for negativo,
a hipotenusa fica virada para o 1° quadrante.
Sacliotto(x,y,h) cria o padrão da
chapa principal da escultura na posição (x,y) e com altura h, levando em
consideração a análise geométrica feita.
Com a forma apropriada da
escultura, desenvolvi uma aplicação que cria uma tecelagem com o padrão na cor
preta e o mesmo padrão na cor branca, que preenchem a tela da aplicação.
Resultado final:
CÓDIGO DA APLICAÇÃO COMPLETO E COMENTADO:
void
trianguloRetanguloA(int x, int y, int l)
// desenha triangulo retangulo no
ponto(x,y)com origem no angulo reto.
{
triangle(x, y, x, y+l, x+l, y);
}
void
trianguloRetanguloB(int x, int y, int l)
// desenha triangulo retangulo no
ponto(x,y)com origem no angulo reto.
{
triangle(x, y, x, y+l, x-l, y);
}
void
Sacliotto(int x, int y, int h)
// Cria o padrão de tamanho h nas
coordenadas (x,y), de acordo com a análise geométrica.
{
int
m=h/10;//Definindo o módulo.
//Pedaços do lado
direito:
trianguloRetanguloB(x,
y-4*m, -m);
rect(x, y-3*m, 2*m, m);
trianguloRetanguloB(x+2*m, y-2*m, -m);
rect(x, y-m, 4*m, m);
trianguloRetanguloB(x+4*m, y, -m);
rect(x, y+m, 3*m, m);
trianguloRetanguloA(x+3*m, y+m, m);
rect(x, y+3*m, m, m);
trianguloRetanguloA(x+m, y+3*m, m);
//Pedaços do lado
esquerdo:
rect(x-m, y-4*m, m, m);
trianguloRetanguloA(x-m, y-3*m, -m);
rect(x-3*m, y-2*m, 3*m, m);
trianguloRetanguloA(x-3*m, y-m, -m);
rect(x-4*m, y, 4*m, m);
trianguloRetanguloB(x-4*m, y, m);
rect(x-2*m, y+2*m, 2*m, m);
trianguloRetanguloB(x-2*m, y+2*m, m);
trianguloRetanguloB(x, y+4*m, m);
}
void setup() {
size(500, 500);
//Definindo o tamanho da tela da aplicação.
noStroke();
fill(0);
background(128);
}
int x=0;
int y=0;
int h=100;// Definindo o tamanho dos padrões.
void draw()
{
fill(0);
Sacliotto(x, y, h);
//Cria um padrão preto na
posição(x,y).
fill(255);
Sacliotto(x+h/2,
y+h/2, h);
/*Cria um padrão
branco na posição (x+h/2,y+h/2).
Dessa forma, os
padrões brancos ficam sempre posicionados
entre 4 padrões
pretos, e vice versa.*/
x+=h;
// Incrementa x em
h. Dessa forma, o padrão repete-se horizontalmente.
if (x>width+h) {
x=0;
y+=h;
}
/* Incrementa y em h
quando x>largura+h. Dessa forma, garantimos que
independentemente
do tamanho da tela da aplicação, o padrão se repita
horizontalmente e
verticalmente também, preenchendo completamente a tela.*/
if (y>height && x>width) {
stop();
}
/* Para a aplicação
quando y>altura e x>largura da tela da aplicação,
ou seja, quando preencher completamente a tela*/
}
segunda-feira, 23 de novembro de 2015
Funções e Procedimentos - Economizando código
Basicamente, usar funções e procedimentos em seus códigos deixam o mesmo mais organizado. Como os algoritmos já estão definidos, basta uma linha de código para chamá-los. Assim, não é necessário escrever todo o algoritmo de novo cada vez que for fazer algo no seu programa. não é preciso ficar "inventando a roda" toda vez que for usá-la.
Por exemplo, caso queira que sua aplicação desenhe um padrão 100 vezes na tela, é melhor escrever o código que desenha esse padrão 100 vezes ou colocar o código desse padrão em uma função e chamá-la 100 vezes? Além de economizar código (e tempo), seu programa fica mais legível e fácil de compreender se utilizar funções e procedimentos.
Por exemplo, caso queira que sua aplicação desenhe um padrão 100 vezes na tela, é melhor escrever o código que desenha esse padrão 100 vezes ou colocar o código desse padrão em uma função e chamá-la 100 vezes? Além de economizar código (e tempo), seu programa fica mais legível e fácil de compreender se utilizar funções e procedimentos.
sábado, 21 de novembro de 2015
Bola quicando - Acelerando as coisas...
Fazer uma bola quicar na tela, aumentando sua velocidade em
1% cada vez que ela quicar.
Segue abaixo o código comentado:
int r=20;
float bolaX= r;
float dX=5;
float
bolaY=400;
float dY=5;
void
setup(){
size(800,600);
}
void
draw(){
background(0);
ellipse(bolaX, bolaY, 2*r, 2*r);//cria a bola
bolaX=bolaX+dX;
bolaY=bolaY+dY;//movimenta a bola
if (bolaY>=600-r){
dY=-(dY+dY/100);
dX+=dX/100;
}
//quica a bola no
chão, aumenta a velocidade em 1%
if (bolaY<=r){
dY=-(dY+dY/100);
dX+=dX/100;
}
//quica a bola no
teto, aumenta a velocidade em 1%
if (bolaX>=800-r){
dX=-(dX+dX/100);
dY+=dY/100;
}
//quica a bola na
parede esquerda, aumenta a velocidade em 1%
if (bolaX<=r){
dX=-(dX+dX/100);
dY+=dY/100;
}
//quica a bola na
parede direita, aumenta a velocidade em 1%
}
Um cuidado que tive que ter foi de aumentar em 1% a
velocidade em cada dimensão (x,y), cada vez que a bola quicava.
O uso da função MRUV() não seria bom nessa situação, pois
nela a velocidade aumenta de acordo com o tempo. Nessa aplicação, a velocidade
só aumenta quando a bola encosta uma das paredes.
Depois de certo tempo, o incremento da velocidade é tão
grande, que a bola escapa dos limites da aplicação.
Duas bolas - Distancias e geometria
Criando dois círculos que mudam de cor quando o mouse passa
por eles, usando distancia2D().
Segue o código comentado:
Um possível resultado:
A da Braun
Criando o A da marca Braun, oscilando seu tamanho.
Abaixo, a referência utilizada:
Segue abaixo o código comentado:
O resultado final:
Bandeira do Brasil
Função
mostraBandeiraBrasil(x,y,l), que desenha uma bandeira do Brasil na tela de
altura l, na posição (x,y).
Segundo
a lei federal N° 5.700, art. 5°:
Fonte: Wikipédia
Porém, a construção de nossa bandeira será feita somente até
o passo IV (círculo no centro).
Segue abaixo o código comentado:
Funções auxiliares que utilizei.
Função mostraBandeiraBrasil(x,y,l), e
execução.
O resultado final:
segunda-feira, 16 de novembro de 2015
Lançamento balístico - Framerate e tempo real
A atividade proposta foi: aumentar o framerate do simulador de lançamento balístico criado em sala de aula para 10 fps, e deixar o simulador em tempo real.
No Processing, a função frameRate() determina quandas vezes por segundo algo no draw() será executado. O default do processing é de 60 fps.
Alterando o framerate para 10 fps, devemos dividir o incremento de tempo por 10 também, para que ao se passar 1 segundo na simulação seja adicionado o total de 1 na variável de tempo dela, deixando a simulação em tempo real.
O lançamento balístico é a associação de dois movimentos: um movimento MRU no eixo x e um movimento MRUV no eixo y.
Segue abaixo o código comentado:
O resultado final, com velocidade horizontal = 30, Velocidade vertical = 100 e aceleração vertical = -10 (gravidade da terra):
No Processing, a função frameRate() determina quandas vezes por segundo algo no draw() será executado. O default do processing é de 60 fps.
O lançamento balístico é a associação de dois movimentos: um movimento MRU no eixo x e um movimento MRUV no eixo y.
Segue abaixo o código comentado:
O resultado final, com velocidade horizontal = 30, Velocidade vertical = 100 e aceleração vertical = -10 (gravidade da terra):
Simulador MRU - Colocando cores
A atividade proposta foi adicionar cores ao simulador de MRU, seguindo alguma harmonia cromática.
Optei por uma Harmonia cromática de contraste: com cores bem distintas, é fácil distinguir o fundo das linhas e da bolinha. Fundo preto, linhas verdes e bola branca.
Nas imagens abaixo, temos o código comentado:
O resultado final é esse:
Optei por uma Harmonia cromática de contraste: com cores bem distintas, é fácil distinguir o fundo das linhas e da bolinha. Fundo preto, linhas verdes e bola branca.
Nas imagens abaixo, temos o código comentado:
O resultado final é esse:
Assinar:
Postagens (Atom)
















