Pular para o conteúdo principal

1 Realidade virtual não imersiva — Exercícios

Uma câmera que gira em volta de um ponto guarda a posição em três números. Uma conta diz se uma peça cabe na tela. Uma página aberta numa tela comum é julgada pelo que oferece e pelo que não oferece. Cada cenário vem descrito por inteiro, com os números e as unidades de que você precisa.

Como trabalhar estes três. Os três se fazem com lápis e calculadora, e as respostas se escrevem em prosa. Faça na ordem. O primeiro tem três partes, todas com contas curtas. O segundo tem cinco partes: duas de contas, uma de comparação entre dois caminhos, uma sobre uma tela em pé e uma sobre a maior peça que ainda cabe na tela. O terceiro tem cinco partes e é um parecer sobre o documento de uma equipe, a respeito de um ambiente que você ainda não viu.

1.1 Exercício 1: Três números, uma posição e dois gestos

Nível Básico — aplicação direta de conceitos

Uma maquete de estação meteorológica aparece numa página, vista por uma câmera que gira em volta de um ponto sem parar de olhar para ele. Esse ponto é o alvo, e uma câmera assim é uma câmera em órbita. O alvo desta maquete é o centro do mastro, no ponto (0; 1,20; 0), com as medidas em metros: x é a posição para o lado, y é a altura e z é a posição para a frente da maquete.

Três números, medidos a partir do alvo, guardam a posição da câmera. O azimute é o giro em volta do alvo, visto de cima: com azimute 0, a câmera fica à frente do alvo, no sentido positivo de z, e o azimute cresce no giro que leva a câmera da frente para o lado do x positivo. A elevação é o ângulo com que a câmera sobe acima da altura do alvo. A distância é o comprimento do segmento entre a câmera e o alvo. Com o alvo em (x_a;\ y_a;\ z_a), o azimute \alpha, a elevação \varepsilon e a distância d, a conta da posição é

x = x_a + d\cos\varepsilon\,\operatorname{sen}\alpha, \qquad y = y_a + d\operatorname{sen}\varepsilon, \qquad z = z_a + d\cos\varepsilon\,\cos\alpha.

Agora o azimute vale 90 graus, a elevação vale 30 graus e a distância vale 4,0 m. A elevação aceita valores de 0 a 85 graus, e a distância, de 0,5 m a 6 m. As pontas desses dois intervalos são as travas: o menor e o maior valor que a câmera em órbita aceita para cada um dos dois números.

Dois gestos mexem nos números. Arrastar o mouse ou o dedo gira a câmera 0,35 grau por pixel: arrastar para a direita diminui o azimute, e arrastar para baixo aumenta a elevação. A roda do mouse muda a distância. Há duas versões do programa, e cada uma trata a roda de um jeito. O programa A multiplica a distância por 1,12 a cada passo da roda para baixo, e a câmera se afasta; a cada passo para cima, divide por 1,12. O programa B multiplica por 1,12 a cada passo para baixo e por 0,88 a cada passo para cima. Um passo da roda para baixo seguido de um passo para cima é uma ida e volta. O diagrama junta os gestos, as travas e a conta que dá a posição.

