Estoy tratando de entender la aritmética vectorial (y específicamente su uso en el motor de Unity). No puedo entender cómo un vector puede tener una longitud (magnitud) aunque solo represente un punto (posición y dirección).
¿Significa eso que la magnitud es simplemente su distancia desde el punto de origen (0, 0, 0)? ¿O me estoy perdiendo algo?
Normalized
en el contexto significa un nuevo vector que conserva elDirection
pero tieneMagnitude
de 1. Es decir, elNormalized
vector se crea al escalar el vector original.Respuestas:
La respuesta de tl; dr puede ser: Sí, puedes imaginarlo así.
Pero no estoy seguro de si esto podría no conducir a una comprensión errónea.
¡Un vector no es un punto, y hay una diferencia crucial entre los dos!
El hecho de que un vector se represente generalmente como una "flecha" podría dar una impresión errónea. Un vector es, de hecho, no una sola flecha. Sería más preciso decir que un vector es el conjunto de todas las flechas que tienen la misma longitud y dirección . (La flecha que generalmente se pinta es solo un representante de todas estas flechas). Pero no quiero ir demasiado lejos en los aburridos detalles de las matemáticas aquí.
Más importante aún, hay una diferencia crucial entre un punto y un vector, que se hace evidente en la programación de gráficos cuando transforma el punto o el vector. No estoy familiarizado con Unity, pero de un vistazo rápido a la documentación, están modelando la diferencia más importante entre un punto y un vector en la
Matrix4x4
clase. Tiene dos funciones diferentes:Matrix4x4.MultiplyVector
yMatrix4x4.MultiplyPoint
La diferencia es, en términos generales, que un vector no se traduce, mientras que un punto sí. Imagine la siguiente matriz 4x4:
Describe una traducción sobre (1,2,3). Ahora, cuando tienes el siguiente pseudocódigo
Entonces
tp
será (3,4,5), dondetv
aún será (2,3,4). La traducción de un vector no lo cambia (porque, como se mencionó anteriormente, es el conjunto de todas las flechas con la misma magnitud y dirección).El hecho de que Unity use la
Vector3
clase para ambos, vectores y puntos, es legítimo, pero puede ser confuso. Otras bibliotecas se dedican a diferenciarPoint3D
yVector3D
, a veces, con una base común comoTuple3D
.fuente
A vector is, in fact, not a single arrow
, tienes razón, representar a Vector3 como una sola flecha es exactamente lo que me confundió. +1 por mencionar esta oración crítica.vector
para significar matriz o múltiple! En C ++ puedes tener unstd::vector<Vector3>
por ejemplo. Avector
deVector
s.Eso es exactamente eso.
Entre otras cosas, un vector puede representar un punto (una posición), una dirección y / o una velocidad, según el contexto.
Si tienes esta variable:
Generalmente representa solo la posición, es decir, dónde se encuentra en el espacio 3d.
Si tienes esta variable:
Generalmente representa la dirección. Típicamente, estos vectores son vectores unitarios, es decir, vectores de longitud 1 (pero no siempre es necesario). Un vector unitario y un vector normalizado son lo mismo, ambos son de longitud 1. Estos vectores se usan a menudo con otros vectores para cambiar sus posiciones.
Al normalizar un vector, pierde su longitud (su magnitud), pero la dirección permanece igual. Hay situaciones en las que solo necesita la dirección (por ejemplo, cuando desea mover un objeto en esa dirección), y tener la magnitud (sin longitud de unidad) en el vector introduciría resultados de cálculo inesperados.
Si necesita un vector normal para un solo cálculo, puede usarlo
myVec3.normalized
, no afectarámyVec3
, y si tiene la intención de usar ese vector normalizado con frecuencia, probablemente debería crear una variable:para evitar repetidas llamadas al
normalized
método.Y si ves variables:
Generalmente representa una fuerza / velocidad: estos vectores representan una dirección y su magnitud (su longitud) es importante. También podrían representarse con
Vector3 mDirection;
y afloat mSpeed;
.Todos estos se utilizan con respecto a su origen local, que puede ser (0, 0, 0), o puede ser otra posición.
fuente
myVec3.normalized
devuelve un nuevo Vector3, que tiene la misma dirección pero magnitud 1. nomyVec3
ha cambiadothese vector are unit vectors
adirection vectors are unit vectors
o algo? Porque como es ahora, un lector puede estar confundido pensando que sethese
refiere a los dos ejemplos anteriores,mPosition
ymDirection
. (Así es como lo leí al principio.)Usted puede verlo de esa manera, pero sólo verlo de esa manera puede conducir a una comprensión equivocada.
En primer lugar, un vector no es un punto, y un punto no es un vector.
La diferencia entre un vector y un punto es la misma que entre una duración y una hora del día . El primero es un intervalo de tiempo, el último es un único punto en el tiempo. Obviamente es que 6 horas no es lo mismo que las 6 en punto. No dirías "La carrera dura la 1 en punto" y tampoco dirías "Vamos a vernos a las 13 horas". La carrera dura una hora, un intervalo, y te encuentras a las 13 en punto, un punto específico en el tiempo.
Lo mismo se aplica a los vectores y al punto. Un vector es un intervalo, un desplazamiento si se quiere. Apunta en cierta dirección, y sí, tiene una longitud.
Por lo tanto, los puntos y los vectores están relacionados, al igual que las duraciones y las horas del día. La carrera comienza a las 13 en punto y termina a las 15 en punto. Ambos son puntos en el tiempo. Pero las 15 en punto - 13 en punto = 2 horas, una duración. La carrera dura dos horas, no las 2 en punto.
Lo mismo se aplica a los puntos. La diferencia entre el punto A y B se denota como ⃗v = B - A, donde ⃗v denota un vector y A y B denota puntos.
Ahora, hay algo que se llama un vector de posición . Usted puede considerar un vector de un punto, hasta cierto punto, cuando se dice que los puntos de vectores desde el origen a un cierto otro punto. En otras palabras: si todos tus amigos saben que llamas a las horas del día como duraciones desde la medianoche (0 en punto), puedes decir "Nos reunimos a las 6 horas". Sabrían que 0 en punto + 6 horas = 6 en punto y, por lo tanto, cuándo conocerte. De hecho, esto es lo que hacen los tiempos navales. "Nos reunimos a las seiscientas horas" significa las 6 en punto.
Entonces, el vector <1,2,3> apunta al punto (1,2,3), si considera el origen como el punto de anclaje, y sí, la longitud de este vector es la distancia de ese punto desde el origen.
Pero el vector <1,2,3> también apunta de (1,1,1) a (2,3,4), y en ese caso su longitud denota la distancia entre esos dos puntos.
Entonces, como puede ver, un vector tiene una longitud porque no es un punto, sino un intervalo, un desplazamiento.
fuente
Un vector puede representar una línea entre dos puntos en el espacio 3d (dirección y distancia) o una ubicación en el espacio 3d (la longitud es la distancia desde el origen).
Si tiene el punto A y el punto B, entonces BA = AB = la dirección y la distancia que tendría que viajar para llegar de A a B.
fuente
Returns this vector with a magnitude of 1
¿no destruye eso la información guardada en el vector? en realidad esoMagnitude
yNormalized
son lo que me confundió.Lo que Unity dice sobre los puntos frente a los vectores no tiene sentido a largo plazo, ya que las API de geometría simplemente eligen definiciones distintas para hacer que la herramienta sea más accesible, no corresponden a cómo se conceptualizan estas cosas en geometría. Echa un vistazo a las implementaciones de las clases, si puedes. Debido a que es arbitrario, conocer su definición es la única forma de entender cuál es el concepto. Revelación completa, no tengo experiencia en Unity.
Un vector es un punto en un espacio vectorial , en el sentido de que el concepto de un punto en la geometría está codificado por elementos del conjunto subyacente. Un espacio vectorial tiene un vector distinguido, llamado origen o 0 . El álgebra lineal es un intento de codificar un fragmento de geometría euclidiana con un origen algebraico.
La flecha y su longitud
Los movimientos a través de un espacio de puntos se interpretan con frecuencia como todas las flechas desde los puntos de origen / antes a sus puntos de destino / después.
Se puede aplicar una función de dos argumentos a un argumento para producir una función de un argumento: podemos hablar de x +, la función que lleva cada vector y al vector x + y . Esta es la traducción asociada con la adición de x . Las flechas asociadas van desde los puntos y hasta los puntos x + y . Ver: aplicación parcial , curry .
Entonces, ¿por qué solo usamos una flecha ? La flecha desde el origen apunta a un vector específico, la x en x +: el origen es la identidad de la suma del vector. Entonces, podemos recuperar la traducción x + solo de su valor x +0 = x .
Como representación gráfica del espacio, la representación de la flecha tiene que ver con nuestra capacidad de extrapolar visual o físicamente el efecto de una traducción del valor que lo determina. ¿Cuándo tenemos esa habilidad?
Darle al espacio vectorial una norma que lo convierta en un espacio vectorial normalizado es proporcionar una noción de la longitud de un vector que tiene sentido como su distancia desde 0. Además, esta es una distancia que satisface la desigualdad del triángulo, que es un fuerte restricción sobre cómo las longitudes de dos vectores se relacionan con las de su suma. Desde la longitud podemos definir la distancia para hacer de este un espacio métrico , y una geodésica es un camino intrínsecamente recto, ya que es lo más corto posible. La norma euclidiana induce la distancia euclidiana y las geodésicas son los segmentos de línea de las flechas, pero si dibujas las flechas como geodésicas usando diferentes normas, podría extrapolar el efecto geométrico de la traducción desde las geodésicas para aprender sobre la geometría.
El significado de punto y vector
En algunos casos al hacer geometría de juegos, su espacio de puntos no es un espacio vectorial . Un espacio afín de dimensión n puede incrustarse en un espacio proyectivo de dimensión n . Los mapas afines se reducen a proyectividades. Las proyectividades también te permiten hacer FOV, w / c, creo que no es afín. Las proyectividades tienen beneficios:
El espacio n proyectivo sobre un campo puede construirse a partir del espacio lineal ( n +1) (espacio vectorial), tratando los puntos del espacio proyectivo como las líneas a través del origen del espacio lineal. Los planos a través del origen a su vez dan líneas proyectivas. Multiplicar vectores por una matriz fija es un mapa lineal , para eso sirve la multiplicación de matrices. Los mapas lineales preservan el origen y son compatibles con incidencia. En particular, si f es un automorfismo lineal ( correspondiente a una matriz invertible ( n +1) x ( n +1)), y dos líneas L, M a través del origen abarcan un plano A , entoncesf L, f M son líneas que atraviesan el origen que abarca f A , por lo que f también preservará la incidencia en el espacio proyectivo: una matriz invertible tiene una proyectividad asociada. La multiplicación de matrices codifica la composición de mapas lineales y, por lo tanto, de las proyectividades.
Al eliminar el origen del espacio lineal, todos los puntos en una línea dada a través del origen son múltiplos escalares entre sí. Explotando este hecho, la homogeneización selecciona un punto lineal para reemplazar cada punto proyectivo y una matriz invertible para reemplazar cada transformación proyectiva (como en este 2D -> mapas afines 2D como 3D -> video de mapas lineales 3D ), en tal forma en que los representantes están cerrados bajo los productos matriz-matriz y matriz-vector y dan y son dados por cosas proyectivas únicas. Esta descripción de la construcción del plano proyectivo desde el plano lineal une algunas cosas.
Entonces, en la tubería de matriz de modelo-vista-proyección, estamos usando vectores para representar los puntos de nuestro espacio proyectivo, pero el espacio proyectivo no es un espacio vectorial, y no todos los vectores en el espacio vectorial que estamos usando representan puntos de nuestra geometría (ver imagen del plano afín a la derecha ). Utilizamos matrices de traducción en lugar de la suma vectorial si queremos traducciones. A veces, las personas llaman vectores de puntos proyectivos o afines, especialmente cuando usan una configuración en esta línea.
fuente
La longitud (o magnitud) del vector es
square root of (x*x+y*y+z*z)
. Los vectores siempre se consideran como un rayo que pasa desde el origen a<0,0,0>
través del punto descrito en el vector<x,y,z>
La documentación de la unidad sobre esto se encuentra aquí .
fuente