Destaque
- Gerar link
- X
- Outros aplicativos
Marcadores
Dia 281 e 283 a 285 - Matemática com Freya Holmer #2
Agora de volta a matemática
Dot Product - Produto Escalar
Vou deixar o nome assim pq essa tradução automática esta me deixando confuso.
Aparentemente, há mais de uma forma de se multiplicar dois vetores 2D.
A primeira e que achei ser a única, é multiplicar os componentes de cada vetor um pelo outro ou seja:
a(1,2) * b(2,3) = (1*2, 2*3) = (2, 6)
Segundo a Freya, na Unity, isso é feito por meio do método Vector2.Scale e Vector3.Scale...
DIV: agora usarei esse abreviação para minhas divagações, apesar de em html isso ter um significado próprio, eu estava tentando assistir mais, mas sinceramente, comecei a não entender do que raios ela está falando :) aliás, penso em fazer um protótipo simples para aplicar tudo que ela já disse, quem sabe um jogo de tiro top down simples 2D.
Produto Escalar |
O Produto escalar, é como se você usasse um dos vetores para servir de base de um triangulo retângulo, e o resultado seria o comprimento do trecho que serviu de base.
E independente da ordem, o resultado é o mesmo, um ou ambos vetores devem ser normalizados (comprimento de 1) antes.
E se necessário o vetor pode ser meio que espelhado para o lado negativo, mas ai o resultado fica negativo.
A formula de Produto Escalar |
Mais algumas coisas interessantes sobre isso, se for feito o produto escalar entre dois vetores iguais o resultado será 1, e se os vetores estiverem em um ângulo de 90° um do outro o resultado vai ser 0. e se ambos estiverem digamos apontando em direções opostas/espelhadas, vai ser -1.
Esse produto escalar significa basicamente, a diferença entre as direções que os dois vetores estão apontando.
No vídeo a Freya citou um uso que me deixou meio confuso, ela tinha um jogo onde uma bola é lançada em uma superfície, para saber com que volume emitir um barulho quando a bola batesse na superfície, ela calculou o produto escalar entre a Normal da superfície e a direção da velocidade da bola, assim ela obteve a velocidade da bola em relação a direção da superfície. então se a bola estivesse caindo verticalmente na superfície, o valor seria -1, mas ai ela usaria um abs, que resultaria em 1, o que daria o volume máximo, e quando mais horizontalmente é a velocidade da bola, mais baixo seria o volume, já que o produto escalar estaria cada vez mais próximo de 0.
PS: Não importa se os vetores não estiverem normalizados, se os vetores forem perpendiculares, o resultado sempre vai ser 0, mas nesse caso o "1 e -1" muda.
E terminei de ver o vídeo 1.
E no final do vídeo ela propôs uns desafios
1 - Fazer um Trigger Radial
2 - Fazer um Script de "Campo de visão
Inicialmente pensei, isso vai ser fácil... moleza, mas demorei um tempinho.
Essa imagem representa o mundo, o problema de se calcular o Dot de A e B, é que ele sempre será em relação a (0, 0). e eu quero que o A seja a origem, a forma de fazer isso até que é bem simples, basicamente, eu vou fazer A - B, assim eu terei a posição de B caso A, fosse a origem do mundo, acho que dá pra chamar isso de posição no local space de A, mas nesse caso sem levar em conta a rotação. ai entra um problema, para calcular Dot eu preciso de dois vetores e agora A é a origem, ou seja (0, 0), mas não importa a posição de A o que importa é sua rotação, mas como não sei como calcular a rotação, por hora deixei um vetor para cima no lugar dela.
DIV |
Dia 284 - 15/02 - terminei o vídeo e parei por aqui
e foi...
3 - Fazer um método que converta de World Space para local Space e outro que faz o oposto e isso usando também a rotação.
Partindo do básico, apenas o calculo mais simples, que funciona sem considerar a rotação.
MAS, parece que a forma que se obtém a posição mundial é um pouco diferente.
😱 aparentemente a partir de uma certa distancia a conversão de mundial para local usando esse método deixa de funcionar... pelas minhas observações essa distancia é 45 m. 😢 foda que o por que de funcionar fazia sentido.
😱 aparentemente a partir de uma certa distancia a conversão de mundial para local usando esse método deixa de funcionar... pelas minhas observações essa distancia é 45 m. 😢 foda que o por que de funcionar fazia sentido.
Entendi pq a direção mundial está dando incorreta, primeiro na hora de calcular o dot, antes de normalizar eu tenho que somar a posição do objeto pai, e com isso ele vai consegui converter caso o objeto pai esteja na rotação zerada. Mas se tiver em outra rotação a posicão calculada será errada, por que tenho que considerar também a rotação do objeto pai... enfim por hoje é isso.
Dia 285 - 16/02 - continuei os exercícios
DIV: talvez amanhã eu continue ou talvez, eu vá logo ao próximo vídeo, já que nele tem as soluções explicadas :)
- Gerar link
- X
- Outros aplicativos
Marcadores:
Desafio Diário
Divagações
unity
Comentários
Postar um comentário