![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 623 Pomógł: 11 Dołączył: 1.01.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cześć,
Pytanie nie jest związane konkretnie z PHP, dlatego pozwoliłem sobie zamieścić je w tym dziale. Potrzebuje obliczyć macierz kilku przekształceń obiektu w grafice 2D. Wiem, że gdy mamy proste przekształcenie (czyli złożone z jednego przemieszczenia i obrotu wg. pewnego punktu - dla uproszczenia powiedzmy, że jest to środek obiektu) to wykonujemy je według reguły: Kod transform(-x, -y) * rotate(a) * transform (x + x', y + y') gdzie x i y to para współrzędnych środka obiektu przed przekształceniem, x' i y' to wartości przesunięcia obiektu, a to kąt obrotu.Problem mam, gdy jest ciąg sekwencji do wykonania, np. obróć o 30 stopni, przesuń o 30 po osi OX, obróć o -60 stopni, przesuń o 10 po osi OX i -15 po osi OY. Jak się za to zabrać? Na kartce papieru, gdy mam narysowane położenie początkowe i końcowe "łatwo" mogę przenieść ten ciąg przekształceń do krótszej formy podobnej do tej z przykładowego kodu powyżej. Niestety z zaprogramowaniem mam już kłopot. Z góry dziękuję za pomoc! -------------------- |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 675 Pomógł: 58 Dołączył: 17.12.2013 Ostrzeżenie: (10%) ![]() ![]() |
http://sylvester.jcoglan.com/api/matrix.html
ah te macierze, zobacz jak tu jest zrobione. kiedyś z tego korzystałem przy regresji i w sumie jest dość elastyczne. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
Na wikipedii masz krótki artykuł do przeczytania. W wielkim skrócie, każde przekształcenie to macierz (kwadratowa), skoro Ciebie interesują dwa wymiary to ta macierz ma wymiar 3. Macierz ta składa się z macierzy rotacji (kwadratowa, wymiar 2), wektora przesunięcia (pionowego, wymiar 2) i (strzelam bo nie pamiętam) wektora rzutu/perspektywy. Przekształceń dokonujesz mnożąc te macierze ze sobą (we właściwej kolejności), mały przykład. Wydaje mi się, że tyle Ci wystarczy, ale jakby nie to pytaj dalej.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 02:42 |