If you're seeing this message, it means we're having trouble loading external resources on our website.

Se você está atrás de um filtro da Web, certifique-se que os domínios *.kastatic.org e *.kasandbox.org estão desbloqueados.

Conteúdo principal

Magnitude e normalização de vetores

Multiplicação e divisão, como vimos, são meios pelos quais o comprimento do vetor pode ser alterado sem afetar a direção. Talvez você esteja se perguntando: "ok, então como eu sei qual o comprimento de um vetor? Sei as componentes (x e y), mas qual o comprimento (em pixels) da seta de fato? Entender como calcular o comprimento (também conhecido como magnitude) de um vetor é incrivelmente útil e importante.
Figura 1.10: O comprimento ou "magnitude" de um vetor v  é muitas vezes escrito como: ||v||
Note no diagrama acima como o vetor, representado por uma seta e duas componentes (x e y), cria um triângulo retângulo. Os lados são as componentes e a hipotenusa é a seta propriamente. Tivemos a sorte de obter este triângulo, pois em tempos antigos, um matemático Grego chamado Pitágoras desenvolveu uma amável fórmula para descrever a relação entre os lados (catetos) e a hipotenusa de um triângulo retângulo.
O teorema de Pitágoras é a ao quadrado, mais b ao quadrado é igual a c ao quadrado.
Com essa fórmula, agora podemos calcular a magnitude de v como se segue:
||v||=vxvx+vyvy
Portanto, o código para implementação no objeto PVector seria:
PVector.prototype.mag = funcao() {
    return sqrt(este.x*este.x + este.y*este.y);
};
O exemplo a seguir visualiza a magnitude de um vetor com uma barra na parte superior:
Calcular a magnitude de um vetor é apenas o começo. A função de magnitude abre portas a inúmeras possibilidades; a primeira das quais é a normalização. Normalizar consiste no processo de fazer algo "padrão", ou, melhor, "normal". No caso dos vetores, assumiremos por ora que um vetor padrão possui o comprimento de 1. Para normalizar um vetor, portanto, tomamos um vetor de um comprimento qualquer e, mantendo-o apontado à mesma direção, mudamos seu comprimento a 1, tornando-o o que se define como vetor unitário.
Contanto que descreva a direção de um vetor sem levar o seu comprimento em consideração, é útil ter o vetor unitário prontamente acessível. Veremos como isto pode ser uma mão na roda assim que começarmos a trabalhar com forças na próxima seção.
Para qualquer dado vetor u, seu vetor unitário (representado por u^) é calculado como se segue:
u^=u||u||
Em outras palavras, para normalizar um vetor, simplesmente dividimos cada uma de suas componentes pela sua magnitude. Isto é bastante intuitivo. Digamos que um vetor possui comprimento 5. Bem, 5 sobre 5 é 1. Então, olhando o nosso triângulo retângulo. teríamos que escalar a hipotenusa, dividindo-a por 5 da mesma forma.
Assim, no objeto PVector, precisamos escrever nossa função de normalização assim:
PVector.prototype.normalize = funcao() {
  var m = este.mag();
  este.div(m);
};
Certamente há um pequeno problema. E se a magnitude do vetor é 0? Não podemos dividir por 0! Uma verificação de erros rápida pode consertar isto:
PVector.prototype.normalize = funca0() {
  var m = este.mag();
  if (m > 0) {
    este.div(m);
  }
};
Eis um programa no qual sempre normalizamos o vetor que representa a posição do mouse à partir do centro (e então a multiplica para que possamos vê-la, já que 1 pixel é bem pequeno!):

Este curso "Natural Simulations" é um derivado do "The Nature of Code" por Daniel Shiffman, usado sob a Creative Commons Attribution-NonCommercial 3.0 Unported License.

Quer participar da conversa?

  • Avatar male robot hal style do usuário Willian Lima
    Aqui está meu código, para quem está com dificuldades:
    mouseMoved = function() {
    background(255, 255, 255);

    var mouse = new PVector(mouseX, mouseY);
    var m = mouse.mag();


    var d = dist(0, 0, width, height);
    var cor = map(m, 0, d, 0, 255);

    println('D: '+d+" - M: "+m);

    stroke(255, 0, 0);
    strokeWeight(3);
    background(cor, cor, cor);
    line(0, 0, mouse.x, mouse.y);
    fill(0);
    text(m, mouse.x, mouse.y);
    };
    (1 voto)
    Avatar Default Khan Academy avatar do usuário
Você entende inglês? Clique aqui para ver mais debates na versão em inglês do site da Khan Academy.