O Básico Sobre Vetores

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

O Básico Sobre Vetores

Mensagem por LeandroDaher em Dom 04 Maio 2014, 20:18

Título: O Básico Sobre Vetores
Versão do GM: Todas
Dificuldade: Varia para cada pessoa
Link para download da Engine: Não possui engine
Requer Extensões: Não
Requer DLLs: Não
Tags: Básico; Vetor; Vetores; Matemática


Vetores

    Vetores são amplamente utilizados no campo da matemática e física, principalmente no desenvolvimento de jogos sendo quase que obrigatório para todos os programadores. Utilizaremos vetores frequentemente durante o desenvolvimento de um jogo, seja quando quisermos implementar uma Inteligência Artificial ou apenas fazer coisas mais básicas como rotação e translação.

    Mas o que é um vetor? Você provavelmente já aprendeu que um ponto no plano cartesiano pode ser expresso com dois números, por exemplo: 

P = (x, y)

    Um vetor 2D (bidimensional) é parecido, temos abaixo:
V = (xy)

    Entretanto, embora similares, um vetor representa dois valores: direção e magnitude. O lado direito da Figura 1 mostra o vetor (3, 2) situado na origem.



Figura 1: Um ponto P e um vetor V.

Adição de Vetores

    Imagine que você está em uma ilha e tem um mapa e nele está escrito uma mensagem: O tesouro está enterrado no ponto X, você pode chegar até lá seguindo os vetores (-5, 5), (0, -10), (13, 7), (-4, 3).

    Agora imagine que além de você existem mais três pessoas na ilha, cada uma com uma cópia deste mapa. Enquanto todos iam em direção a cada vetor você foi mais esperto e encontrou um caminho direto para o tesouro, quando todos chegaram o tesouro não estava mais lá e você saiu rindo e feliz da vida. Você se deu bem porque sabia que ao somar os vetores, você encontraria um único vetor que o levaria direto ao ponto X, resultando no vetor (4, 5), exatamente o mesmo resultado se seguisse cada vetor individualmente.

    A Figura 2 mostra o caminho que seus três concorrentes seguiram e a Figura 3 mostra o caminho que você seguiu.




Figura 2





Figura 3

    Portanto para somar os vetores, basta somar seus componentes individualmente. Por exemplo:

v = (4, 2)

u = (6, 3)


Vr = v + u

Vr = (4+6, 2+3)

Vr = (10, 5)


Diferença entre vetores


    Se v=(x,y) e u=(a,b), definimos a diferença entre v e u, por:

v - u = (x-a,y-b)
Produto de um número escalar por um vetor

    Se v=(x,y) é um vetor e c é um número real, definimos a multiplicação de c por v como:

c * v = (c * vx, c * vy)


Magnitude de um vetor


    A magnitude (ou módulo) de um vetor é seu comprimento. Para calcular a magnitude basta utilizar o Teorema de Pitágoras. Por exemplo, qual a magnitude do vetor (4, 5)?



Figura 4


    Repare que devemos utilizar duas barras verticais em volta de um vetor para denotar seu comprimento.



Figura 5


Normalização de Vetores


   Quando um vetor é normalizado, ele retém sua direção, mas sua magnitude (ou módulo) é recalculada para que tenha uma unidade de comprimento (um comprimento de 1). Para fazer isso divide-se cada componente do vetor pela magnitude dele. Sendo assim:

N = v / |v|

   Para normalizar o vetor (4, 5) podemos fazer isto:

NovoX = 4 / 6.403 = 0.62
NovoY = 5 / 6.403 = 0.78

    Vetores normalizados são muito úteis, você saberá o porquê em breve.


Produto escalar (Dot Product)


    O produto escalar é o ângulo entre dois vetores. Dado dois vetores 2D u e v a equação é a seguinte:


u • v = uxvx + uyvy


    O símbolo • denota o produto escalar (em inglês, ponto é dot). Entretanto a equação não nos dá um ângulo. Se você quer um ângulo, você vai ter um! Abaixo uma outra maneira de calcular o produto escalar:


u • v = |u||v| cos(Θ)


    Rearranjando temos:


cos(Θ) = u • v / |u||v|


    É aqui que você descobre um dos usos úteis da normalização de vetores, se u e v são normalizados, podemos simplificar a equação:


cos(Θ) = u • v / 1 x 1


cos(Θ) = u • v


cos(Θ) = uxvx + uyvy


Obs.: Θ = ângulo.


    Um dos grandes usos do produto escalar é que você pode saber rapidamente quando um objeto está na frente ou atrás de outro. O produto escalar do vetor da face do objeto 1 e do vetor do objeto 2 para o objeto 1 será positivo se o objeto 2 estiver na frente do plano da face do objeto 1 e negativo se estiver atrás. Veja na figura 6.


Figura 6


    Chegamos ao fim do tutorial, espero que tenha gostado. Espero que pesquisem mais sobre o assunto pois eu o abordei muito vagamente aqui, obrigado por ler.


Última edição por leandrohackerx em Dom 04 Maio 2014, 23:21, editado 3 vez(es) (Razão : Problemas com tags html.)

LeandroDaher

Número de Mensagens : 357
Idade : 20
Data de inscrição : 13/05/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: O Básico Sobre Vetores

Mensagem por fredcobain em Dom 04 Maio 2014, 21:56

Leandro, seu tutorial está bem escrito, bem ilustrado e bem identado.

Mas eu acredito que iria agregar bastante valor vc dar uma aplicação prática (para jogos) dessa disciplina no seu tutorial. Em quais situações poderíamos aplicar esses conhecimentos ?

Eu sugiro começar pelas funções do GML lenghtdir_x e lenghtdir_y (que usam componentes de vetor).
Depois falar um pouco sobre as funções trigonometricas (e suas aplicações).

Com isso, certamente seu tutorial vai ter potencial para entrar no Staff Choice.

E aí, topa o desafio ?
=)

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: O Básico Sobre Vetores

Mensagem por LeandroDaher em Dom 04 Maio 2014, 22:19

Opa, gostei da ideia. Estou a uns dois anos sem mexer com GM, passei este tempo aprendendo sobre como criar jogos do zero (ainda não tomei vergonha na cara pra criar um jogo Smile ) e estudando um pouco de música. Vou preparar um material esta semana pra postar algo mais completo aqui, só preciso de uns dias pra organizar tudo pois tenho tempo apenas a noite. Valeu!

LeandroDaher

Número de Mensagens : 357
Idade : 20
Data de inscrição : 13/05/2010
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: O Básico Sobre Vetores

Mensagem por Gabreel em Seg 05 Maio 2014, 03:10

Além do que o Fred falou aconselho que explique um pouco melhor os vetores, acho que é um pouco complicado você ir de uma ideia praticamente vazia para normas e consequentemente para ângulo entre vetores. Na realidade não só vetores são essenciais na programação de jogos como a trigonometria e toda  geometria. O fórum precisa de mais aulinhas como essa, é até interessante, se você quiser, 'ensinar' esses assuntos!

Gabreel

Número de Mensagens : 2227
Idade : 20
Data de inscrição : 02/10/2009
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: O Básico Sobre Vetores

Mensagem por Conteúdo patrocinado Hoje à(s) 14:21


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum