quarta-feira, 9 de setembro de 2015

Pontos e Vetores

Vimos no artigo "Usando estruturas em Blueprints" que um Vetor é representado na Unreal Engine como uma estrutura contendo as variáveis  X, Y e Z que são do tipo "float" (fracionário).

Este valores podem ser interpretados de diversas formas diferentes. Um de seus usos é representar um ponto (ou posição) no espaço 3D. Por exemplo todo Ator possui uma variável chamada "Location" que é do tipo "Vector". Esta variável mantém a coordenada de mundo do Ator.      

Para ilustrar, temos uma cadeira e uma mesa na imagem abaixo, que são dois Atores:


Esta imagem mostra a posição da cadeira:


De uma forma simplificada podemos representar esta posição assim: (100, 0, 20).

A posição da mesa é (400, 0, 20):


Agora imagine que precisamos orientar um robô a sair da cadeira e chegar até a mesa. Ele precisa de duas informações, a direção em que deve se mover e a distância a ser percorrida. A instrução necessária seria algo do tipo:

"Mova 300 cm para direita."


As duas informações de direção e distância podem ser reunidas em um único vetor que pode ser representado da mesma forma que se representa uma posição usando os valores X, Y e Z. 

Assumindo neste exemplo que o movimento para a direita ocorre ao longo do eixo X. O vetor acima ficaria assim: (300, 0, 0).

Se pegarmos a posição da cadeira e somar com o vetor que representa este movimento, o resultado será a posição da mesa. Para somarmos um ponto com um vetor, basta somar cada um de seus elementos:

posição_mesa = posição_cadeira + vetor_movimento
posição_mesa = (100, 0, 20) + (300, 0, 0)
posição_mesa = (100 + 300, 0 + 0, 20 + 0)
posição_mesa = (400, 0, 20)

Sendo assim, se temos um ponto de origem e um ponto de destino e queremos descobrir qual o vetor de movimento, basta pegar o ponto de destino e subtrair o ponto de origem. 

Por exemplo, se queremos saber qual o vetor que nos leva do ponto de origem (50, 30, 45) até o ponto de destino (120, 80, 110), basta calcular:

vetor_movimento = ponto_destino - ponto_origem
vetor_movimento = (120, 80, 110) - (50, 30, 45)
vetor_movimento = (120 - 50, 80 - 30, 110 - 45) 
vetor_movimento = (70, 50, 65)

Agora que já vimos um exemplo, vamos ver uma definição mais formal de um vetor.

"Um vetor é um objeto geométrico que possui uma magnitude (ou comprimento) e uma direção. Um vetor é geralmente representado por uma seta com uma direção definida."

Vetores são muito utilizados na programação de jogos. Eles podem ser usados para indicar direções e para representar velocidade, aceleração e força que atuam em um objeto.

No próximo artigo vamos conhecer diversas operações que podem ser feitas com vetores.