Se un vettore 3D rappresenta un punto, come può avere una lunghezza?


27

Sto cercando di capire l'aritmetica vettoriale (e in particolare il suo utilizzo nel motore Unity). Non riesco a capire come un vettore possa avere una lunghezza (magnitudine) anche se rappresenta solo un punto (posizione e direzione)?

Ciò significa che la grandezza è semplicemente la sua distanza dal punto di origine (0, 0, 0)? Oppure mi sfugge qualcosa?


14
Considera uno scalare, noto anche come numero. Può significare un valore assoluto, una differenza, una percentuale, ecc.
Peter - Unban Robert Harvey,

1
Normalizednel contesto significa un nuovo vettore che conserva il Directionma ha Magnitudedi 1. Cioè, il Normalizedvettore viene creato ridimensionando il vettore originale.
Theraot,

@Theraot, Grazie mille, quella frase mi ha aiutato molto!
Mohammed Noureldin,

19
Non Rappresenta uno spostamento. Solo punta a un certo punto, se si considera un vettore di posizione , nel qual caso denota lo spostamento da (0, 0, 0). La lunghezza di tale vettore di posizione è la distanza del punto dall'origine.
Polygnome,

1
@Peter Ho paura di non essere d'accordo con te. Le definizioni algebriche standard di un vettore significano praticamente che non è un punto. è spesso utile considerarlo come tale poiché i vettori di posizione possono essere usati per rappresentare punti, ma non sono punti. "5 metri" è sempre una distanza (o lunghezza), non sarà mai un tempo o un colore. Spesso è utile usare simboli diversi - Personalmente non userei mai (5, 5, 5) per indicare un vettore , userei sempre (5, 5, 5) ^ T (T per trasposto) o utilizzare una rappresentazione corretta della colonna dove supportato. Perché dire un vettore è un punto introduce inesattezze.
Polygnome,

Risposte:


20

Ciò significa che la grandezza è semplicemente la distanza dal punto di origine (0, 0, 0)?

La risposta tl; dr potrebbe essere: Sì, puoi immaginarla così.

Ma non sono sicuro che questo potrebbe non portare a una comprensione sbagliata.


Un vettore non è un punto e c'è una differenza cruciale tra i due!

Il fatto che un vettore sia generalmente rappresentato come una "freccia" potrebbe dare un'impressione sbagliata. Un vettore, infatti, non è una singola freccia. Sarebbe più preciso dire che un vettore è l'insieme di tutte le frecce che hanno la stessa lunghezza e direzione . (La freccia che di solito è dipinta è solo un rappresentante di tutte queste frecce). Ma non voglio approfondire troppo i noiosi dettagli della matematica qui.

Ancora più importante, c'è una differenza cruciale tra un punto e un vettore, che diventa evidente nella programmazione grafica quando si trasforma il punto o il vettore. Non ho familiarità con Unity, ma da una rapida occhiata alla documentazione, stanno modellando la differenza più importante tra un punto e un vettore nella Matrix4x4classe. Ha due diverse funzioni:

La differenza è, approssimativamente parlando, che un vettore non viene tradotto, mentre un punto lo è. Immagina la seguente matrice 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

Descrive una traduzione su (1,2,3). Ora, quando hai il seguente pseudocodice

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

