Há duas poderosas ferramentas matemáticas que podemos utilizar com inúmeros vetores para nos dar muitas
informações extras sobre como eles se encontram no espaço em relação um ao outro.
Eles são o produto DOT e o produto cruzado.
Nesta palestra, vamos examinar o produto DOT e como ele pode ser usado para transformar um personagem
em um local objetivo.
O produto DOT é a soma da multiplicação dos componentes correspondentes ou valores de coordenadas
em dois vetores.
Dados os vetores V e W mostrados aqui, o produto DOT é encontrado multiplicando os dois valores x juntos, os dois
valores y juntos, e então adicionando o resultado.
Ela é escrita como uma equação como esta com um único ponto entre os nomes vetoriais.
Isto não é uma parada completa, mas um ponto real que se encontra acima da linha.
A equação completa aparece assim v ponto x multiplicado por w x mais v y multiplicado por w y.
Assim, tomando os valores dos vetores que temos neste caso, a equação se torna três vezes seis
mais três vezes negativa.
O produto DOT, neste caso, é 15.
Experimente por si mesmo.
Qual é o produto DOT destes dois vetores?
Zero três e negativo quatro dois.
A equação se torna zero multiplicado por quatro negativos.
Quais são as coordenadas x mais três multiplicadas por dois?
Quais são as coordenadas y?
Isto resulta em um valor final do produto DOT para estes dois vetores sendo seis.
Agora você provavelmente está sentado lá pensando, e daí?
O que significa este valor que estamos calculando?
Bem, ele nos diz algumas coisas sobre as orientações relativas dos vetores.
Tenha um momento de paciência comigo e trabalhe os produtos DOT para cada um desses pares.
Pausa o vídeo enquanto você o faz.
Escreva-as.
Como você foi?
O produto DOT para um é dez.
O produto DOT para B é zero e o produto DOT para C é negativo sete.
Agora, dê uma olhada em cada um dos valores que você tem para os produtos DOT e como os pares
de vetores são orientados em relação um ao outro.
Você pode notar alguma coisa?
Bem, no caso de um, o produto DOT é um valor positivo e o ângulo entre os vetores é inferior
a 90 graus.
Em B, os vetores estão a 90 graus um para o outro e o produto DOT é zero.
Para C, os vetores fazem um ângulo maior que 90 graus e o produto DOT é menor que zero.
Assim, apenas para recapitular, se o produto DOT for maior que zero, então o ângulo entre os vetores é inferior
a 90 graus.
Se o produto DOT for igual a zero, então o ângulo é exatamente de 90 graus.
E se o produto DOT for inferior a zero, então o ângulo deve ser superior a 90 graus.
Onde isso é útil nos jogos?
Bem, ele nos permite determinar onde está um objeto de jogo em relação a outro objeto de jogo.
Digamos que temos um tanque e o combustível, o vetor que mostra a direção para frente do tanque é a direção que
o tanque está basicamente olhando para dentro.
Se você extrair outro vetor para o combustível do tanque, você pode então usar o produto DOT para determinar
se o combustível está na frente ou atrás do tanque.
E este mesmo princípio pode ser usado se você tiver, por exemplo, uma arma automática ou se tiver algum tipo
de câmera que queira detectar se o personagem entrou em um determinado espaço.
Neste caso, se o combustível estiver à vista do tanque, o produto DOT destes vetores será maior
que zero.
Entretanto, se o combustível estiver atrás do tanque, então o produto de ponto será menor que zero.
Mais tarde revisitaremos estes princípios, mas por enquanto, o que nos interessa mais é virar o tanque
para enfrentar o combustível antes que ele se mova em direção a ele.
Portanto, o primeiro problema que enfrentamos é encontrar o ângulo real entre a direção de frente
do tanque e a direção para o combustível.
A relação entre o produto DOT e o ângulo entre os vetores pode ser expressa assim, onde
a derivação desta fórmula é tirada da trigonometria e incluída no artigo anexo a esta
palestra.
Isto pode ser ainda mais rearranjado para fazer do ângulo o foco da equação, para que você possa escrever um
método que retorne o ângulo entre os vetores.
E, neste caso, funciona para ser o cosseno inverso do produto dos vetores dividido pelo seu comprimento
multiplicado.
Agora, se toda essa matemática parecer um pouco complicada e abstrata demais para você, não se preocupe.
Vamos passar por um exercício e o faremos passo a passo.
Portanto, para encontrar o ângulo que nosso tanque precisa para se virar em direção ao combustível, antes de tudo, precisamos de
nossos dois vetores.
Precisamos daquele que indica a direção em que o tanque está voltado, e precisamos daquele que está entre
o tanque e o combustível.
Agora é muito fácil encontrar aquele em que o tanque está voltado, pois em unidade ele o armazena dentro do
próprio tanque.
E esse vetor particular é, neste caso, o vetor ascendente em nosso tanque.
Se você estivesse em um ambiente 3D, que estaremos um pouco mais tarde quando estivermos olhando para
este tipo de ângulo, girando em nossos personagens oculares, então a direção de frente que o personagem está enfrentando
está na verdade ao longo do eixo Z.
Portanto, você só tem que ter cuidado sobre qual dessas unidades transforma os eixos que você tem de usar.
Ok, então desta vez estamos usando isso.
Agora, para encontrar o vetor entre o tanque e o combustível, nós realmente tomamos a posição dos combustíveis
e menos a posição do tanque.
O resultado é um vetor e é o vetor desde o tanque até o combustível.
Então vamos começar a implementar algumas dessas coisas e vamos fazê-lo de volta em nosso roteiro de viagem
que temos em nosso tanque.
Portanto, vamos abrir isso.
E uma vez dentro de lá, vamos criar um novo método de cálculo do ângulo.
Agora aqui dentro, o que vamos fazer é criar um ângulo de cálculo e vamos fazer isso onde temos nossa barra
de espaço sendo atingida.
Então, calcule o ângulo e agora vamos colocá-lo dentro.
Lado dele.
Tão nulo.
Calcule o ângulo e o que vamos fazer aqui.
Eu vou começar, mas depois deixo para você trabalhar.
Antes de tudo, precisamos criar um vetor que será nosso tanque para frente, e que será na verdade
um vetor três, não um vetor dois.
Isso vai igualar, como mostrei no vídeo, transformar ponto para cima neste caso, em vez de como o vetor
voltado para frente.
Porque neste caso, como estamos em 2D, o vetor de frente é o vetor ascendente para nosso tanque.
Portanto, este é o tanque para frente.
Então precisamos de um vetor três e precisamos da direção do combustível e isso vai igualar a posição dos combustíveis.
Assim, o combustível transformou a posição menos a posição dos pontos de transformação.
Portanto, agora temos nossos dois vetores.
Muitas vezes quando você começa a fazer muitos cálculos matemáticos, especialmente estas coisas com
vetores, elas podem não ser uma forma intuitiva de pensar sobre as coisas e, portanto, sua capacidade de visualizá-las pode não
ser tão boa como se você as estivesse usando há muito tempo.
Portanto, uma pequena ferramenta que eu gosto de usar é, na verdade, o raio de tração de depuração aqui dentro, que apenas o ajudará
a ver se você tem os valores certos.
Portanto, precisamos que o tanque adiante seja o vetor de avanço do tanque e a direção do combustível para ir
entre o tanque e o combustível.
Por isso, vamos colocar algumas arrays de desenho de pontos de depuração.
Então, debug dot, draw ray.
E isto só vai desenhar um pouco de uma linha na tela para que você possa ver.
Então é esta posição de ponto de transformação e novamente, eu estou usando isto quando não preciso.
Mais uma vez, é apenas um hábito para mim.
Não é preciso colocá-lo ali se não se quiser.
Assim, este será nosso tanque para frente a partir da posição do tanque e o faremos em cor verde ponto e o faremos
subir por 2 segundos para que possamos vê-lo.
Em seguida, queremos nosso raio de tração de pontos para esta posição de transformador de pontos como posição de partida para nosso
raio.
E depois vamos desenhá-lo na direção do combustível e depois colorir o ponto vermelho por 2 segundos.
Certo.
Uma vez que você tenha isso, vamos apenas salvá-lo e vamos voltar à unidade e experimentar isto.
Então vamos brincar com a imprensa e, uma vez aqui dentro, podemos atingir a barra de espaço.
E você pode ver que temos ali aquela linha vermelha.
Agora, onde está nosso vetor de avanço?
Bem, na verdade ele está lá.
Se eu puder ampliar aqui de perto.
Vamos dar uma olhada.
Veja, há o vetor Ford em verde.
Você pode vê-lo em sua tela?
Talvez você tenha que aproximar um pouco mais o zoom.
Aí está.
Agora, por que é tão pequeno enquanto o vetor dianteiro ou o vetor ascendente ou mesmo o vetor direito de qualquer objeto
de jogo é na verdade normalizado, o que significa que é um comprimento de um.
É por isso que é tão curto lá dentro.
Mas tudo bem.
Ainda podemos vê-lo.
Se você realmente quisesse que isso fosse um pouco maior e aparecesse na tela, então você poderia multiplicar este tanque
aqui por, digamos, dez, e seria um comprimento de dez e você seria capaz de vê-lo.
Mas, de qualquer forma, isto é apenas para que possamos basicamente visualizar estas equações e ter certeza de
que temos os valores corretos.
Certo, então vou deixar o resto deste código para que o ângulo seja realmente criado e imprima-o
como um desafio para você no final deste vídeo.
Então, para encontrar o ângulo, a fórmula é esta.
Portanto, é o arco cosseno, que é o que significa cosseno para o negativo de nosso v w assim um produto vetorial
com o outro dividido pelo comprimento dos dois vetores multiplicados juntos.
Ok, trabalhe por meio dele, peça por peça.
Não se deixe dominar por toda a equação.
Reflita um pouco sobre isso.
Portanto, quando voltarmos no próximo vídeo, continuaremos com isto e lhe mostrarei como decifrar
esta equação se você tiver problemas com ela e tirar nossa impressão angular.