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?
Normalized
w kontekście oznacza nowy wektor, który zachowujeDirection
ale maMagnitude
1. Oznacza to, żeNormalized
wektor jest tworzony przez skalowanie oryginalnego wektora.Odpowiedzi:
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
Matrix4x4
klasie. Ma dwie różne funkcje:Matrix4x4.MultiplyVector
iMatrix4x4.MultiplyPoint
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:
Opisuje tłumaczenie o (1,2,3). Teraz, gdy masz następujący pseudokod
Wtedy
tp
będzie (3,4,5), wherastv
nadal 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
Vector3
klasy zarówno dla wektorów, jak i dla punktów, jest uzasadniony, ale może być mylący. Inne biblioteki specjalnie rozróżniająPoint3D
iVector3D
czasami mają wspólną bazęTuple3D
.źródło
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.vector
do oznaczenia tablicy lub wielu! W C ++ możeszstd::vector<Vector3>
na przykład mieć . Avector
zVector
s.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ą:
Zazwyczaj reprezentuje tylko pozycję, tj. Gdzie znajduje się w przestrzeni 3D.
Jeśli masz tę zmienną:
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ływumyVec3
, a jeśli zamierzasz często używać tego znormalizowanego wektora, prawdopodobnie powinieneś utworzyć zmienną:aby uniknąć powtarzających się wywołań
normalized
metodyA jeśli zobaczysz zmienne:
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;
ifloat 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ą.
źródło
myVec3.normalized
zwraca nowy Vector3 o tym samym kierunku, ale wielkość 1myVec3
pozostaje niezmienionathese vector are unit vectors
siędirection vectors are unit vectors
czy coś? Ponieważ obecnie jest to czytelnik może mylić myślenie, którethese
odnosi się do obu poprzednich przykładów,mPosition
imDirection
. (Tak to najpierw czytałem.)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.
źródło
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.
źródło
Returns this vector with a magnitude of 1
więc czy to nie niszczy informacji zapisanych w wektorze? właściwie toMagnitude
iNormalized
to mnie wprawiło w zakłopotanie.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.
źródło
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 .
źródło