%%{init: {"flowchart": {"useMaxWidth": false}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart LR
    ARR["arrasto<br/>0,35 grau por pixel"] --> AZ["azimute"]
    ARR --> EL["elevação"]
    RODA["roda do mouse<br/>passo para baixo ou para cima"] --> DI["distância"]
    EL --> T1["travas<br/>0 e 85 graus"]
    DI --> T2["travas<br/>0,5 m e 6 m"]
    AZ --> POS["conta da posição<br/>a partir do alvo"]
    T1 --> POS
    T2 --> POS
    POS --> CAM["câmera"]
Figura 1: Do gesto à câmera: os números que cada gesto muda, as travas e a conta da posição.

O que peço de você: responda em três partes. Em (a), calcule a posição da câmera, (x; y; z) em metros, e diga em uma frase onde ela está em relação ao alvo. Em (b), com o azimute em 90 graus e a elevação em 30 graus, uma pessoa arrasta 120 pixels para a direita e 180 pixels para baixo: escreva o azimute e a elevação no fim do arrasto, diga se alguma trava agiu e, se agiu, o que ela evita. Em (c), partindo de 4,0 m, calcule a distância da câmera depois de cinco idas e voltas da roda no programa A e depois no programa B, e explique a diferença entre os dois resultados.

Você terá terminado quando tiver: em (a), as três coordenadas, cada uma com a conta, e a frase sobre a posição em relação ao alvo; em (b), o azimute e a elevação, cada um com a conta, e a resposta sobre as travas, com o que evita a trava que tiver agido; em (c), as duas distâncias, cada uma com a conta, e a explicação da diferença entre elas.

1.2 Exercício 2: Quanto da tela cada peça ocupa, e quem decide que ela cabe

Nível Intermediário — comparação e cálculo quantitativo

Um galpão de máquinas agrícolas aparece numa página, numa tela mais larga do que alta. A câmera da página é uma câmera em órbita (a órbita, para encurtar): ela gira em volta de um ponto, o alvo, sem parar de olhar para ele. Há um botão para cada peça, e cada botão enquadra a peça: leva a câmera ao ponto em que a peça aparece inteira na tela. Três peças interessam aqui: o bocal de um pulverizador, o trator e a carreta graneleira. Cada uma é medida por uma esfera envolvente, a esfera cujo centro é o centro da menor caixa, com as arestas paralelas às direções x, y e z, que contém a peça, e cujo raio é a metade da diagonal dessa caixa. Os raios são 0,12 m para o bocal, 1,9 m para o trator e 2,6 m para a carreta. A pergunta é se a órbita consegue enquadrar cada peça, isto é, se a peça está coberta pela órbita.

A câmera tem campo de visão vertical de 40 graus, o ângulo que a tela mostra de cima a baixo. A conta do enquadramento usa uma margem de 1,25, um fator maior que 1 que afasta a câmera para a peça não encostar nas bordas da tela. Com \rho para o raio da esfera, \theta para o campo de visão e m para a margem, a conta dá a distância pedida da câmera ao alvo, d_{\text{pedida}} = \rho / \operatorname{sen}(\theta/2) \times m. A câmera usa a distância concedida, que é a pedida presa entre as duas travas da distância (o menor e o maior valor que a órbita aceita para essa distância), 0,5 m e 6 m.

Uma colega propõe um caminho para responder: ela calcula a distância pedida e a compara com a trava máxima. O diagrama mostra o caminho dela. Há ainda uma medida da tela: a fração da altura é quanto da altura da tela o diâmetro da esfera ocupa na distância concedida d, e ela sai da conta \tan(\operatorname{arcsen}(\rho/d)) / \tan(\theta/2).

%%{init: {"flowchart": {"useMaxWidth": false}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart TD
    ESF["esfera envolvente da peça<br/>e o raio dela"] --> PED["distância pedida<br/>pela conta do enquadramento"]
    PED --> Q{"a pedida passa<br/>da trava máxima?"}
    Q -->|não| S["peça coberta"]
    Q -->|sim| N["peça não coberta"]
Figura 2: O caminho que a colega propõe para decidir se uma peça está coberta pela órbita.

O que peço de você: responda em cinco partes, com as distâncias arredondadas ao centímetro e as frações arredondadas à unidade da porcentagem. Em (a), calcule a distância pedida e a distância concedida de cada uma das três peças. Em (b), calcule a fração da altura de cada peça. Em (c), compare, peça por peça, o veredito do caminho da colega com o da fração; onde os dois divergirem, diga qual deles está certo e por quê, e diga quais peças estão cobertas pela órbita. Em (d), uma pessoa abre a mesma página num tablete em pé, com a largura da tela igual a 3/4 da altura, e, a qualquer distância, a faixa que a câmera vê na largura mede 3/4 da faixa que ela vê na altura: diga quais das três peças aparecem inteiras nessa tela, compare essa contagem com a das peças cobertas em (c) e diga por que as duas são iguais ou diferentes. Em (e), de volta à tela mais larga do que alta, calcule o maior raio de esfera que a órbita ainda cobre com estas travas e este campo de visão, e o menor valor da trava máxima da distância que deixaria a esfera da carreta coberta; diga também se a margem entra em alguma das duas contas.

Você terá terminado quando tiver: em (a), as seis distâncias, três pedidas e três concedidas, na ordem das peças; em (b), as três frações; em (c), o veredito dos dois caminhos para cada uma das três peças, onde divergirem, qual está certo e o motivo, e a lista das peças cobertas; em (d), as peças que aparecem inteiras na tela em pé, a comparação com a contagem de (c) e o motivo de as duas contagens serem iguais ou diferentes; em (e), os dois números, a conta de cada um e a resposta sobre a margem.

1.3 Exercício 3: Um parecer sobre o documento do relógio de torre

Nível Desafiador — integração de conceitos e transferência

Uma equipe montou, para a feira de ciências de uma escola, um ambiente virtual com um relógio de torre aberto. As peças que o ambiente existe para mostrar são cinco: o mostrador, o pêndulo, a engrenagem motriz, o escapamento e a caixa. Cada regime é um modo de servir o mesmo ambiente. O ambiente da equipe tem dois: o regime em janela, que mostra a cena numa tela comum, de computador ou de celular, e o regime do visor (o aparelho preso à cabeça que cobre os olhos e põe o ambiente em volta de quem o usa).

A escola tem dois visores para os 30 alunos que vão à visita, e um desses alunos não pode usar visor nenhum. A equipe enviou um documento com cinco itens e pede o seu parecer antes da feira. Você nunca viu esse ambiente; os dados de que precisa estão nos itens que seguem. O primeiro é o plano. A equipe vai terminar antes o regime do visor, que é o que vai impressionar a escola, e deixar a janela para a última semana, como “versão de teste do visor”. Hoje a janela desenha o relógio, deixa girar a câmera em volta dele e tem um botão só, o do pêndulo. No dia da visita, um dos dois visores pode não ligar. Quando um aparelho não oferece o regime melhor, o ambiente passa para um regime que pede menos dele, e essa passagem é a queda entre regimes.

O segundo item é a câmera da janela. Ela é uma câmera em órbita, ou só órbita: gira em volta de um ponto, o alvo, e guarda a posição em três números, o azimute (o giro em volta do alvo, visto de cima), a elevação (o ângulo com que a câmera sobe acima da altura do alvo) e a distância até o alvo. O alvo está em (0; 1,10; 0), em metros, com x para o lado, y para cima e z para a frente do relógio, e os três números valem agora 0 grau, 20 graus e 3,0 m. Com azimute 0, a câmera fica à frente do alvo, no sentido positivo de z, e o azimute cresce no giro que leva a câmera da frente para o lado do x positivo. Com o alvo em (x_a;\ y_a;\ z_a), o azimute \alpha, a elevação \varepsilon e a distância d, a conta da posição é

x = x_a + d\cos\varepsilon\,\operatorname{sen}\alpha, \qquad y = y_a + d\operatorname{sen}\varepsilon, \qquad z = z_a + d\cos\varepsilon\,\cos\alpha.

Cada pixel de arrasto gira a câmera 0,35 grau, e arrastar para a direita diminui o azimute. O botão do pêndulo foi escrito antes da órbita e escreve a posição da câmera direto, em (1,2; 1,30; 0,80). Uma aluna clicou nele e, em seguida, arrastou o dedo 20 pixels para a direita, num movimento só. O diagrama mostra o caminho do gesto e o do botão até a câmera.

%%{init: {"flowchart": {"useMaxWidth": false}, "sequence": {"useMaxWidth": false}, "class": {"useMaxWidth": false}, "state": {"useMaxWidth": false}, "er": {"useMaxWidth": false}}}%%
flowchart LR
    ARR["arrasto do dedo<br/>0,35 grau por pixel"] --> NUM["azimute, elevação e distância<br/>guardados pela órbita"]
    RODA["roda ou pinça"] --> NUM
    NUM --> POS["conta da posição<br/>a partir do alvo"]
    POS --> CAM["câmera"]
    BOT["botão do pêndulo<br/>posição escrita direto:<br/>(1,2; 1,30; 0,80)"] --> CAM
Figura 3: Os dois caminhos até a câmera na página da equipe: o do gesto e o do botão do pêndulo.

O terceiro item é uma medição da janela numa tela de 60 imagens por segundo. Cada imagem que o aparelho mostra é um quadro, e o teto é o tempo que o programa tem para preparar um quadro antes que o aparelho precise do seguinte: nesta tela, 16,7 ms. Nos últimos 120 quadros, o custo médio (o tempo que o trabalho do próprio programa leva por quadro) foi de 2,4 ms, e o intervalo médio (o tempo real entre duas imagens apresentadas) foi de 16,9 ms. O maior dos 120 intervalos foi de 34,1 ms. A equipe escreveu o que segue, em que imagem perdida quer dizer uma imagem que não saiu a tempo: “folga = 16,7 − 16,9 = −0,2 ms; em média, o trabalho do nosso código passa do teto. Houve imagem perdida. Foi o nosso código que a causou, e ele precisa ser reescrito.”

O quarto item é a lista do que a janela não oferece. A lista tem três linhas, e cada uma afirma uma coisa: a profundidade é inferida (a distância que quem olha calcula pelas pistas de uma imagem só); não há escala corporal (a comparação do tamanho das coisas da cena com o corpo de quem as vê); não há alcance de braço (a distância até onde a mão chega sem dar um passo). A lista está no texto do documento, e não na página. A aferição de uma linha é o confronto do que ela afirma com o que o programa em execução sabe. A equipe anexou ao documento o resultado de duas aferições: uma com a página aberta num computador de mesa, sem visor, e outra com a mesma página aberta com um visor apresentando a imagem. Nas duas, as três linhas saíram com o resultado confirmado. Ao lado da terceira, a equipe escreveu que as cinco peças estão cobertas pela órbita (a órbita consegue enquadrar cada uma).

O quinto item é uma visita de teste. Uma visitante que nunca tinha visto o ambiente abriu o endereço da janela no celular. Em cinco minutos, ela chegou ao pêndulo pelo botão e a duas outras peças girando e aproximando a câmera, e não chegou às outras duas. O texto que diz como girar, aproximar e usar o botão está num arquivo à parte, anexado ao convite da feira, e a visitante só soube desse arquivo depois.

O que peço de você: escreva o parecer em cinco partes. As quatro primeiras tratam, nesta ordem, dos quatro primeiros itens do documento, e a quinta volta aos itens para responder às duas perguntas que este módulo faz a uma janela. Em (a), justifique se a ordem do plano é a certa e diga o que ela faz com cada um destes três casos no dia em que um dos visores não liga: quem usaria esse visor, quem assiste a quem está com o visor e o aluno que não pode usar visor. Em (b), calcule a posição da câmera logo depois do movimento de 20 pixels e explique, olhando o diagrama, por que ela fica ali; depois escreva o que o botão do pêndulo deve fazer para que a câmera continue perto do pêndulo depois de qualquer arrasto. Em (c), refaça a conta da folga como este módulo a define e diga se houve imagem perdida, com o limiar que você usou para decidir; depois diga, para cada uma destas três afirmações, se a medição a confirma, a contraria ou a deixa inconclusiva: que, em média, o trabalho do código passa do teto; que o código causou a imagem perdida; que a causa veio de fora do código. Em (d), examine o resultado das duas aferições e diga, linha a linha, se o resultado registrado é o que a aferição dá; onde não for, escreva o resultado certo e a razão. Em (e), responda se a janela está pronta para ser o destino da queda entre regimes: dê a resposta a cada uma das duas perguntas que este módulo faz a uma janela, com o item ou os itens do documento que a sustentam.

Você terá terminado quando tiver: em (a), a justificativa de a ordem do plano ser ou não a certa e, para cada um dos três casos, o que a ordem faz com ele; em (b), a posição com a conta, a explicação apoiada no diagrama e o que o botão deve fazer; em (c), a folga com a conta, a resposta sobre a imagem perdida com o limiar usado e as três afirmações, cada uma com um dos três resultados e o motivo; em (d), as seis linhas, cada uma dita como certa ou errada e, nas que forem erradas, o resultado certo com a razão; em (e), a resposta a cada uma das duas perguntas, com o item ou os itens do documento que a sustentam.

Método, para quando a resposta não sair. Nos três, escreva cada conta com a unidade ao lado de cada número e diga de onde saiu cada resultado. Antes de afirmar que algo funciona, ou que algo é a causa de um defeito, diga o que você mediu ou calculou para saber. Quando o enunciado não trouxer um dado de que a resposta dependeria, diga que ele não o traz.