Punkt jako macierz

0

Przy transformacjach obrazów wektorowych 2d, takich jak przesunięcie, skalowanie, czy obrót, pomocne są macierze.

Przykładowo, w tablicach:
double[] punktyX = {3, ... , ... };
double[] punktyY = {5, ... , ... };

przechowuje punkty, które po połączeniu dają nam jakiś tam domek.

Teraz chciałbym ten domek przesunąć o (2,3). Tworze wiec macierze:

[ 1 0 2 ]
[ 0 1 3 ]
[ 0 0 1 ]

[ 3 ]
[ 5 ]
[ 1 ]

i mnoze je przez siebie. Dzieki temu otrzymam nowy punkt po transformacji , w postaci macierzy

[ x' ]
[ y' ]
[ 1 ]

Moje pytanie brzmi ... jak teraz najlatwiej narysowac odcinek, skladajacy sie z dwoch punktow, ktore mamy w postaci takiej macierzy jak wyzej ? Musimy "wyciagnac" wspolrzedne z tej macierzy, czy moze poprawniej byloby zaimplementowanie jakiejs metody, ktora przyjmujac jako argumenty dwie takie macierze, rysuje odcinek?

Pytam, bo w sumie nie wiem dlaczego operacje przesuniecia wykonuje sie na macierzach ... przecież łatwiej byłoby w przypadku przesuniecia np o (3,5) wykonac operacje dodawania:

x' = x + 3
y' = y + 5

i od razu można by użyć wbudowaną funkcję drawLine ...

Proszę mi wyjaśnić dlaczego te macierze są takie ważne i w jaki sposób mając punkty w postaci takiej macierzy, narysować np odcinek .

0

Nie bardzo rozumiem o co ci chodzi, czy chcesz zrobić coś konkretnego, czy tylko tak teoretycznie. Opis jak to działa jest w dokumentacji klasy AffineTransform. Macierze upraszczają operacje, bo wystarczy ustalić konkretną macierz dla wybranej transformacje (przesunięcia, obrotu, odbicia) i podstawić do niej punkty x i y, a otrzyma się punkty po transformacji. Twój przykład z dodawaniem jest dobry jeżeli chodzi o przesunięcie, ale do każdej innej operacji trzeba by pisać nowy kod. Macierze obejmują transformacje afiniczne i pewnie ze względu na tą uniwersalność są takie ważne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1