Una clase para describir vectores de dos o tres dimensiones.
Existen varias maneras de pensar sobre los vectores. Una es como flechas en el espacio, caracterizadas por su magnitud (longitud) y dirección.
Los objetos p5.Vector
se usan habitualmente para programar movimiento por que simplifican algunos cálculos matemáticos. Por ejemplo, una pelota en movimiento tiene una posición y una velocidad. La posición describe la ubicación de la pelota en el espacio. El vector de posición de la pelota se extiende desde el origen al centro de la pelota. La velocidad describe la rapidez y dirección de su movimiento. Si la pelota se mueve en línea recta hacia arriba, su vector de velocidad apunta hacia arriba y su magnitud es proporcional a la rapidez del movimiento. Sumar el vector de velocidad al vector de posición lo mueve, como en pos.add(vel)
. En esta clase se encuentran los métodos que definen las operaciones matemáticas con vectores.
Nota: createVector() es la manera recomendada para crear una instancia de esta clase.
Ejemplos
Sintaxis
p5.Vector([x], [y], [z])
Parámetros
componente x del vector.
componente y del vector.
componente z del vector.
Métodos
Devuelve la representación de un vector como cadena de caracteres.
LLamar toString()
es útil para imprimir vectores a la consola durante la depuración del código.
Establece las componentes x
, y
y z
del vector.
set()
puede tomar como argumentos números separados, como en v.set(1, 2, 3)
; un objeto p5.Vector, como en v.set(v2)
; o un arreglo de números, como en v.set([1, 2, 3])
.
Si no se encuentra el valor de alguna componente, será establecido en 0. Por ejemplo, v.set(4, 5)
establece v.x
en 4, v.y
en 5 y v.z
en 0. Llamar set()
sin argumentos, como en v.set()
, establece todas las componentes del vector en 0.
Suma los valores de entrada a las componentes x
, y
y z
del vector.
add()
puede tomar como argumento números separados, como en v.add(1, 2, 3)
; otro objeto p5.Vector, como en v.add(v2)
; o un arreglo de números, como en v.add([1, 2, 3])
.
Si no se encuentra un valor para determinada componente, esta no cambiará. Por ejemplo, v.add(4, 5)
suma 4 a v.x
, 5 a v.y
y 0 a v.z
. Llamar add()
sin argumentos, como en v.add()
, no tiene efecto.
La versión estática de add()
, como en p5.Vector.add(v2, v1)
, devuelve un nuevo objeto p5.Vector sin cambiar los originales.
Hace la división modular (residuo) de las componentes x
, y
y z
del vector por los valores de entrada.
rem()
puede tomar como argumento números separados, como en v.rem(1, 2, 3)
; otro objeto p5.Vector, como en v.rem(v2)
; o un arreglo de números, como en v.rem([1, 2, 3])
.
Si sólo se tiene un valor, como en v.rem(2)
, entonces todas las componentes serán establecidas a sus valores módulo 2. Si se tienen dos valores, como en v.rem(2, 3)
, entonces v.z
no cambiará. Llamar rem()
sin argumentos como en v.rem()
, no tiene efecto.
La versión estática de rem()
, como en p5.Vector.rem(v2, v1)
, devuelve un nuevo objeto p5.Vector sin cambiar los originales.
Resta los valores de entrada a las componentes x
, y
y z
del vector.
sub()
puede tomar como argumento números separados, como en v.sub(1, 2, 3)
; otro objeto p5.Vector, como en v.sub(v2)
; o un arreglo de números, como en v.sub([1, 2, 3])
.
Si se omite el valor correspondiente a una componente, esta no cambiará. Por ejemplo, v.sub(4, 5)
resta 4 a v.x
, 5 a v.y
y 0 a v.z
. Llamar sub()
sin argumentos, como en v.sub()
, no tiene efecto.
La versión estática de sub()
, como en p5.Vector.sub(v2, v1)
, devuelve un nuevo objeto p5.Vector sin cambiar los originales.
Multiplica las componentes x
, y
y z
del vector por los valores de entrada.
mult()
puede tomar como argumento números separados, como en v.mult(1, 2, 3)
; otro objeto p5.Vector, como en v.mult(v2)
; o un arreglo de números, como en v.mult([1, 2, 3])
.
Si sólo hay un valor como argumento, por ejemplo v.mult(2)
, entonces todas las componentes son multiplicadas por este mismo. Si no se encuentra el valor para una componente, entonces esta no cambiará. Por ejemplo, v.mult(4, 5)
multiplica v.x
por 4, v.y
por 5 y v.z
por 1. Llamar mult()
sin argumentos, como en v.mult()
, no tiene efecto.
La versión estática de mult()
, como en p5.Vector.mult(v, 2)
, devuelve un nuevo objeto p5.Vector sin cambiar los originales.
Divide las componentes x
, y
y z
del vector por los valores de entrada.
div()
puede tomar como argumento números separados, como en v.div(1, 2, 3)
; otro objeto p5.Vector, como en v.div(v2)
; o un arreglo de números, como en v.div([1, 2, 3])
.
Si sólo hay un valor como argumento, por ejemplo v.div(2)
, entonces todas las componentes son divididas por este mismo. Si no se encuentra el valor para una componente, entonces esta no cambiará. Por ejemplo, v.div(4, 5)
divide v.x
por 4, v.y
por 5 y v.z
por 1. Llamar div()
sin argumentos, como en v.div()
, no tiene efecto.
La versión estática de div()
, como en p5.Vector.div(v, 2)
, devuelve un nuevo objeto p5.Vector sin cambiar los originales.
Calcula la magnitud (longitud) del vector.
mag() permite calcular la magnitud de un vector bidimensional usando sus componentes, como en mag(x, y)
.
Calcula la magnitud (longitud) al cuadrado del vector.
Calcula el producto punto de dos vectores.
El producto punto es un número que describe el traslape entre dos vectores. Visualmente, el producto punto se puede pensar como la "sombra" que un vector proyecta sobre el otro. La magnitud del producto punto se maximiza cuando ambos vectores apuntan en direcciones iguales u opuestas. Su magnitud es cero cuando los vectores forman un ángulo recto.
La versión de dot()
con un solo parámetro lo interpreta como otro objeto p5.Vector.
La versión de dot()
con múltiples parámetros los interpreta como las componentes x
, y
y z
de otro vector.
La versión estática de dot()
, como en p5.Vector.dot(v1, v2)
, equivale a llamar v1.dot(v2)
.
Calcula el producto cruz de dos vectores.
El producto cruz es un vector que apunta directamente hacia fuera del plano generado por los dos vectores de argumento. La magnitud del producto cruz es igual al area del paralelogramo descrito por estos mismos vectores.
La versión estática de cross()
, como en p5.Vector.cross(v1, v2)
, equivale a llamar v1.cross(v2)
.
Calcula la distancia entre dos puntos representados como vectores.
Las coordenadas de un punto en el espacio pueden ser representadas por las componentes de un vector que se extiende del origen hasta el punto.
La versión estática de dist()
, como en p5.Vector.dist(v1, v2)
, equivale a llamar v1.dist(v2)
.
dist() permite calcular la distancia entre dos puntos utilizando sus coordenadas, como en dist(x1, y1, x2, y2)
.
Establece un valor máximo para la magnitud del vector.
La versión estática de limit()
, como en p5.Vector.limit(v, 5)
, devuelve un nuevo objeto p5.Vector sin cambiar el original.
Establece la magnitud del vector en el valor dado.
La versión estática de setMag()
, como en p5.Vector.setMag(v, 10)
, devuelve un nuevo objeto p5.Vector sin cambiar el original.
Calcula el ángulo (polar) que forma un vector bidimensional con el eje x positivo.
Por convención, el eje x positivo tiene un ángulo de 0 y los ángulos incrementan en el sentido de las manecillas del reloj.
Si el vector fue creado utilizando createVector(), heading()
devuelve el ángulo en las unidades del angleMode() actual.
La versión estática de heading()
, como en p5.Vector.heading(v)
, funciona de la misma manera.
Rota un vector bidimensional por el ángulo específicado sin cambiar su magnitud.
Por convención, el eje x positivo tiene un ángulo de 0 y los ángulos incrementan en el sentido de las manecillas del reloj.
Si el vector fue creado utilizando createVector(), setHeading()
devuelve el ángulo en las unidades del angleMode() actual.
Rota un vector bidimensional por el ángulo específicado sin cambiar su magnitud.
Por convención, el eje x positivo tiene un ángulo de 0 y los ángulos incrementan en el sentido de las manecillas del reloj.
Si el vector fue creado utilizando createVector(), rotate()
devuelve el ángulo en las unidades del angleMode() actual.
La versión estática de rotate()
, como en p5.Vector.rotate(v, PI)
, devuelve un nuevo objeto p5.Vector sin cambiar el original.
Calcula el álgulo entre dos vectores.
El ángulo devuelto tiene orientación (es decir, signo); esto significa que v1.angleBetween(v2) === -v2.angleBetween(v1)
.
Si el vector fue creado con createVector(), angleBetween()
devuelve el ángulo en las unidades del angleMode() actual.
Calcula las componentes x
, y
y z
de un vector proporcional a la diferencia entre dos vectores.
El parámetro amt
es la cantidad de interpolación entre el primer y segundo vector. 0.0 mantiene todas las componentes iguales al primer vector, 0.5 las establece a la mitad entre ambos y 1.0 establece todas las componentes iguales a las del segundo vector.
La versión estática de lerp()
, como en p5.Vector.lerp(v0, v1, 0.5)
, devuelve un nuevo objeto p5.Vector sin cambiar el original.
Calcula el ángulo polar y magnitud de un vector que está entre otros dos vectores.
El parámetro amt
es la cantidad de interpolación entre el vector inicial y el vector final. 0.0 mantiene el ángulo polar y la magnitud iguales a las del vector inicial, 0.5 las establece en la mitad y 1.0 establece el ángulo polar y la magnitud iguales a las del vector final.
slerp()
difiere de lerp() en que la primera interpola magnitud. Llamar v0.slerp(v1, 0.5)
establece la magnitud de v0
a un valor a mitad del camino entre su magnitud original y la magnitud de v1
. Llamar v0.lerp(v1, 0.5)
no tiene esta garantía.
La versión estática de slerp()
, como en p5.Vector.slerp(v0, v1, 0.5)
, devuelve un nuevo objeto p5.Vector sin cambiar el original.
Refleja el vector sobre una linea en dos dimensiones o un plano en tres dimensiones.
La orientación de la linea o el plano esta descrito por un vector normal que apunta alejandose del mismo.
La versión estática de reflect()
, como en p5.Vector.reflect(v, n)
, devuelve un nuevo objeto p5.Vector sin cambiar el original.
Devuelve las componentes del vector en un arreglo de números.
Revisa que todas las componentes del vector sean iguales a las de otro vector.
equals()
devuelve true
si todas las componentes del vector son iguales a las de otro vector y false
en caso contrario.
La versión de equals()
con un parámetro lo interpreta como otro objeto p5.Vector.
La versión de equals()
con multiples parámetros los interpreta como las componentes de otro vector. Los parámetros faltantes son asignados un valor de 0.
La versión estática de equals()
, como en p5.Vector.equals(v0, v1)
, interpreta ambos parámetros como objetos p5.Vector.
Crea un nuevo vector bidimensional a partir de un ángulo.
Crea un nuevo vector tridimensional a partir de una pareja de ángulos esféricos ISO.
Crea un nuevo vector bidimensional unitario con un ángulo polar aleatorio.
Crea un nuevo vector tridimensional con un ángulo polar aleatorio.