Jeśli wektor 3D reprezentuje punkt, jak może mieć długość?

27

Próbuję zrozumieć arytmetykę wektorową (a konkretnie jej użycie w silniku Unity). Nie jestem w stanie dowiedzieć się, jak wektor może mieć długość (wielkość), mimo że reprezentuje tylko punkt (położenie i kierunek)?

Czy to oznacza, że ​​wielkość jest po prostu odległością od punktu początkowego (0, 0, 0)? A może coś mi brakuje?

Mohammed Noureldin
źródło
14
Rozważ skalar, znany również jako liczba. Może to oznaczać wartość bezwzględną, różnicę, wartość procentową itp.
Peter - Unban Robert Harvey
1
Normalizedw kontekście oznacza nowy wektor, który zachowuje Directionale ma Magnitude1. Oznacza to, że Normalizedwektor jest tworzony przez skalowanie oryginalnego wektora.
Theraot
@Theraot, bardzo dziękuję, to zdanie bardzo mi pomogło!
Mohammed Noureldin
19
Nie ma Reprezentuje przemieszczenie. To tylko wskazuje na jakimś punkcie, jeśli wziąć pod uwagę, że jest to wektor położenia , w którym to przypadku oznacza przemieszczenie od (0, 0, 0). Długość takiego wektora pozycji jest odległością punktu od początku.
Polygnome
1
@Peter Obawiam się, że muszę się z tobą nie zgadzać. Standardowe definicje algebraiczne wektora oznaczają, że nie ma to sensu. często jest to przydatne, ponieważ wektory pozycji mogą być używane do reprezentowania punktów, ale nie one punktami. „5 metrów” to zawsze odległość (lub długość), nigdy nie będzie to czas ani kolor. Często przydatne jest używanie różnych symboli - ja osobiście nigdy nie użyłbym (5, 5, 5) do oznaczenia wektora , zawsze używałbym (5, 5, 5) ^ T (T do transpozycji) lub używałbym odpowiedniej reprezentacji kolumny gdzie obsługiwane. Ponieważ powiedzenie wektora jest punktem, wprowadza niedokładności.
Polygnome

Odpowiedzi:

20

Czy to oznacza, że ​​wielkość jest po prostu odległością od punktu początkowego (0, 0, 0)?

Odpowiedź tl; dr może brzmieć: Tak, możesz to sobie wyobrazić.

Ale nie jestem pewien, czy to nie może prowadzić do błędnego zrozumienia.


Wektor nie jest punktem i istnieje między nimi zasadnicza różnica!

Fakt, że wektor jest zwykle przedstawiany jako „strzałka”, może dawać złe wrażenie. W rzeczywistości wektor nie jest pojedynczą strzałką. Bardziej precyzyjnie byłoby powiedzieć, że wektor jest zbiorem wszystkich strzałek o tej samej długości i kierunku . (Zwykle pomalowana strzała jest tylko jednym reprezentantem wszystkich tych strzał). Ale nie chcę wchodzić zbyt daleko w nudne szczegóły matematyki.

Co ważniejsze, istnieje zasadnicza różnica między punktem a wektorem, co staje się oczywiste w programowaniu graficznym po przekształceniu punktu lub wektora. Nie znam Unity, ale po szybkim spojrzeniu na dokumentację modelują najważniejszą różnicę między punktem a wektorem w Matrix4x4klasie. Ma dwie różne funkcje:

Z grubsza rzecz biorąc, różnica polega na tym, że wektor nie jest tłumaczony, podczas gdy punkt jest. Wyobraź sobie następującą macierz 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

Opisuje tłumaczenie o (1,2,3). Teraz, gdy masz następujący pseudokod

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

Wtedy tpbędzie (3,4,5), wheras tvnadal będzie (2,3,4). Przesunięcie wektora go nie zmienia (ponieważ, jak wspomniano powyżej, jest to zestaw wszystkich strzałek o tej samej wielkości i kierunku).


Fakt, że Unity używa Vector3klasy zarówno dla wektorów, jak i dla punktów, jest uzasadniony, ale może być mylący. Inne biblioteki specjalnie rozróżniają Point3Di Vector3Dczasami mają wspólną bazę Tuple3D.

