Si un vector 3D representa un punto, ¿cómo puede tener una longitud?

27

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?

Mohammed Noureldin
fuente
14
Considere un escalar, también conocido como un número. Puede significar un valor absoluto, una diferencia, un porcentaje, etc.
Peter - Unban Robert Harvey
1
Normalizeden el contexto significa un nuevo vector que conserva el Directionpero tiene Magnitudede 1. Es decir, el Normalizedvector se crea al escalar el vector original.
Theraot
@Theraot, muchas gracias, ¡esa oración me ayudó mucho!
Mohammed Noureldin
19
No lo hace. Representa un desplazamiento. Solo apunta a algún punto si lo considera un vector de posición , en cuyo caso denota el desplazamiento desde (0, 0, 0). La longitud de dicho vector de posición es la distancia del punto al origen.
Polygnome
1
@ Peter, me temo que tengo que estar en desacuerdo contigo. Las definiciones algebraicas estándar de un vector significan que no es un punto. a menudo es útil considerarlo como tal, ya que los vectores de posición pueden usarse para representar puntos, pero no son puntos. "5 metros" siempre es una distancia (o longitud), nunca será un tiempo o color. A menudo es útil usar diferentes símbolos: personalmente nunca usaría (5, 5, 5) para denotar un vector , siempre usaría (5, 5, 5) ^ T (T para transposición) o usaría la representación de columna adecuada donde sea compatible Porque decir que un vector es un punto introduce imprecisiones.
Polygnome

Respuestas:

20

¿Significa eso que la magnitud es simplemente la distancia desde el punto de origen (0, 0, 0)?

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 Matrix4x4clase. Tiene dos funciones diferentes:

La diferencia es, en términos generales, que un vector no se traduce, mientras que un punto sí. Imagine la siguiente matriz 4x4:

1.0   0.0   0.0   1.0
0.0   1.0   0.0   2.0
0.0   0.0   1.0   3.0
0.0   0.0   0.0   1.0

Describe una traducción sobre (1,2,3). Ahora, cuando tienes el siguiente pseudocódigo

Vector3 tp = matrix.MultiplyPoint (new Vector3(2,3,4));
Vector3 tv = matrix.MultiplyVector(new Vector3(2,3,4));

Entonces tpserá (3,4,5), donde tvaú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 Vector3clase para ambos, vectores y puntos, es legítimo, pero puede ser confuso. Otras bibliotecas se dedican a diferenciar Point3Dy Vector3D, a veces, con una base común como Tuple3D.

