Widziałem w jakimś dokumencie z Apple, że macierz znajdująca się za właściwością transformacji CALayera ma pola takie jak m14, m21, m22 i tak dalej. Pamiętam też, że widziałem stół wyjaśniający te pola, około jednego lub dwóch miesięcy temu. Trudno mi było go znaleźć. Ktoś zna źródło?Gdzie znajdę wyjaśnienie wszystkich pól macierzy transformacji?
Odpowiedz
To struktura wygląda następująco:
struct CATransform3D
{
CGFloat m11, m12, m13, m14;
CGFloat m21, m22, m23, m24;
CGFloat m31, m32, m33, m34;
CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;
Jest to po prostu 4x4 macierzą transformacji używany do przekształcenia 4-wektory. Może być używany do reprezentowania dowolnej liczby transformacji liniowych. Zobacz artykuł wikipedii o tym typie macierzy. Większość tych elementów nie może być interpretowana niezależnie, ale niektóre mogą. Na przykład m41, m42 i m43 reprezentują tłumaczenie w 3-przestrzeni. Tak na przykład, jeśli pomnożyć przez punkt tej macierzy:
[ 1 0 0 0 ]
[ 0 1 0 0 ]
[ 0 0 1 0 ]
[ 1 2 3 1 ]
Wtedy będzie tłumaczyć, że punkt o 1 w kierunku + x, 2 jednostki w kierunku + Y i 3 w kierunku + Z.
[ 1 0 0 0 ]
[ x y z 1 ] x [ 0 1 0 0 ] = [ x+1 y+2 z+3 1 ]
[ 0 0 1 0 ]
[ 1 2 3 1 ]
Należy zauważyć, że punkt musi być reprezentowana jako wektor z 4 4. Element wynosi 1. Należy również zwrócić uwagę, że wektor ten jest w rzeczywistości sama matryca, a format tej matrycy różni się od opisanego w artykule wikipedia na macierzach transformacji. Dzieje się tak, ponieważ punkt jest zwykle reprezentowany przez pojedynczą kolumnę, macierz z 4 wierszami, jednak Apple reprezentuje je jako 4 macierze jednorzędowe. Oznacza to, że każda macierz transformacji widoczna w artykule wikipedia musi zostać przetransponowana przed użyciem jej na telefonie iPhone, aby działała poprawnie.
Innym przykładem jest skalowanie transform:
[ 2 0 0 0 ]
[ 0 2 0 0 ]
[ 0 0 2 0 ]
[ 0 0 0 1 ]
Będzie podwójna wszystkich współrzędnych punktu, więc (1, 2, 3) będzie (2, 4, 6). Inne przekształcenia, takie jak rotacje i projekcje perspektywiczne, są trudniejsze do rozpoznania na widoku.
Oto więcej informacji na temat transforms od Apple. Paczka transformacji narzędziowych jest dostarczana przez firmę Apple do generowania tych macierzy, patrz this link. W rzeczywistości nie omawiają matematyki za CATransform3DMakeRotation, ale robi to this link.
- 1. Gdzie znajdę polecenie MysqlDumpSlow?
- 2. Gdzie znajdę dzienniki System.out.println()?
- 3. Przesunięcie macierzy transformacji afinicznej
- 4. Ustalanie macierzy transformacji
- 5. Oblicz kąt z transformacji macierzy
- 6. OpenGL: Implementacja stosu macierzy transformacji
- 7. Gdzie znajdę tekst atrybucji Usług Google Play?
- 8. Gdzie znajdę zawartość $ this-> getAbsoluteFooter() Magento
- 9. gdzie znajdę identyfikator projektu dla api gitlab?
- 10. Gdzie znajdę standardową implementację map opartą na Trie w Javie?
- 11. Obliczanie macierzy transformacji 2D z początkowej i wynikowej macierzy 2D
- 12. Gdzie mogę znaleźć domyślne szablony wszystkich typów wtyczek pól Grails?
- 13. Gdzie znajdę narzędzie deinstalacji Microsoft Visual Studio 2010?
- 14. Gdzie znajdę metadane serwera Sql dla typów danych kolumn?
- 15. Gdzie znajdę klucz API i tajny klucz API dla Facebooka?
- 16. Gdzie znajdę klasę Data w Zend Framework 2.0?
- 17. ReignFirstResponder dla wszystkich pól tekstowych
- 18. zaznaczenie wszystkich pól wyboru jquery
- 19. Obliczanie średniej pól w dokumentach osadzonych/macierzy
- 20. Czy jest możliwe zastosowanie macierzy transformacji do efektu filtra SVG?
- 21. Rozłożyć złożoną transformację macierzy na serię prostych transformacji?
- 22. Suma iloczynu wszystkich możliwych podzbiorów macierzy
- 23. R: wyjaśnienie dotyczące zarządzania pamięcią
- 24. Zastosuj funkcję do wszystkich elementów macierzy Eigen
- 25. Lista wszystkich pól w indeksie elasticsearch?
- 26. CakePHP nie otrzymuje wszystkich pól z DB?
- 27. Zapytanie MYSQL do przeszukiwania WSZYSTKICH pól?
- 28. Otrzymaj wartości wszystkich pól wyboru w repeateru
- 29. Sprawdzanie poprawności wszystkich pól w GUI Swing
- 30. Gdzie mogę przeczytać jasne wyjaśnienie POE (Perl Object Environment)?
To jest świetne wyjaśnienie, ale myślę, że masz transponowane osie. Wartości translacji X, Y i Z są reprezentowane przez m41, m42 i m43, a nie m14, m24 i m34. –
@NickLockwood dobry połów, zaktualizowałem wyjaśnienie odpowiednio. – Gabe