Contenido principal
Programación de computadoras
Curso: Programación de computadoras > Unidad 5
Lección 4: Vectores- Introducción a vectores
- Desafío: caminante vectorial
- Más matemáticas vectoriales
- Desafío: sable de luz
- Magnitud de un vector y normalización
- Desafío: visualizador de magnitud
- Movimiento de vectores
- Desafío: automóvil que frena
- Funciones estáticas contra métodos de instancia
- Desafío: funciones estáticas
- Movimiento interactivo de vectores
- Desafío: perseguidor del ratón
- Proyecto: criaturas computacionales
© 2023 Khan AcademyTérminos de usoPolítica de privacidadAviso de cookies
Magnitud de un vector y normalización
Como acabamos de ver, la multiplicación y división son medios por los cuales se puede cambiar la longitud del vector sin afectar la dirección. Tal vez te estés preguntando: “Bien, ¿entonces cómo sé cuál es la longitud de un vector? Conozco las componentes (
x
y y
), pero realmente, ¿qué tan larga (en pixeles) es la flecha?” Entender cómo calcular la longitud (también conocida como magnitud) de un vector es increíblemente útil e importante.Observa en el diagrama anterior cómo el vector, dibujado como una flecha y sus dos componentes (
x
y y
), forma un triángulo rectángulo. Los catetos son las componentes y la hipotenusa es la propia flecha. Somos muy afortunados de tener este triángulo rectángulo, porque hubo una vez un matemático griego llamado Pitágoras que desarrolló una fórmula encantadora para describir la relación entre los catetos y la hipotenusa de un triángulo rectángulo.El teorema de Pitágoras es: a cuadrada más b cuadrada es igual a c cuadrada.
Equipados con esta fórmula, ahora podemos calcular la magnitud de v, with, vector, on top de la siguiente manera:
Entonces el código para implementarla en el objeto
PVector
sería:PVector.prototype.mag = function() {
return sqrt(this.x*this.x + this.y*this.y);
};
El siguiente ejemplo visualiza la magnitud de un vector con una barra en la parte superior:
Calcular la magnitud de un vector es solo el comienzo. La función de magnitud abre la puerta a muchas posibilidades, la primera de las cuales es la normalización. Normalizar se refiere al proceso de hacer algo “estándar” o, bueno, “normal”. En el caso de vectores, supongamos por ahora que un vector estándar tiene longitud 1. Por lo tanto, normalizar un vector es tomar un vector de cualquier longitud y, mientras sigue apuntando en la misma dirección, cambiar su longitud a 1, convirtiéndolo en lo que se conoce como un vector unitario.
Es útil tener a la mano el vector unitario, ya que describe la dirección de un vector independientemente de su longitud. Veremos que esto se vuelve práctico una vez que empecemos a trabajar con fuerzas en la siguiente sección.
Dado cualquier vector u, with, vector, on top, su vector unitario (que se escribe como u, with, hat, on top) se calcula de la siguiente manera:
En otras palabras, para normalizar un vector, simplemente divide cada componente entre su magnitud. Esto es muy intuitivo. Digamos que un vector tiene longitud 5. Bueno, 5 dividido entre 5 es 1. Así que, al observar nuestro triángulo rectángulo, necesitamos reducir el tamaño de la hipotenusa al dividir entre 5. En ese proceso los catetos se encogen, también divididos entre 5.
Por lo tanto, en el objeto PVector escribimos nuestra función de normalización de la siguiente manera:
PVector.prototype.normalize = function() {
var m = this.mag();
this.div(m);
};
Por supuesto, hay un pequeño problema. ¿Qué pasa si la magnitud del vector es 0? ¡No podemos dividir entre 0! Una revisión rápida de errores corregirá eso:
PVector.prototype.normalize = function() {
var m = this.mag();
if (m > 0) {
this.div(m);
}
};
Aquí hay un programa que siempre normaliza el vector que representa la posición del ratón desde el centro (y luego lo multiplica para que lo podamos ver, ¡ya que 1 pixel es muy pequeño!):
Este curso de "Simulaciones Naturales" es un derivado de "La Naturaleza del Código" por Daniel Shiffman, usado bajo una Licencia Creative Commons Reconocimiento-NoComercial 3.0 Unported.
¿Quieres unirte a la conversación?
- que pongo en el dist del paso(2 votos)
- Esto es muy difícil! Por favor, expliquen de forma mas fàcil. no creo que nadia haya sobrevivido hasta aquí para contarlo!(1 voto)
- var drawSaber = function() {
background(0, 0, 0);
// glow
strokeWeight(8);
stroke(107, 206, 219, 150);
line(0, 400, v.x, 400-v.y);
// blade
stroke(255, 255, 255);
strokeWeight(5);
line(0, 400, v.x, 400-v.y);
};
keyPressed = function() {
if (keyCode === 38) {
v.mult(2);
} else if (keyCode === 40) {
v.div(2);
}
drawSaber();
};
drawSaber();(0 votos)