Jaka jest różnica między transformacją punktową a transformacją wektorową?

11

Oto, co mój wykładowca powiedział mi podczas zajęć:

Bierzemy pod uwagę tylko macierze 4 * 4. Służą do obracania, skalowania lub translacji obiektów (lub dowolnej kombinacji tych operacji). Macierze są również wykorzystywane później przy implementacji modelu wirtualnej kamery. Jeśli nie znasz różnicy między transformacją wektorową a transformacją punktową, sprawdź ją.

Nie mogę znaleźć odpowiedzi i założyłem konto dla tej witryny tylko na to pytanie.

SA
źródło
1
W uzupełnieniu do wszystkich innych odpowiedzi i dlatego, że inni już odpowiedział na to pytanie w długości gdzie indziej można sprawdzić: scratchapixel.com/lessons/...
user18490

Odpowiedzi:

9

Oto prosta odpowiedź.

W 4D, aby móc je pomnożyć przez macierz 4x4, wektory są reprezentowane jako (x, y, z, 0), a punkty są reprezentowane jako (x, y, z, 1).

Ponieważ czwarty rząd macierzy 4x4 reprezentuje translację macierzy, powyższe reprezentacje sprawiają, że translacja wpływa na punkty, ale wektory nie.

Oba wektory i punkty mają jednak wpływ na obrót, skalowanie itp.

Zastrzeżenie:

Trzeba głębiej dyskutować, jeśli spodziewamy się, że wektory będą miały określone właściwości. Na przykład, jeśli transformujesz normę trójkąta za pomocą tej samej macierzy, transformujesz wierzchołki trójkąta, prawdopodobnie nie będzie to już normalny wektor tego trójkąta. Jest tak, ponieważ wektory normalne mają swego rodzaju odwrotną zależność od wierzchołków, z których są obliczane.

Alan Wolfe
źródło
Normalne nie działają, ponieważ nie są wektorami. Nie znam jednak dobrego wstępu do tej koncepcji.
MB Reynolds
@MBReynolds W sensie matematycznym normalne są wektorami jako punkty lub kierunki. Problem polega na tym, że transformacje, które stosujemy do punktów powierzchni w celu ich transformacji, nie dotyczą normalnych.
nbro
2
normalne powierzchniowe to biwektory, a nie wektory. Możemy znaleźć normalną przez iloczyn krzyżowy dwóch wektorów, czego wynikiem jest biwektor. ZOBACZ Per Vogensen's: gist.github.com/pervognsen/c6b1d19754c2e8a38b10886b63d7bf2d
MB Reynolds
4

Z tego, czego się nauczyłem, odkąd jestem również studentem, jest to, że chcesz pracować z macierzami , aby traktować rotacje, skalowanie i tłumaczenia w ten sam sposób, to znaczy mnożenie przez macierz (tj. 4 x 4 matrycy).4×44×4

Pamiętaj, że bez tych macierzy tłumaczenia byłyby reprezentowane przez sumowanie z wektorem, podczas gdy obroty i skalowanie byłyby reprezentowane przez mnożenie odpowiednio z wektorem i współczynnikiem skalarnym.4×4

Teraz pytanie brzmi: jak przejść z układu współrzędnych 3D do układu 4D ? Odpowiedź brzmi: „ jednorodne współrzędne ”.

Co to znaczy? Konstruujemy macierze do reprezentowania rotacji, skalowania i translacji, dlatego używamy mnożenia macierzy do reprezentowania transformacji (np. Rotacje, skalowanie itp.). Sposób, w jaki konstruujemy je indywidualnie, jest bardziej szczegółowy, ale możesz to zobaczyć w Internecie.4×4

W tym momencie mamy macierze i wektory 3D, jeszcze nieprzydatne, ponieważ nie można pomnożyć macierzy 4 × 4 i wektorów 3 D , ponieważ wymiary się nie zgadzają. Właśnie dlatego, gdy pracujemy z jednorodnymi współrzędnymi, musimy również przekonwertować podane punkty 3D na odpowiadające im punkty 4D.4×44×43D

Jak to robimy?

Rozróżniamy wektory kierunku i położenia . Wektory kierunkowe, jak sama nazwa wskazuje, mają kierunek, na który wskazują; dbamy również o ich długość, ale tłumaczenia nie mają na nie wpływu, ponieważ nie dbamy o ich pozycję. Wektory położenia (lub po prostu „punkty”) można tłumaczyć lub przenosić; są zwykle reprezentowane w odniesieniu do początku, tj. jako wektor od początku do samego punktu.