Marco13
źródło
3
Czy na pewno „wektor jest zbiorem wszystkich strzałek o tej samej długości i kierunku” ma sens matematyczny? Wygląda na to, że mówisz o niektórych klasach równoważności, ale przestrzenie wektorowe nie są czymś, co czytałem, zdefiniowane jako klasy równoważności. - Cokolwiek, podnosisz bardzo ważny ... punkt , z rozróżnieniem między przestrzeniami wektorowymi i przestrzeniami afinicznymi , które są matematycznymi nazwami odpowiednio dla typów wszystkich wektorów / wszystkich punktów.
lewo około
3
A vector is, in fact, not a single arrow, masz rację, reprezentowanie Vector3 jako pojedynczej strzałki jest dokładnie tym, co mnie pomyliło. +1 za wzmiankę o tym krytycznym zdaniu.
Mohammed Noureldin
@leftaroundabout Istnieją różne możliwe definicje wektorów (poza tym, że są to „jakieś n-krotki ...”). W algebrze liniowej wyobraź sobie zestaw wszystkich strzałek i relację (równoważność! -) „Ma tę samą długość i kierunek”. Faktoryzacja zbioru wszystkich strzałek przez tę relację daje klasy równoważności. Nie chciałem podrywać szczegółów matematycznych (nie jestem też matematykiem), ale miałem nadzieję, że wyjaśnię, że wektor nie jest „strzałką rozpoczynającą się od (0,0,0)”. Punkt (...) brzmi: wektor nie ma „pozycji”.
Marco13
2
Jeszcze bardziej skomplikowane jest użycie tego terminu w informatyce vectordo oznaczenia tablicy lub wielu! W C ++ możesz std::vector<Vector3>na przykład mieć . A vectorz Vectors.
user1118321
Ach, więc masz na myśli, zaczynając od przestrzeni afinicznej X , definiujesz dla dowolnych dwóch punktów ( p , q ) strzałkę sA ( X ) jako najkrótszą ścieżkę (tj. Funkcja różniczkowalna z minimalną zintegrowaną pochodną absolutną) s : [0,1] → X w taki sposób, a (0) = P i y (1) = P . Zatem przestrzenią wektorów jest zbiór klas równoważności A ( X ) / ~ gdzie s ~ σ jeśli ∂ s / ∂ t = ∂ σ/ ∂ t dla wszystkich t ∈] 0,1 [? Ma to sens, choć nie sądzę, że można tego użyć jako definicji wektorów, ponieważ różnicowanie już od nich zależy.
lewo około
36

Czy to oznacza, że ​​wielkość jest po prostu odległością od punktu początkowego (0, 0, 0)?

To jest dokładnie to.

Wektor może reprezentować między innymi punkt (pozycję), kierunek i / lub prędkość, w zależności od kontekstu.

Jeśli masz tę zmienną:

Vector3 mPosition;

Zazwyczaj reprezentuje tylko pozycję, tj. Gdzie znajduje się w przestrzeni 3D.

Jeśli masz tę zmienną:

Vector3 mDirection;

Generalnie reprezentuje kierunek. Zazwyczaj wektor ten jest wektorem jednostkowym, tj. Wektorem o długości 1 (ale nie zawsze jest potrzebny). Wektor jednostkowy i wektor znormalizowany to to samo, oba mają długość 1. Wektory te są często używane z innymi wektorami do zmiany ich pozycji.

Podczas normalizacji wektora tracisz jego długość (jego wielkość), ale kierunek pozostaje ten sam. Są sytuacje, w których potrzebujesz tylko kierunku (np. Gdy chcesz przesunąć obiekt w tym kierunku), a posiadanie wielkości (innej niż długość jednostki) w wektorze wprowadziłoby nieoczekiwane wyniki obliczeń.

Jeśli potrzebujesz normalnego wektora do pojedynczego obliczenia, możesz go użyć myVec3.normalized, nie będzie to miało wpływu myVec3, a jeśli zamierzasz często używać tego znormalizowanego wektora, prawdopodobnie powinieneś utworzyć zmienną:

Vector3 myVec3Normalized = myVec3.normalized;

aby uniknąć powtarzających się wywołań normalizedmetody

A jeśli zobaczysz zmienne:

Vector3 mVelocity;

Zasadniczo reprezentuje siłę / prędkość: te wektory reprezentują kierunek, a ich wielkość (ich długość) jest ważna. Mogą być również reprezentowane przez Vector3 mDirection;i float mSpeed;.

Wszystkie są używane w odniesieniu do ich lokalnego pochodzenia, którym może być (0, 0, 0) lub może być inną pozycją.

Vaillancourt
źródło
4
Niszczy część informacji zawartych w wektorze, a ta informacja jest wielkością. Kierunek pozostaje jednak taki sam.
6
@Eldy Dokładniej jest zauważyć, że myVec3.normalizedzwraca nowy Vector3 o tym samym kierunku, ale wielkość 1 myVec3pozostaje niezmieniona
Caleth
4
@ NPSF3000 To byłby palant i odrzut , nie ma konsensusu w sprawie nazwisk poza tym. Wszyscy cieszymy się, że szarpnięcia nie są powszechne.
Theraot
1
@ NPSF3000 Niektórzy sugerują, że 4., 5. i 6. pochodna pozycji powinny być przystawki, trzaski i pop! :-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter
1
Może zmienić these vector are unit vectorssię direction vectors are unit vectorsczy coś? Ponieważ obecnie jest to czytelnik może mylić myślenie, które theseodnosi się do obu poprzednich przykładów, mPosition i mDirection . (Tak to najpierw czytałem.)
Supr
8

Czy to oznacza, że ​​wielkość jest po prostu odległością od punktu początkowego (0, 0, 0)?

Możesz to zobaczyć w ten sposób, ale tylko widzenie w ten sposób może prowadzić do błędnego zrozumienia.


Przede wszystkim wektor nie jest punktem, a punkt nie jest wektorem.

Różnica między wektorem a punktem jest taka sama, jak między czasem trwania a porą dnia . Ten pierwszy to przedział czasu, drugi to pojedynczy punkt w czasie. To oczywiste, że 6 godzin to nie to samo co godzina szósta. Nie powiedziałbyś „Wyścig trwa 1 godzina” i nie powiedziałbyś „Spotkajmy się za 13 godzin”. Wyścig trwa godzinę - odstęp - i spotykasz się o godzinie 13 - w określonym momencie.

To samo dotyczy wektorów i punktów. Wektor to interwał - przesunięcie, jeśli chcesz. Wskazuje w określonym kierunku i tak, ma długość.

Punkty i wektory są zatem powiązane, podobnie jak czasy trwania i pory dnia. Wyścig rozpoczyna się o godzinie 13 i kończy o godzinie 15. Oba są punktami w czasie. Ale godzina 15 - godzina 13 = 2 godziny, czas trwania. Wyścig trwa dwie godziny, a nie drugą.

To samo dotyczy punktów. Różnica między punktami A i B jest oznaczona jako ⃗v = B - A, gdzie ⃗v oznacza wektor, a A i B oznacza punkty.

Jest coś, co nazywa się wektorem pozycji . Państwo może rozważyć wektorze punkt do pewnego stopnia, kiedy mówisz, że punkty wektory od początku do pewnego innego punktu. Innymi słowy: jeśli wszyscy Twoi znajomi wiedzą, że od północy (godziny 0) nazywasz się porami dnia, możesz powiedzieć „Spotykamy się o 6 godzinach”. Wiedzieliby, że godzina 0 + 6 godzin = godzina szósta, a zatem kiedy cię poznać. Tak właśnie robią czasy morskie. „Spotykamy się o godzinie szóstej” oznacza godzinę szóstą.

Wektor <1,2,3> wskazuje zatem na punkt (1,2,3), jeśli uznasz początek za punkt kontrolny, i tak, długość tego wektora jest odległością tego punktu od początku.

Ale wektor <1,2,3> również wskazuje od (1,1,1) do (2,3,4), aw tym przypadku jego długość oznacza odległość między tymi dwoma punktami.


Jak widać, wektor ma długość, ponieważ nie jest to punkt, lecz interwał - przemieszczenie.

Polygnome
źródło
Powiązana lektura: Torsors
Buster
5

Wektor może reprezentować linię między dwoma punktami w przestrzeni 3d (kierunek i odległość) lub lokalizacją w przestrzeni 3d (długość to odległość od początku).

Jeśli masz punkt A i punkt B, wówczas BA = AB = kierunek i odległość, którą musisz przebyć, aby dostać się z punktu A do punktu B.

Ian Young
źródło
Dziękujemy, ale co to znaczy używać Vector3.Normalized? dokumentacja mówi: Returns this vector with a magnitude of 1więc czy to nie niszczy informacji zapisanych w wektorze? właściwie to Magnitudei Normalizedto mnie wprawiło w zakłopotanie.
Mohammed Noureldin
Niezależnie od tego, czy jest to punkt w przestrzeni, czy strzałka wskazująca prędkość, wszystko jest w twojej głowie. Te same dane reprezentują jedno i drugie.
Wszechobecny
@MohammedNoureldin Znormalizowany wektor ma długość jednostkową (czyli 1). Tak, jeśli znormalizujesz wektor, stracisz informacje o długości lub wielkości. Jeśli potrzebujesz obu (przydatne w wielu przypadkach), otrzymujesz długość wektora, a następnie normalizujesz go.
Ian Young
1

To, co Unity mówi o punktach i wektorach, na dłuższą metę nie ma sensu, ponieważ interfejsy API geometrii wybierają różne definicje, aby uczynić narzędzie bardziej dostępnym, nie odpowiadają to, w jaki sposób te rzeczy są konceptualizowane w geometrii. Spójrz na implementacje klas, jeśli możesz. Ponieważ znajomość jego definicji jest arbitralna, jedynym sposobem na zrozumienie, czym jest ta koncepcja. Pełne ujawnienie, nie mam doświadczenia w Unity.

Wektor jest punktem w przestrzeni wektorowej , ponieważ pojęcie punktu w geometrii jest kodowane przez elementy zbioru podstawowego. Przestrzeń wektorowa ma wyróżniający się wektor, zwany początkiem lub 0 . Algebra liniowa jest próbą algebraicznego zakodowania fragmentu geometrii euklidesowej z początkiem.

Strzała i jej długość

Ruchy w przestrzeni punktów są często interpretowane jako wszystkie strzały od źródła / przed punktami do ich celu / po punktach.

Funkcję dwóch argumentów można zastosować do jednego argumentu, aby uzyskać funkcję jednego argumentu - możemy mówić o x +, funkcji, która przenosi każdy wektor y do wektora x + y . To jest tłumaczenie związane z dodaniem x . Powiązane strzałki biegną od punktów y do punktów x + y . Patrz: częściowe zastosowanie , curry .

Dlaczego więc używamy tylko jednej strzałki ? Strzałka od początku wskazuje na konkretny wektor, x w x + - początek to tożsamość dodania wektora. Możemy więc odzyskać tłumaczenie x + z samej jego wartości x +0 = x .

Jako graficzne przedstawienie przestrzeni, strzałka ma związek z naszą zdolnością do wizualnej lub fizycznej ekstrapolacji efektu translacji z wartości określającej ją. Kiedy mamy tę umiejętność?

Aby nadać przestrzeni wektorowej normę, która czyni ją znormalizowaną przestrzenią wektorową, należy podać pojęcie długości wektora, które ma sens jako jego odległość od 0. Równie dobrze powinna to być odległość spełniająca nierówność trójkąta, która jest silne ograniczenie na to, jak długości dwóch wektorów odnoszą się do długości ich sumy. Na podstawie długości możemy zdefiniować odległość, aby uczynić ją przestrzenią metryczną , a geodezyjna jest ścieżką, która jest wewnętrznie prosta, ponieważ jest tak krótka, jak to możliwe. Euklidesowa normą indukuje odległość euklidesowa i geodezyjne są segmenty linii strzałki, ale jeśli rysować strzałki jako geodezyjne przy użyciu różnych norm, możesz ekstrapolować efekt geometryczny tłumaczenia z geodezji, aby dowiedzieć się o geometrii.

Znaczenie punktu i wektora

W niektórych przypadkach podczas wykonywania geometrii gier przestrzeń punktów nie jest przestrzenią wektorową . Przestrzeń afiniczna wymiaru n może być osadzona w przestrzeni rzutowej wymiaru n . Mapy afiniczne redukują się do rzutów. Projekcje pozwalają ci również na wykonanie FOV, w / c Myślę, że to nie jest afiniczne. Projekcje mają zalety:

Rzutowa n -kosmiczna na polu może być wykonana z liniowej ( n +1) -kosmiczna (przestrzeń wektorową) przez traktowanie punkty przestrzeni rzutowej jako linie przez początek przestrzeni liniowej. Z kolei samoloty przechodzące przez początek dają linie rzutowe. Mnożenie wektorów przez stałą macierz jest mapą liniową , do tego służy mnożenie macierzy. Mapy liniowe zachowują pochodzenie i są kompatybilne z częstotliwością. W szczególności, jeśli f jest automorfizmem liniowym ( odpowiadającym odwracalnej ( n +1 ) macierzy ( n +1)), a dwie linie L, M przechodzące przez początek rozpościerają się na płaszczyznę A , tof L, f M są liniami przechodzącymi przez punkt początkowy obejmujący f A , więc f zachowa również występowanie w przestrzeni projekcyjnej - odwracalna macierz ma związaną z tym projekcję. Mnożenie macierzy koduje kompozycję map liniowych, a tym samym prognoz.

Usuwając początek z przestrzeni liniowej, wszystkie punkty na danej linii przechodzącej przez początek są wielokrotnościami skalarnymi względem siebie. Wykorzystując ten fakt, homogenizacja wybiera punkt liniowy dla każdego punktu rzutowania i odwracalną matrycę dla każdej transformacji rzutowej (jak w tym wideo afinacyjnym 2D -> 2D jako 3D -> 3D mapy liniowe ), w takim sposób, w jaki przedstawiciele są zamknięci pod matrycą-matrycą i produktami matrycowo-wektorowymi i dają i są dawani przez unikalne rzeczy projekcyjne. Ten opis budowy płaszczyzny rzutowej od płaszczyzny liniowej wiąże niektóre rzeczy razem.

Zatem w potoku matrycowym widok-model-projekcja używamy wektorów do reprezentowania punktów naszej przestrzeni rzutowej, ale przestrzeń rzutowa nie jest przestrzenią wektorową i nie wszystkie wektory w przestrzeni wektorowej używamy reprezentują punkty naszej geometrii (patrz zdjęcie płaszczyzny afinicznej po prawej ). Jeśli chcemy tłumaczenia, używamy macierzy tłumaczeń zamiast sumy wektorowej. Czasami ludzie nazywają wektory punktów rzutowych lub afinicznych, szczególnie gdy używa się zestawu w tym stylu.

Zegar Lokiego
źródło
2
+1. Ale mam przeczucie, że większość ludzi, którzy rozumieją język, którego używasz, jest już świadoma odpowiedzi na pierwotne pytanie, więc zalecam dostosowanie odpowiedzi dla zwykłych czytelników.
Peter - Unban Robert Harvey
@Peter Trudno mi było rozwiązać wszystko. Chciałbym, aby był bardziej dostępny, ale nie wiem, jak to zrobić bez opracowania. Kiedy jednak po raz pierwszy pracowałem z OpenGL, zastanawiałem się nad znaczeniem homogenicznych macierzy, macierzy perspektywicznych i tym, w jaki sposób macierze tłumaczące zostały odkryte jako alternatywa dla tłumaczenia przez sumowanie, więc możliwe, że nie jest to zbyt daleko w głąb. Formalizm to język, a biorąc pod uwagę odpowiednie sformułowanie, myślę, jak omówić koncepcje. Jest jednak bardzo nieprzejrzysty, aby być zwięzłym, więc bardziej przypomina to listę czytelniczą Wiki.
Loki Clock
Dodałem kilka linków, w szczególności wideo map afinicznych wykonywanych w wyższym wymiarze jako mapy liniowe. Mam nadzieję, że to pomoże.
Loki Clock,
miły. zasługuje na więcej pochwał.
Peter - Unban Robert Harvey
-1

Długość (lub wielkość) wektora wynosi square root of (x*x+y*y+z*z). Wektory są zawsze uważane za promień przechodzący od początku <0,0,0> przez punkt opisany w wektorze<x,y,z>

Dokumentacja jedności na ten temat znajduje się tutaj .

Stephan
źródło
Przepraszam, ale to całkowicie źle. Jeśli mam dwa punkty A i B, to v = BA jest wektorem przechodzącym od A do B. v w tym przypadku wcale nie przechodzi przez początek. Wektor nie jest punktem. można go użyć do przedstawienia punktu (jako wektora pozycji), ale jest to coś innego. Proszę, wyprostuj podstawy algebraiczne.
Polygnome
Zaktualizowałem odpowiedź, aby usunąć zamieszanie, ale zapewniam odniesienie do dokumentacji tego, czym jest Vector3 w Unity, a moja odpowiedź była zgodna ze wszystkimi odpowiedziami wyższego rzędu, w tym twoimi.
Stephan
Jeśli dokładnie przeczytasz dokumentację jedności, zauważysz, że nigdy nie wspomina ona o pochodzeniu, ponieważ i tak nie ma ono nic wspólnego z długością wektora. Wektor pomiędzy (1,1,1) i (2,3,4) ma wartość <1,2,3> i ma długość sqrt (1 ^ 2 + 2 ^ 2 + 3 ^ 3) = ~ 3,9, co to odległość między tymi dwoma punktami. To nawet nie dotyka pochodzenie wcale . Jestem zdezorientowany, jak można ewentualnie pomyśleć moja odpowiedź zgadza się z was, bo tak nie jest, w ogóle .
Polygnome