logowanie

matematyka » forum » forum zadaniowe - uczelnie wyższe » zadanie

Geometria, zadanie nr 521

ostatnie wiadomości  |  regulamin  |  latex

AutorZadanie / Rozwiązanie

revv83
postów: 1
2012-09-22 00:29:52

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.


tumor
postów: 8070
2012-09-22 09:00:51

Boki można opisać prostymi.

Interesuje nas równanie prostej po obrocie, jakieś $Cx+Dy+E=0 $(jeśli nie inaczej, to je możesz ustalić po obrocie dwóch punktów, potem prosta przechodząca przez te punkty).
Zależnie od kąta interesuje nas odległość tej obróconej prostej od odpowiedniego wierzchołka kadru. (Jeśli obracaliśmy o kąt ostry w lewo, to interesuje nas odległość prostej zawierającej prawy bok zdjęcia od prawego górnego wierzchołka kadru).
I oczywiście potrzebujesz informacji, czy prosta jest nad wierzchołkiem czy pod. Liczenie odległości to wzór (nawet wiki ma odległość punktu od prostej :P), albo też układ równań, albo obliczenie wektora od punktu do prostej.
A sprawdzenie, gdzie leży prosta, to na przykład wyliczenie $y$ dla $x=\frac{A}{2}$.

Odległość (jako odcinek czy wektor) jest równoległa do boku, który chcesz przeskalować.

Załóżmy, że obróciłeś i wyszło, że $X$ musisz zwiększyć o $R_x$, $Y$ o $R_y$, czyli skalujesz większą z liczb
$\frac{X+R_x}{X}, \frac{Y+R_y}{Y}$.

Sytuacja jest symetryczna, więc oczywiście wystarczy policzyć dla dwóch (różnych) boków te odległości.

strony: 1

Prawo do pisania przysługuje tylko zalogowanym użytkownikom. Zaloguj się lub zarejestruj





© 2019 Mariusz Śliwiński      o serwisie | kontakt   drukuj