Autor Wątek: Skalowanie  (Przeczytany 660 razy)

Offline matuzalem

  • Użytkownik

# Luty 17, 2010, 01:10:34
Witam

Mamy pewien prostokąt o wymiarach wxh, jego pivot znajduje się w jego środku: c = (w/2.0f, h/2.0f).

Początkowe położenie prostokąta wynosi p = (0.0f, 0.0f).
Dokonujemy operacji skalowania owego prostokąta w punkcie odniesienia s = (sx, sy) o wartość v; (w * v, h * v).

Gdzie teraz znajduje się prostokąt [jego współrzędne: p = (px, py)] ?

Pozdrawiam
Dzieki

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

therealremi

  • Gość
# Luty 17, 2010, 01:25:38
Przez skalowanie w punkcie odniesienia S rozumiesz taką operację:
[Px,Px] -= [Cx,Cy]
[Px,Py] *= v
[Px,Py] += [Sx,Sy]
?
(W takim razie już masz odpowiedz ;) )

Offline Kos

  • Użytkownik
    • kos.gd

# Luty 17, 2010, 01:26:59
Skalowanie wokół punktu A to tyle co przesunięcie całego obiektu o wektor 0-A, przemnożenie współrzędnych i przesunięcie o A-0.

(oho, powolny jestem)

Offline matuzalem

  • Użytkownik

# Luty 17, 2010, 01:41:28
Mamy prostokąt 600px X 400px.

Ładuje, D3D zaokrągla te wartości do n2 czyli mamy 1024x512.
Aby obraz nie był "rozciągnięty" skaluje go: (600/1024, 512/400);

Przed operacją skalowania obraz był wyświetlany w punkcie (0, 0), po skalowaniu (x, y) i o te x, y mi chodzi.
(punkt skalowania znajduje się po środku ekranu/okienka wyświetlającego)

//---- EDIT --------
Pytanie nieaktualne.
Udało mi się znaleźć rozwiązanie, w skrócie różnica wartości przeskalowanej przez punkt dzielony przez skale.

Pozdrawiam
« Ostatnia zmiana: Luty 17, 2010, 02:43:25 wysłana przez matuzalem »