Marco13
fuente
3
¿Estás seguro de que "un vector es el conjunto de todas las flechas que tienen la misma longitud y dirección" tiene sentido, matemáticamente? Parece que estás hablando de algunas clases de equivalencia, pero los espacios vectoriales no son algo que haya leído definido como clases de equivalencia. - Lo que sea, planteas un muy importante ... ejem, punto , con la distinción entre espacios vectoriales y espacios afines , que son los nombres matemáticos para los tipos de todos los vectores / de todos los puntos, respectivamente.
Leftaroundabout
3
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.
Mohammed Noureldin
@leftaroundabout Hay diferentes definiciones posibles para vectores (más allá de ser "alguna n-tupla ..." más o menos). En álgebra lineal, imagine el conjunto de todas las flechas y la relación (¡equivalencia! -) "Tiene la misma longitud y dirección". Factorizar el conjunto de todas las flechas por esta relación produce las clases de equivalencia. No quería discutir sobre detalles matemáticos (tampoco soy matemático), pero esperaba dejar en claro que un vector no es "una flecha que comienza en (0,0,0)". El punto (...) es: Un vector no tiene una "posición".
Marco13
2
¡Es aún más complicado por el uso de la informática del término vectorpara significar matriz o múltiple! En C ++ puedes tener un std::vector<Vector3>por ejemplo. A vectorde Vectors.
user1118321
Ah, entonces, lo que quiere decir es que, a partir de un espacio afín X , usted define para dos puntos ( p , q ) una flecha sA ( X ) como el camino más corto (es decir, función diferenciable con mínima derivada absoluta integrada) s : [0,1] → X tal que s (0) = p y s (1) = q . Entonces el espacio de vectores es el conjunto de clases de equivalencia A ( X ) / ~ donde s ~ σ si ∂ s / ∂ t = ∂ σ/ ∂ t para todas las t ∈] 0,1 [? Eso tiene sentido, aunque no creo que pueda usar esto como una definición de vectores porque la diferenciación ya depende de ellos.
Leftaroundabout
36

¿Significa eso que la magnitud es simplemente la distancia desde el punto de origen (0, 0, 0)?

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:

Vector3 mPosition;

Generalmente representa solo la posición, es decir, dónde se encuentra en el espacio 3d.

Si tienes esta variable:

Vector3 mDirection;

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:

Vector3 myVec3Normalized = myVec3.normalized;

para evitar repetidas llamadas al normalizedmétodo.

Y si ves variables:

Vector3 mVelocity;

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 a float mSpeed;.

Todos estos se utilizan con respecto a su origen local, que puede ser (0, 0, 0), o puede ser otra posición.

Vaillancourt
fuente
44
Destruye una parte de la información contenida en el vector, y esa información es la magnitud. Sin embargo, la dirección sigue siendo la misma.
66
@Eldy Es más preciso que tenga en cuenta que myVec3.normalizeddevuelve un nuevo Vector3, que tiene la misma dirección pero magnitud 1. no myVec3ha cambiado
Caleth
44
@ NPSF3000 Sería un imbécil y una despedida , no hay consenso sobre los nombres más allá de eso. Todos estamos contentos de que los idiotas no sean comunes.
Theraot
1
@ NPSF3000 ¡Algunos sugieren que la 4ta, 5ta y 6ta derivadas de posición deberían ser chasquidas, crepitantes y explosivas! :-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter
1
Tal vez cambiar these vector are unit vectorsa direction vectors are unit vectorso algo? Porque como es ahora, un lector puede estar confundido pensando que se theserefiere a los dos ejemplos anteriores, mPosition y mDirection . (Así es como lo leí al principio.)
Supr
8

¿Significa eso que la magnitud es simplemente la distancia desde el punto de origen (0, 0, 0)?

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.

Poligoma
fuente
Lectura relacionada: Torsores
Buster
5

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.

Ian Young
fuente
Gracias, pero entonces, ¿qué significa usar Vector3.Normalized? la documentación dice: Returns this vector with a magnitude of 1¿no destruye eso la información guardada en el vector? en realidad eso Magnitudey Normalizedson lo que me confundió.
Mohammed Noureldin
Ya sea que se trate de un punto en el espacio o una flecha que indica la velocidad, todo está en su cabeza. Los mismos datos representan ambos.
Omnifarious
@MohammedNoureldin Un vector normalizado es uno de longitud unitaria (que es 1). Sí, si normaliza un vector, pierde la información de longitud o magnitud. Si necesita ambos (útil en muchas ocasiones), obtiene la longitud del vector y luego lo normaliza.
Ian Young
1

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.

Reloj Loki
fuente
2
+1. Pero mi intuición es que la mayoría de las personas que entienden el idioma que está utilizando ya conocen la respuesta a la pregunta original, por lo que recomiendo ajustar la respuesta para los lectores casuales.
Peter - Unban Robert Harvey
@Peter Me resultó difícil abordar todo. Me gustaría hacerlo más accesible, pero no sé cómo hacerlo sin más detalles. Sin embargo, cuando trabajé por primera vez con OpenGL, me pregunté sobre el significado de las matrices homogéneas, las matrices de perspectiva y cómo se descubrieron las matrices de traducción como una alternativa a la traducción por suma, por lo que es posible que esto no esté demasiado lejos. El formalismo es el lenguaje, y dando la redacción correcta, creo que se discutirán los conceptos. Sin embargo, es muy opaco ser conciso, por lo que se parece más a una lista de lectura de Wiki.
Loki Clock
Agregué algunos enlaces, en particular un video de mapas afines que se realizan en una dimensión superior como mapas lineales. Espero que eso ayude.
Reloj Loki
bonito. merece más votos a favor.
Peter - Unban Robert Harvey
-1

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í .

Stephan
fuente
Lo siento, pero esto está completamente mal. Si tengo dos puntos A y B, entonces v = BA es el vector que va de A a B. v no pasa por el origen en absoluto en este caso. Un vector no es un punto. se puede usar para representar un punto (como vector de posición), pero es algo diferente. Por favor, entienda los conceptos básicos algebraicos.
Polygnome
He actualizado la respuesta para eliminar la confusión, pero estoy proporcionando referencia a la documentación de lo que es un Vector3 en Unity, y mi respuesta estaba en línea con todas las respuestas mejor clasificadas, incluida la suya.
Stephan
Si lee cuidadosamente la documentación de la unidad, notará que nunca menciona el origen, porque de todos modos el origen no tiene nada que ver con la longitud del vector. El vector entre (1,1,1) y (2,3,4) es <1,2,3> y tiene una longitud de sqrt (1 ^ 2 + 2 ^ 2 + 3 ^ 3) = ~ 3.9, que es la distancia entre esos dos puntos. Ni siquiera toca el origen en absoluto . Estoy confundido sobre cómo podría pensar que mi respuesta está de acuerdo con usted, porque no lo es, en absoluto .
Polygnome