Teste Tipo 2012 - AEISTECP
Transcrição
Teste Tipo 2012 - AEISTECP
Instituto Superior de Tecnologias Avançadas Ano lectivo: 2011/2012 Curso:Engenharia Informática Unidade Curricular: SMI – Sistemas Multimédia Interactiva Ano: 2 Semestre: 1 Tipo de Prova: Tipo Duração: 60 M Data: 27 de Janeiro 2012 Pergunta 1 (3 valores) O que é um “sprite”? Quais as suas propriedades e funcionalidades mais importantes? Dê exemplos em aplicações gráficas. Como implementaria em Processing uma classe com comportamento semelhante a um “Sprite”? Resposta: Um sprite é objecto gráfico que apresenta vários comportamentos gráficos. Um exemplo de sprite é o personagem “Sonic” dos jogos de plataformas, que possui comportamentos como {“Parado”,”Correr”,”Saltar”,”Explodir”}. Normalmente este tipo de objecto gráfico tem aplicação em videoJogos (nomeadamente 2D), simulação, conteúdos interactivos para aplicação como eLearning, ou mesmo webdesign. Para implementar uma estrutura tipo sprite podiamos usar uma classe com métodos que implementem os vários comportamentos gráficos (“sprite”) pretendidos. Estes comportamentos podem ser chamados individualmente. Um exemplo de uma classe sprite, com animação e dois comportamentos gráficos implementados numa tira gráfica poderia ser: // Classe para animar sprites com imagens PNG class spriteAnimacao { PImage tira; PImage[] imagensCorre; PImage[] imagensParado; int numeroImagensx, numeroImagensy; int frame; int x0,y0; spriteAnimacao(String imagemPrefixo, int totalx, int totaly) { numeroImagensx = totalx; numeroImagensy = totaly; imagensCorre = new PImage[numeroImagensx]; imagensParado = new PImage[numeroImagensx]; String ficheiro=imagemPrefixo; tira=loadImage(ficheiro); x0=tira.width; y0=tira.height; for (int i = 0; i < numeroImagensx; i++) { imagensCorre[i]=tira.get(int(x0/totalx*i),int(y0/totaly*0),tira.width/totalx, tira.height/totaly); imagensParado[i]=tira.get(int(x0/totalx*i),int(y0/totaly*1),tira.width/totalx, tira.height/totaly); } } 1 Instituto Superior de Tecnologias Avançadas Ano lectivo: 2011/2012 void displayCorre(float xpos, float ypos) { frame = (frame+1) % numeroImagensx; image(imagensCorre[frame], xpos, ypos); } void displayParado(float xpos, float ypos) { frame = (frame+1) % numeroImagensx; image(imagensParado[frame], xpos, ypos); } int getWidth() { return imagensCorre[0].width; } } 2 - (3 valores) Implemente em Processing um algoritmo para desenhar a seguinte função paramétrica, que representa uma hélice centrada em (xc,yc)? • Considere que (XC,YC), são números inteiros tal que e • 3 – (4 valores) Implemente em Processing uma função que permita criar o Histograma de níveis de cinzentos de uma imagem bitmap como a ilustrada. 4 –(valores 3) Implemente em processing um programa que permita converter um par de coordenadas polares (r,theta) para cartesianas(x,y). Resposta: /** * PolarToCartesian * * Converte coordenadas polares em cartesianas polares (r,theta) para cartesianas (x,y): * x = r * cos(theta) * y = r * sin(theta) */ float r; // Anglo e velocidade angular float theta; float theta_vel; float theta_acc; void setup() { 2 Instituto Superior de Tecnologias Avançadas Ano lectivo: 2011/2012 size(640, 360); // Inicializar valores r = height * 0.45; theta = 0; theta_vel = 0; theta_acc = 0.0001; } void draw() { background(0); // Transladar a origem para o centro do ecra translate(width/2, height/2); // Convert e polares em cartesianas float x = r * cos(theta); float y = r * sin(theta); // Desenha a ellipse em coordenadas cartesianas ellipseMode(CENTER); noStroke(); fill(200); ellipse(x, y, 32, 32); // Aplicar aceleração e velocidade ao angulo (r o raio mantém-se estático) theta_vel += theta_acc; theta += theta_vel; } 5 – (valores 3) Implemente em processing, uma transformação que permita rodar o quadrado da figura em torno do seu centroide. Resposta: /** pergunta 5 teste tipo */ float angle; float jitter; void setup() { size(640, 360); 3 Instituto Superior de Tecnologias Avançadas Ano lectivo: 2011/2012 noStroke(); fill(255); rectMode(CENTER); } void draw() { background(51); if (second() % 2 == 0) { jitter = random(-0.1, 0.1); } angle = angle + jitter; float c = cos(angle); translate(width/2, height/2); rotate(c); rect(0, 0, 180, 180); } 6 – ( valores 2) – Explique de forma precisa dois métodos para a detecção de colisões entre objectos em 2D. Incluindo a sua formulação matemática se necessário. Resposta: 6.1 Usar um método que use “bounding spheres” a envolver os objectos em que se pretende testar a colisão. Recorde-se que “bounding spheres” são as esferas de menor volume que contêm completamente o objecto. Como podemos testar a colisão entre estes objectos? Usando um algoritmo que use os centros das esferas calcule a distância entre os dois e teste se esta distancia é menor que o somatório dos raios das respectivas “bounding spheres”. A Distancia entre dois pontos no plano pode ser dada por: 6.2 Usar uma técnica de mapeamento do cenário, em que se divide o mesmo em áreas que se preenchem com as diversas classes de objectos ou vazios e que povoam o mesmo. Quando um objecto se move no cenário testa-se se o local onde se encontra é um vazio ou um objecto de outra classe e desta forma determina-se a colisão entre diversos objectos a 2D. Esta técnica também pode ser extrapolada para 3D se for necessário, aliás como a anterior. 4 – (3 valores) Represente a matriz genérica de transformação a 3D capaz de executar a operação de escala sobre o centroíde da figura de 2X, considere que o paralelepípedo tem dimensões 15 x 10 x 10. Observe a figura: Y 10 5 Resposta X 15 Para podermos executar uma transformação de escala no espaço sobre uma origem que não a origem colocada no centroide do objecto necessitamos de executar uma translação para a origem, operar a transformação de escala e finalmente repormos o objecto na sua posição original. Podemos representar vectorialmente a transformação composta desta forma: 4 Instituto Superior de Tecnologias Avançadas Ano lectivo: 2011/2012 em que : 5
Documentos relacionados
speed - azevedolab.net
nenhuma nova função ou comando da linguagem de programação Processing. Usaremos os condicionais, funções e variáveis já vistos. A novidade está na abordagem. Vejamos um exemplo fora da programação....
Leia mais