If you're seeing this message, it means we're having trouble loading external resources on our website.

Jeżeli jesteś za filtrem sieci web, prosimy, upewnij się, że domeny *.kastatic.org i *.kasandbox.org są odblokowane.

Główna zawartość

Wielokrotne przekształcenia

Teraz, gdy opanowaliśmy podstawy przesuwania, obracania i skalowania, skupmy się na używaniu ich wszystkich na raz, oraz o pewnych utrudnieniach, o których mówiliśmy na początku.

Kolejność ma znaczenie

Gdy dokonujemy wielu przekształceń, kolejność jest bardzo istotna. Rotacja, po której nastąpi przesunięcie, po którym nastąpi skalowanie nie da takiego samego wyniku jak przesunięcie, po którym nastąpi rotacja, po której nastąpi skalowanie. Oto przykładowy program, który to demonstruje:
Kolejność, której użyjecie zależy od oczekiwanego efektu. Pamiętajcie jednak, że przesuwacie całą siatkę, a nie sam obiekt - trzeba opracować kolejność, która ma to na uwadze, aby uzyskać to, co chcemy.

Macierz transformacji

Za każdym razem, gdy dokonujemy rotacji, przemieszczenia lub skalowania, informacje wymagane do tej transformacji przechowywane są w postaci tabeli liczb. Ta tabela lub macierz zawiera tylko kilka wierszy i kolumn, ale dzięki magii matematyki zawiera wszystkie informacje wymagane do dokonania każdej serii transformacji. Właśnie przez to pushMatrix() i popMatrix() zawierają słowo Matrix (z ang. macierz) w swojej nazwie).
A o co chodzi z częścią push i pop? Słowa te pochodzą ze struktury danych zwanej stosem, który działa jak sprężynowy wydawacz tac w kawiarni. Gdy ktoś zwróci tacę na stos, jej ciężar posuwa platformę w dół (push). Gdy ktoś potrzebuje tacę, bierze jedną z góry stosu, a pozostałe tace zostają lekko wypchane w górę (pop).
Analogicznie pushMatrix() przekazuje aktualny stan układu współrzędnych na szczyt pamięci komputera, a popMatrix() zwraca nam ten stan. W poprzednim przykładie pushMatrix() i popMatrix() były używane, aby upewnić się, że nasz system współrzędnych był "czysty" przed każdym kolejnym etapem rysowania. W pozostałych przykładach używanie tych dwóch funkcji nie było tak na prawdę potrzebne, ponieważ nie używaliśmy kolejnych przekształceń, ale nie szkodzi zawsze profilaktycznie zapisać i przywrócić stan siatki. W ramach dobrych zwyczajów sugerujemy używać tych funkcji za każdym razem, gdy dokonujecie jakichkolwiek transformacji.
Istnieje również funkcja resetMatrix(), która przywraca macierz do jej oryginalnego stanu ("macierz jednostkowa"), ale funkcje push i pop to zazwyczaj lepsze rozwiązanie.
Chcecie przypomnieć sobie lub nauczyć się, jak posługiwać się macierzami w algebrze? Zajrzyjcie do Macierze na Khan Academy, w szczególności do działu Geometric transforms with matrices.

Ten artykuł jest adaptacją Transformacji 2D napisanej przez Davida Eisenberga wykorzystaną na licencji Creative Commons Attribution-NonCommercial-ShareAlike.

Chcesz dołączyć do dyskusji?

Na razie brak głosów w dyskusji
Rozumiesz angielski? Kliknij tutaj, aby zobaczyć więcej dyskusji na angielskiej wersji strony Khan Academy.