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

Arrays - azevedolab.net

Arrays - azevedolab.net stroke(0); fill(c); rectMode(CENTER); rect(xpos, ypos, 20, 10);

Leia mais

speed - azevedolab.net

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