Witam wszystkich.
W zasadzie jestem tu pierwszy raz i piszę z nadzieją, że ktoś podpowie mi jak rozwiązać pewien irytujący problem.
Tworzę aplikację, w której potrzebuję dopasowywać dane zdjęcie do ustalonego, stałego kadru o wymiarach AxB.
Szkopuł tkwi w tym, iż w aplikacji chciałbym obracać dane zdjęcie względem środka kadru i jednocześnie skalować je tak, aby zawsze wypełniało obszar całego kadru AxB (pewne zbędne fragmenty zdjęcia znalazłyby się wówczas poza kadrem). W praktyce wyglądałoby to tak, że dla pewnych wartości kąta obrotu zdjęcie powiększałoby się lub zmniejszało, po to by ustalony kadr zawsze był wypełniony zdjęciem.
Załączam zdjęcia, aby zobrazować problem.
1. Zdefiniowany kadr o wymiarach AxB znajduje się na środku ekranu. Zielony obszar to rzeczywiste wymiary przykładowego zdjęcia.
2. Zdjęcie przeskalowane do kadru.
3. Tak wygląda zdjęcie obrócone o 5 stopni. Widać, że cały kadr nie jest wypełniony (widać białe tło).
4. I w tym miejscu mam problem. Taki efekt chciałbym uzyskać. Zdjęcie wypełnia tylko niezbędny obszar kadru (reszta, możliwie jak najmniej - zostanie ścięta).
Otóz, jak dla tego przypadku wyprowadzić wzór na procentową skalę powiększenia zdjęcia względem jego rzeczywistych wymiarów posiadając:
- rzeczywiste wymiary zdjęcia
- kąt obrotu, np. 5 stopni
- wymiary kadru AxB
Dla niektórych kątów, np. 30 stopni udało mi się to policzyć z funkcji trygonometrycznych. Przy kącie 5 stopni sytuacja wygląda nieco inaczej, są inne warunki geometryczne (nie tworzą się trójkąty, których jednym z boków jest wymiar A lub B), nie mogę sobie z tym poradzić. Chciałbym aby wzór był uniwersalny, tak aby można było policzyć każdy kąt, ew. kąty z pierwszej ćwiartki i jakoś potem je zredukować do pozostałych ćwiartek. Nie jestem specjalistą w tego typu obliczeniach, dlatego przepraszam za łopatologiczne tłumaczenie i z góry dziękuję za pomoc.
Skalowanie obracanego prostokąta. Prostokąt na prostokącie.
- steal
- Użytkownik
- Posty: 1043
- Rejestracja: 7 lut 2007, o 18:35
- Płeć: Mężczyzna
- Lokalizacja: Białystok|Warszawa
- Podziękował: 6 razy
- Pomógł: 160 razy
Skalowanie obracanego prostokąta. Prostokąt na prostokącie.
Ja nie widzę problemu z rozpisaniem tego z odpowiedniego trójkąta. Jeżeli dłuższy bok zdjęcia ma oryginalną długość \(\displaystyle{ m}\) to wzór na skalę wygląda tak:
\(\displaystyle{ k = \frac{\sqrt{A^2+B^2}\cdot \cos(\frac{\pi}{4}-\varphi)}{m}}\)
A więc zdjęcie należy przeskalować \(\displaystyle{ 100\cdot k \%}\)
PS. Bardzo dobrze opisałeś problem, gdyby wszyscy tak robili!
\(\displaystyle{ k = \frac{\sqrt{A^2+B^2}\cdot \cos(\frac{\pi}{4}-\varphi)}{m}}\)
A więc zdjęcie należy przeskalować \(\displaystyle{ 100\cdot k \%}\)
PS. Bardzo dobrze opisałeś problem, gdyby wszyscy tak robili!
Skalowanie obracanego prostokąta. Prostokąt na prostokącie.
Serdecznie dziękuję za pomoc Co prawda skorzystałem już z rozwiązania na tym forum: ... rostokata/
Jednak mimo wszystko jestem wdzięczny za zainteresowanie tematem. Pozdrawiam
Jednak mimo wszystko jestem wdzięczny za zainteresowanie tematem. Pozdrawiam