Quindi tpsarà (3,4,5), dove tvsarà ancora (2,3,4). La traduzione di un vettore non lo cambia (perché, come detto sopra, è l'insieme di tutte le frecce con la stessa grandezza e direzione).


Il fatto che Unity usi la Vector3classe per entrambi, vettori e punti, è legittimo, ma può essere fonte di confusione. Altre biblioteche differenziano appositamente Point3De Vector3D, a volte con una base comune come Tuple3D.


3
Sei sicuro che "un vettore è l'insieme di tutte le frecce che hanno la stessa lunghezza e direzione" ha senso, matematicamente? Sembra che tu stia parlando di alcune classi di equivalenza, ma gli spazi vettoriali non sono qualcosa che io abbia mai letto definito come classi di equivalenza. - Qualunque cosa, è sollevare un molto importante ... ahem, punto , con la distinzione tra spazi vettoriali e spazi affini , che sono i nomi matematici per i tipi di tutti i vettori rispettivamente / di tutti i punti,.
lasciato circa

3
A vector is, in fact, not a single arrow, hai ragione, rappresentare Vector3 come una singola freccia è esattamente ciò che mi ha confuso. +1 per menzionare questa frase critica.
Mohammed Noureldin,

@leftaroundabout Esistono diverse possibili definizioni per i vettori (oltre ad essere "qualche n-tupla ..." o giù di lì). Nell'algebra lineare, immagina l'insieme di tutte le frecce e la relazione (equivalenza! -) "Ha la stessa lunghezza e direzione". La fattorizzazione dell'insieme di tutte le frecce mediante questa relazione produce le classi di equivalenza. Non volevo fare il pignolo sui detials matematici (anche io non sono un matematico), ma speravo di chiarire che un vettore non è "una freccia che inizia da (0,0,0)". Il punto (...) è: un vettore non ha una "posizione".
Marco13

2
È ancora più complicato dall'uso dell'informatica del termine vectorche significa array o multiplo! In C ++ puoi avere un std::vector<Vector3>esempio. A vectordi Vectors.
user1118321

Ah, quindi quello che vuoi dire è, partendo da uno spazio affine X , definisci per ogni due punti ( p , q ) una freccia sA ( X ) come il percorso più breve (cioè la funzione differenziabile con derivata assoluta minima integrata) s : [0,1] → X tale che s (0) = p e s (1) = q . Quindi lo spazio dei vettori è l'insieme delle classi di equivalenza A ( X ) / ~ dove s ~ σ se ∂ s / ∂ t = ∂ σ/ ∂ t per tutto t ∈] 0,1 [? Questo ha senso, anche se non penso che tu possa usarlo come definizione di vettori perché la differenziazione dipende già da essi.
lasciato circa

36

Ciò significa che la grandezza è semplicemente la distanza dal punto di origine (0, 0, 0)?

Questo è esattamente questo.

Tra le altre cose, un vettore può rappresentare un punto (una posizione), una direzione e / o una velocità, a seconda del contesto.

Se hai questa variabile:

Vector3 mPosition;

In genere rappresenta solo la posizione, ovvero dove si trova nello spazio 3d.

Se hai questa variabile:

Vector3 mDirection;

Rappresenta generalmente la direzione. Tipicamente, questi vettori sono vettori unitari, cioè vettori di lunghezza 1 (ma non è sempre necessario). Un vettore unitario e un vettore Normalizzato sono la stessa cosa, sono entrambi di lunghezza 1. Questi vettori sono spesso usati con altri vettori per cambiare posizione.

Quando si normalizza un vettore, si perde la sua lunghezza (la sua grandezza), ma la direzione rimane la stessa. Ci sono situazioni in cui è necessaria solo la direzione (ad esempio quando si desidera spostare un oggetto in quella direzione) e avere la magnitudo (non unitaria) nel vettore introduce risultati di calcolo imprevisti.

Se hai bisogno di un vettore normale per un singolo calcolo, puoi usarlo myVec3.normalized, non influirà myVec3e se intendi utilizzare spesso quel vettore normalizzato, dovresti probabilmente creare una variabile:

Vector3 myVec3Normalized = myVec3.normalized;

per evitare ripetute chiamate al normalizedmetodo.

E se vedi le variabili:

Vector3 mVelocity;

Rappresenta generalmente una forza / velocità: questi vettori rappresentano una direzione e la loro grandezza (la loro lunghezza) è importante. Potrebbero anche essere rappresentati con Vector3 mDirection;e a float mSpeed;.

Tutti questi sono usati per quanto riguarda la loro origine locale, che può essere (0, 0, 0) o può essere un'altra posizione.


4
Distrugge una parte delle informazioni contenute nel vettore e tale informazione è la grandezza. La direzione rimane comunque la stessa.

6
@Eldy È più preciso notare che myVec3.normalizedrestituisce un nuovo Vector3, che ha la stessa direzione ma la magnitudo 1. myVec3è invariata
Caleth,

4
@ NPSF3000 Quelli sarebbero un cretino e un giogo , non c'è consenso sui nomi oltre a quello. Siamo tutti contenti che i cretini non siano comuni.
Theraot,

1
@ NPSF3000 Alcuni suggeriscono che la quarta, la quinta e la sesta derivata della posizione dovrebbero essere snap, crackle e pop! :-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter

1
Forse cambiare these vector are unit vectorsper direction vectors are unit vectorso qualcosa del genere? Perché come è ora un lettore può essere confuso pensando che si theseriferisce a entrambi gli esempi precedenti mPosition e mDirection . (È così che l'ho letto all'inizio.)
Supr

8

Ciò significa che la grandezza è semplicemente la distanza dal punto di origine (0, 0, 0)?

Si può vedere in questo modo, ma solo vedendo in questo modo potrebbe portare ad una errata comprensione.


Prima di tutto, un vettore non è un punto e un punto non è un vettore.

La differenza tra un vettore e un punto è la stessa tra una durata e un'ora del giorno . Il primo è un intervallo di tempo, il secondo è un singolo punto nel tempo. È ovviamente che 6 ore non sono le stesse delle 6. Non diresti "La gara dura l'una" e non diresti "Incontriamoci alle 13 ore". La gara dura un'ora - un intervallo - e ci si incontra alle 13 - un punto preciso nel tempo.

Lo stesso vale per vettori e punti. Un vettore è un intervallo - uno spostamento se vuoi. Punta in una certa direzione, e sì, ha una lunghezza.

Punti e vettori sono quindi correlati, proprio come la durata e l'ora del giorno. La gara inizia alle 13 e termina alle 15. Entrambi sono punti nel tempo. Ma 15 in punto - 13 in punto = 2 ore, una durata. La gara dura due ore, non le due.

Lo stesso vale per i punti. La differenza tra il punto A e B è indicata come ⃗v = B - A, dove ⃗v indica un vettore e A e B indicano i punti.

Ora, c'è qualcosa che chiama un vettore di posizione . È possibile prendere in considerazione un vettore un punto in una certa misura, quando si dice che i vettori punti dal origine ad un certo altro punto. In altre parole: se tutti i tuoi amici sanno che chiami le ore del giorno come durate dalla mezzanotte (0), puoi dire "Ci incontriamo alle 6 ore". Saprebbero che 0 in punto + 6 ore = 6 in punto e quindi, quando incontrarti. Questo è in effetti ciò che fanno i tempi navali. "Ci incontriamo alle o-seicento ore" significa 6 in punto.

Quindi il vettore <1,2,3> punta al punto (1,2,3), se si considera l'origine il punto di ancoraggio, e sì, la lunghezza di questo vettore è la distanza di quel punto dall'origine.

Ma il vettore <1,2,3> punta anche da (1,1,1) a (2,3,4), e in tal caso la sua lunghezza indica la distanza tra questi due punti.


Quindi, come puoi vedere, un vettore ha una lunghezza perché non è un punto, ma un intervallo - uno spostamento.


Lettura correlata: Torsori
Buster

5

Un vettore può rappresentare una linea tra due punti nello spazio 3d (direzione e distanza) o una posizione nello spazio 3d (la lunghezza è la distanza dall'origine).

Se hai il punto A e il punto B, BA = AB = la direzione e la distanza che dovresti percorrere per andare da A a B.


Grazie, ma cosa significa usare Vector3.Normalized? la documentazione dice:, Returns this vector with a magnitude of 1quindi ciò non distrugge le informazioni salvate nel vettore? in realtà quello Magnitudee Normalizedciò che mi ha reso confuso.
Mohammed Noureldin,

Che si tratti di un punto nello spazio o di una freccia che indica la velocità, è tutto nella tua testa. Gli stessi dati rappresentano entrambi.
Onnipotente

@MohammedNoureldin Un vettore normalizzato è uno di lunghezza unitaria (ovvero 1). Sì, se normalizzi un vettore, perdi la lunghezza o le informazioni sulla grandezza. Se hai bisogno di entrambi (utile in molte occasioni), ottieni la lunghezza del vettore, quindi normalizzalo.
Ian Young,

1

Ciò che Unity dice sui punti rispetto ai vettori non ha senso nel lungo periodo, poiché le API della geometria selezionano solo definizioni distinte per rendere lo strumento più accessibile, non corrispondono al modo in cui queste cose sono concettualizzate nella geometria. Dai un'occhiata alle implementazioni delle classi, se puoi. Perché è arbitrario, conoscerne la definizione è l'unico modo per capire qual è il concetto. Informativa completa, non ho esperienza Unity.

Un vettore è un punto in uno spazio vettoriale , in quanto il concetto di un punto nella geometria è codificato da elementi dell'insieme sottostante. Uno spazio vettoriale ha un vettore distinto, chiamato origine o 0 . L'algebra lineare è un tentativo di codificare un frammento di geometria euclidea con un'origine algebrica.

La freccia e la sua lunghezza

I movimenti attraverso uno spazio di punti vengono spesso interpretati come tutte le frecce dalla sorgente / prima dei punti al loro obiettivo / dopo i punti.

Una funzione di due argomenti può essere applicata a un argomento per produrre una funzione di un argomento - possiamo parlare di x +, la funzione che porta ogni vettore y al vettore x + y . Questa è la traduzione associata con l'aggiunta di x . Le frecce associate vanno dai punti y ai punti x + y . Vedi: applicazione parziale , curry .

Quindi perché usiamo solo una freccia ? La freccia dall'origine punta a un vettore specifico, la x in x +: l'origine è l'identità dell'aggiunta vettoriale. Quindi, possiamo recuperare la traduzione x + solo dal suo valore x +0 = x .

Come rappresentazione grafica dello spazio, la rappresentazione della freccia ha a che fare con la nostra capacità di estrapolare visivamente o fisicamente l'effetto di una traduzione dal valore che lo determina. Quando abbiamo quella capacità?

Dare una norma allo spazio vettoriale rendendolo uno spazio vettoriale normato significa fornire una nozione della lunghezza di un vettore che abbia senso in quanto distanza da 0. Inoltre, questa deve essere una distanza che soddisfa la disuguaglianza del triangolo, che è un forte vincolo su come le lunghezze di due vettori si relazionano a quelle della loro somma. Dalla lunghezza possiamo definire la distanza per rendere questo uno spazio metrico e una geodetica è un percorso intrinsecamente dritto in quanto è il più corto possibile. La norma euclidea induce la distanza euclidea e la geodetica sono i segmenti di linea delle frecce, ma se si disegnano le frecce come geodetiche usando norme diverse, potresti estrapolare l'effetto geometrico della traduzione dalla geodetica per conoscere la geometria.

Il significato di punto e vettore

In alcuni casi nel fare la geometria dei giochi, il tuo spazio di punti non è uno spazio vettoriale . Uno spazio affine di dimensione n può essere incorporato in uno spazio proiettivo di dimensione n . Le mappe affini si riducono a proiettività. Le proiettivita 'ti permettono anche di fare FOV, penso che non sia affine. Le proiettilità hanno vantaggi:

Lo spazio n proiettivo su un campo può essere costruito dallo spazio lineare ( n +1) (spazio vettoriale), trattando i punti dello spazio proiettivo come linee attraverso l'origine dello spazio lineare. Gli aerei attraverso l'origine a loro volta danno linee proiettive. Moltiplicare i vettori per una matrice fissa è una mappa lineare , ecco a cosa serve la moltiplicazione della matrice. Le mappe lineari preservano l'origine e sono compatibili con l'incidenza. In particolare, se f è un automorfismo lineare ( corrispondente a una matrice invertibile ( n +1) x ( n +1)) e due linee L, M attraverso l'origine si estendono su un piano A , quindif L, f M sono linee che attraversano l'origine f f A , quindi f manterrà anche l'incidenza sullo spazio proiettivo - una matrice invertibile ha una proiettività associata. La moltiplicazione delle matrici codifica la composizione delle mappe lineari, e quindi delle proiettività.

Rimuovendo l'origine dallo spazio lineare, tutti i punti su una data linea attraverso l'origine sono multipli scalari l'uno dell'altro. Sfruttando questo fatto, l' omogeneizzazione sceglie un punto lineare per sostituire ogni punto proiettivo e una matrice invertibile per sostituire ogni trasformazione proiettiva (come in questo video 2D -> mappe affini 2D come 3D -> mappe lineari 3D ), in un tale modo in cui i rappresentanti sono chiusi sotto prodotti matrice-matrice e matrice-vettore e danno e sono dati da cose proiettive uniche. Questa descrizione della costruzione del piano proiettivo dal piano lineare lega alcune cose.

Quindi, nella pipeline della matrice di proiezione vista modello, stiamo usando i vettori per rappresentare i punti del nostro spazio proiettivo, ma lo spazio proiettivo non è uno spazio vettoriale e non tutti i vettori nello spazio vettoriale che stiamo usando rappresentano punti della nostra geometria (vedi foto del piano affine a destra ). Usiamo matrici di traduzione anziché somma vettoriale se vogliamo traduzioni. A volte, le persone chiamano vettori di punti proiettivi o affini, specialmente quando si utilizza una configurazione in questa vena.


2
+1. Ma la mia sensazione è che la maggior parte delle persone che capiscono la lingua che stai usando sono già a conoscenza della risposta alla domanda originale, quindi consiglio di adattare la risposta ai lettori occasionali.
Peter - Unban Robert Harvey,

@Peter Ho trovato difficile affrontare tutto. Vorrei renderlo più accessibile, ma non so come farlo senza elaborazione. Tuttavia, quando ho lavorato per la prima volta con OpenGL, mi chiedevo cosa significassero le matrici omogenee, le matrici prospettiche e come le matrici di traduzione sono state scoperte come alternativa alla traduzione sommando, quindi è possibile che non sia troppo profondo. Il formalismo è il linguaggio e, dando il giusto modo di esprimersi, penso che si incontrerà come discutere i concetti. Tuttavia, è molto opaco essere concisi, quindi è più simile a un elenco di lettura Wiki.
Loki Clock

Ho aggiunto alcuni collegamenti, in particolare un video di mappe affini che viene eseguito in una dimensione superiore come mappe lineari. Spero che questo possa aiutare.
Loki Clock,

simpatico. merita più voti.
Peter - Unban Robert Harvey,

-1

La lunghezza (o magnitudine) del vettore è square root of (x*x+y*y+z*z). I vettori sono sempre considerati come un raggio che passa dall'origine di <0,0,0> attraverso il punto descritto nel vettore<x,y,z>

La documentazione dell'unità su questo si trova qui .


Siamo spiacenti, ma questo è completamente sbagliato. Se ho due punti A e B, allora v = BA è il vettore che va da A a B. v in questo caso non attraversa affatto l'origine. Un vettore non è un punto. può essere usato per rappresentare un punto (come vettore di posizione), ma è qualcosa di diverso. Per favore, chiarisci le basi algebriche.
Polygnome,

Ho aggiornato la risposta per rimuovere la confusione, ma sto fornendo un riferimento alla documentazione di cosa sia un Vector3 in Unity e la mia risposta era in linea con tutte le risposte di livello più alto, inclusa la tua.
Stephan,

Se leggi attentamente la documentazione dell'unità, noterai che non menziona mai l'origine, poiché comunque l'origine non ha nulla a che fare con la lunghezza del vettore. Il vettore tra (1,1,1) e (2,3,4) è <1,2,3> e ha una lunghezza di sqrt (1 ^ 2 + 2 ^ 2 + 3 ^ 3) = ~ 3.9, che è la distanza tra questi due punti. Esso non tocca mai nemmeno l'origine a tutti . Sono confuso su come potresti pensare che la mia risposta sia d'accordo con te, perché non lo è affatto .
Polygnome,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.