Przekształcamy 3D wektorów kierunkowych przez dodanie jako 4 th współrzędna wektora odpowiadającego jednorodnego: dodamy do zera, bo to w zasadzie eliminuje efekt tłumaczenia. Podobnie robimy z wektorami pozycji, ale zamiast 0 dodajemy 1 , z przeciwnego powodu.0401

Na przykład, jeśli mamy wektor kierunku v = ( v 1 v 2 v 3 ) , przekształcamy go, wykonując v = ( v 1 v 2 v 3 0 ) . Podobnie, gdybyśmy mieli wektor punktowy u = ( u 1 u 2 u 3 ), zmienilibyśmy go na u = ( u 1 u 2 u 3 1 )3Dv=(v1v2v3)v=(v1v2v30)u=(u1u2u3)u=(u1u2)u3)1)

Uwaga: aby przekonwertować homogeniczne współrzędne z powrotem na odpowiednie współrzędne , nie można po prostu usunąć współrzędnej 4 t h , chyba że nadal jest równa odpowiednio 1 (lub 0 ).3)re4th10

nbro
źródło
(wx,wy,wz,w)w0(x,y,z)w=1wstosując również mnożenie macierzy 4D.
Ilmari Karonen,
2

Jeśli spojrzysz na definicję wektora i punktu, to wektor to:

Wielkość, taka jak prędkość, całkowicie określona wielkością i kierunkiem. http://www.thefreedictionary.com/vector

Chodzi o to:

Bezwymiarowy obiekt geometryczny, który nie ma żadnych właściwości oprócz położenia. http://www.thefreedictionary.com/point

Można więc powiedzieć, że wektor to kierunek ze skalą, a punkt to lokalizacja.

Tak więc, jeśli transformujesz wektor, po prostu go obracasz i skalujesz. Za pomocą punktu również go tłumaczysz (obrót i skalowanie punktu odbywa się wokół początku, ponieważ jest to tylko miejsce, którego sam punkt nie może zostać obrócony).

Najczęściej wektor i punkt są umieszczane w tym samym pojemniku, w którym wektor składa się z 4 elementów. Jedyną różnicą jest składnik w. Jeśli składowa w wynosi 0, to jest to kierunek. Jeśli jest to 1, to wektor jest punktem.

Przyczynę tego można znaleźć w samej macierzy. Wykorzystuje sposób zwielokrotnienia wektora przez 4 elementy z macierzą 4x4. Jeśli nie wiesz, jak to działa, proponuję szybkie google.

[rot+sdozalmirot+sdozalmirot+sdozalmitrzanslzatjaonrot+sdozalmirot+sdozalmirot+sdozalmitrzanslzatjaonrot+sdozalmirot+sdozalmirot+sdozalmitrzanslzatjaon0001]

Jak widać, jeśli ostatnim składnikiem jest 0, to masz mnożenie przez 0, a zatem wynikiem jest 0 i nie ma tłumaczenia.

Ułatwia to grafikę komputerową z obiektami wielokątnymi. Masz tę samą macierz transformacji do transformacji pozycji, ale także normalnych. Ponieważ normalne mają ustawiony komponent w na 0, a pozycja w komponent wynosi 1, normalne są po prostu obracane (a także skalowane, co może prowadzić do dziwnych rzeczy, więc przez większość czasu normalna jest normalizowana po. t naprawdę zaleca się stosowanie tej samej macierzy dla pozycji i rotacji z powodu dziwnych rzeczy! Spójrz na komentarz @JarkkoL.) i pozycje są tłumaczone (i obracane i skalowane wokół źródła).

Mam nadzieję, że nie popełniłem błędu: P, a to ci pomogło!

bram0101
źródło
2
Normalne nie są transformowane przy użyciu tej samej macierzy transformacji co pozycje. Musisz obliczyć odwrotność transpozycji podmacierzy 3x3, aby poprawnie przekształcić normalne dla transformacji z nierównomiernym skalowaniem i / lub pochylaniem.
JarkkoL,
@JarkkoL tak, to prawda, masz rację. Najlepiej nie używać tej samej matrycy, ale w zależności od implementacji jest to zrobione. W większości przypadków ludzie tak bardzo nie przejmują się wypaczaniem normalnych, ponieważ albo wcale nie stosują niejednolitego skalowania, ani skalowania. Ta część dotycząca przekształcania pozycji i normalnych polegała raczej na tym, że użyteczne byłoby użycie jednego kontenera.
bram0101