A Equação do Batman na OpenGL

Sabe aquela coisinha fácil que tu fazes mas acha tão legal que resolve compartilhar?
Essa semana, na disciplina de Processamento Gráfico (que ministro na Unisinos POA), começamos a trabalhar com a API gráfica OpenGL. Uma apresentação básica às principais funcionalidades da biblioteca, integração OpenGL+GLUT etc. E nisso alguns exercícios com primitivas geométricas, tipo desenhar um quadrado, triângulo, pontos, linhas, círculo etc. No círculo o pessoal já pede ajuda, porque é necessário relembrar o bom e velho Teorema de Pitágoras pra gerar os pontos 🙂

Meu maior desafio é tentar DESAPAVORAR a gurizada para a Matemática. Afinal, Computação Gráfica é Matemática pura, né? Sh-h-h-h… Heheh 😀 Nas nossas brincadeiras de gerar círculos, caracóis, PAC-MANs e fatias de pizza, comentei com a gurizada sobre a famosa Equação do Batman, que algum maluco matemático nerd muito legal bolou e que desenha o logo do nosso querido Homem-Morcego.   Mostrei pra eles no Google, e propus o desafio de desenhar usando a OpenGL. Claro, eu sempre que proponho um exercício novo eu fico enlouquecida me coçando pra fazê-lo também, hehe. Então, no dia seguinte (porque na hora da aula a gurizada me chamou o tempo todo pra tirar dúvidas — o que eu acho muito bom!), aproveitei um daqueles momentos em que o cérebro está cansado e precisa relaxar, e implementei, de forma BEM SIMPLES e NÃO OTIMIZADA, um programinha pra plotar a equação usando OpenGL — até como tira-teima, já que houve alguma incredulidade sobre essa equação (só ver no link do Guizmodo). Basicamente, o trabalho foi transcrever as equações (copy and paste do Google), e escolher um ?x adequado para que ficasse bonitinho.  Plotei cada equação em separado, com cor diferente, já na função de callback de desenho. Obviamente que o mais inteligente é gerar os pontos e depois só plotar. Enfim, se alguém ainda dúvida, é só rodar esse codiguinho de nada e provar que a equação é verdadeira. Abaixo, vou deixar só o código da função de desenho do  bátima.

void DesenhaBatman()
{
	glLineWidth(3);

	double deltax = 0.00005;

	//Primeira Equação
	double x = -8.0;
	glPointSize(3);
	glColor3f(1,0,0);
	glBegin(GL_LINE_STRIP);
	while (x < = 8.0)
	{
		double y = 1.5* sqrt(-abs(abs(x)-1)*abs(3-abs(x))/((abs(x)-1)*(3-abs(x))))*(1+abs(abs(x)-3)/(abs(x)-3))*sqrt(1-pow(x/7,2))+(4.5+0.75*(abs(x-.5)+abs(x+.5))-2.75*(abs(x-.75)+abs(x+.75)))*(1+abs(1-abs(x))/(1-abs(x)));
		glVertex2f(x,y);
		x += deltax;
	}
	glEnd();

	//Segunda Equação
	x = -8.0;
	glColor3f(0,1,0);
	glBegin(GL_LINE_STRIP);
	while (x <= 8.0)
	{
		double y = -3*sqrt(1-pow(x/7,2))*sqrt(abs(abs(x)-4)/(abs(x)-4));
		glVertex2f(x,y);
		x += deltax;
	}
	glEnd();

	//Terceira Equação
	x = -8.0;
	glColor3f(0,0,1);
	glBegin(GL_LINE_STRIP);
	while (x <= 8.0)
	{
		double y = abs(x/2)-0.0913722*(x*x)-3+sqrt(1-pow((abs(abs(x)-2)-1),2));
		glVertex2f(x,y);
		x += deltax;
	}
	glEnd();

	//Quarta Equação
	x = -8.0;
	glColor3f(1,0,1);
	glBegin(GL_LINE_STRIP);
	while (x <= 8.0)
	{
		double y = (2.71052+(1.5-0.5*abs(x))-1.35526*sqrt(4-pow(abs(x)-1,2))*sqrt(abs(abs(x)-1)/(abs(x)-1)));
		glVertex2f(x,y);
		x += deltax;
	}
	glEnd();
}


Saída do programinha que plota a Equação do Bátima


Nessie & Unicórnio

Continuando a falar das minhas comprinhas fofas pelo mundo das coisas fofas da internet. Hoje chegou a minha Nessie de feltro, que comprei na Shana Logic. Agora posso falar (e bem) dessa lojinha enlouquecedora: uma loja de artigos de designers/artistas  indie, tem milhares de coisas fofas escolhidas a dedo pela Shana (dona da loja). Chegou no tempo esperado (2 semanas) e não fui taxada (ufa! :)).

Eu sempre fui fascinada pela lenda do Monstro do Lago Ness. Torcia (torço?) para que ele existisse. E um dos meus lugares que sonho conhecer é a Escócia, e o lago… Na época de Ensino Médio, quando eu jogava (e muuuito) Sim City 2000, eu construia muitas Marinas só pra ver o “easter egg” da Nessie acontecer de vez em quando, hehehe 😀  Portanto, ao ver o bichinho de feltro tão fofo foi paixão total. Na época, estava fora de estoque, então pedi que me avisassem por e-mail quando chegasse de novo, e mais que depressa comprei a fofa.


E bom, quando ela chegou, linda e verde, meu Unicórnio da Imaginarium e ela trocaram olhares e… o amor nasceu 😉 Peguei os pombinhos no flagra… O amor é lindo! <3 <3 <3

Por hoje é só… (suspiros) ^^