Domyślnie macierz obrotu używa punktu początkowego jako środka obrotu. Aby obrócić się wokół dowolnego punktu, musisz odjąć odległość do początku za pomocą macierzy translacji, obrócić, a następnie odłożyć z powrotem. Tyle tylko, że dla mnie to nie działa tak dobrze. Mam następujący kod (zakładamy, mój obiekt jest 100x100 z centrum w 50,50):Macierz obrotu o dowolnym punkcie
t = IDENTITY;
t = translate(t, -50, -50);
t = rotate(t, theta);
t = translate(t, 50, 50);
Niestety, jeśli zastosowanie tego macierzą transformacji t
do mojego obiektu, obiekt jest ustawiony nieprawidłowo.
I zostały wdrożone szybko jsfiddle do wykazania mój problem: http://jsfiddle.net/9M3uy/67/
W JSFiddle czerwona obrócony kwadrat jest gdzie rotacja powinna skończyło się (dzięki uprzejmości wybudowany w transformacji pochodzenia CSS3 za), a niebieski obrócony kwadrat to miejsce, w którym kończy się moje obliczenie (zielony byłby oryginalnym nieobrotowym kwadratem).
Wszelkie pomysły? Czy po prostu nie rozumiem, w jaki sposób tłumaczę, obracam, tłumaczę z powrotem mechanikę lub czy robię coś okropnie nie tak?
Nie widzę zielonego ... –
Musisz używać przeglądarki Chrome lub Safari. Zaktualizowałem JSFiddle tak, aby zawierał niezbędne CSS dla wszystkich przeglądarek. – syazdani
Tak! Ale wygląda na to, że znalazłeś odpowiedź! Przyszedłem za późno. –