Rozmieszczenie zdjęć w oknie - wiersze, kolumny, proporcje....

0

Cześć!

Siedzę już pół dnia nad tym problemem i myślenie coś mi chyba nie idzie...

Mam okno (o znanych mi wymiarach);
Mam zdjęcia - ich liczba jest zmienna (powiedzmy 9-100);
Wszystkie zdjęcia mają takie same proporcje.

Teraz muszę rozmieścić te zdjęcia (zmieniając ich wymiary) jedno obok drugiego, tak, aby zajmowały całe okno.
Proporcje zdjęć w pewnym zakresie mogą się zmieniać ale bez przesady (załózmy że zdjęcie to 4:3 - nie chce z niego zrobic 10:2 :) );

Jakieś pomysły?

0

Generalnie nie da się.
Jak będzie liczba np 97 to nić a nić z tym nie zrobisz bo jest to liczba pierwsza więc nie da się jej przedstawić jako iloczyn dwóch liczb liczba wierszy * liczba kolumn.

0

Wszystkie zdjęcia mają się tam znaleźć ? Czy możesz po ludzku założyć sobie, że będzie 5 w wierszu a wierszy będzie tyle ile potrzeba :p ?

0
_13th_Dragon napisał(a):

Generalnie nie da się.
Jak będzie liczba np 97 to nić a nić z tym nie zrobisz bo jest to liczba pierwsza więc nie da się jej przedstawić jako iloczyn dwóch liczb liczba wierszy * liczba kolumn.

nikt nie powiedział że to ma być liczba wierszy * liczba kolumn
dla 97 obrazków jeden może być 4 razy większy od pozostałych - wtedy mamy 3 dodatkowe miejsca zajęte czyli w sumie 100, czyli np 10x10 z czego jeden zajmuje 4 "sektory"

mój algo na szybko wymyślony (więc pewnie błędny)
szukamy takich liczb gdzie:

kolumny * wiersze = n + 3k

przy czym z rozmiarów okna i aspect ratio wyliczysz sobie ratio kolumn do wierszy czyli np:

ratio * wiersze^2 = n + 3k

powiedzmy że ratio będzie 4/3

4/3 * wiersze^2 = n + 3k
wiersze^2 = (n + 3k) * 3/4
wiersze = sqrt(3/4n + 9k/4)

n to Twoja liczba zdjęć
k zwiększasz od zera aż liczba wierszy będzie liczbą naturalną

przykładowo dla n = 69 dopiero przy k = 13 wychodzi równa liczba
wtedy

wiersze = sqrt(3/4 * 69 + 9 * 13 / 4)
wiersze = sqrt(51,75 + 29,25)

z tego mamy:
wiersze = 9
kolumny = 12
k = 13 <- czyli 13 zdjęć powiększamy dwukrotnie
user image

5 powiększonych dwukrotnie można zamienić na 1 powiększony czterokrotnie i 4 niepowiększone
(5 * 22) = (1 * 42) + 4
więc można zamiast powiększać 13 zdjęć - powiększyć 2 czterokrotnie i 3 dwukrotnie

ale nie przemyślałem tego - pewnie zdarzą się sytuacje w których jednak podział będzie niemożliwy przy danych ratio

0

zacząłbym od czegoś prostego, czyli od zwykłej siatki bez powiększeń. Czyli jak można rozmieścić jednakowe prostokąty o zadanych proporcjach.
Jeśli x to liczba kolumn, y liczba wierszy, r proporcje obrazków, n liczba obrazków, pw ph obliczany rozmiar obrazka, ww i wh rozmiar okna, to mamy takie więzy:
x\cdot p_w = w_w
y\cdot p_h \le w_h &lt; (y+1)\cdot p_h
x\cdot y \ge n
r=\frac{p_w}{p_h}

jeśli dobrze liczę to daje:
x = \lceil\frac{w_w}{w_h \cdot r}  \cdot n \rceil
y = \lceil\frac{n}{x}\rceil
p_w = \frac{w_w}{x}
p_h = \frac{p_w}{r}

Teraz co zrobić z pustymi miejscami, przy równym podziale? Koncept powiększania pojedynczych obrazków 2 razy jeśli reszta stanowi wielokrotność 3 jest chyba najlepszy i najprostszy implementacji.
Jeśli margines u dołu jest dostatecznie duży można też powiększyć jeden wiersz zmniejszając jego liczebność o jeden.

0

jak się porządnie wyspałem, zdałem sobie sprawę że faktycznie nie ma możliwości żeby osiągnąć to co wcześniej wymyśliłem.
@unikalna_nazwa - podsunąłeś mi inne, ciekawe rozwiązanie, może faktycznie to wykorzystam...
Dzięki!

P.S. Rrrany, kocham to forum :)

0
cimak napisał(a):

Proporcje zdjęć w pewnym zakresie mogą się zmieniać ale bez przesady (załózmy że zdjęcie to 4:3 - nie chce z niego zrobic 10:2 :) );

Błąd. Proporcje zdjęcia są święte-nietykalne.

0
Azarien napisał(a):

Błąd. Proporcje zdjęcia są święte-nietykalne.

nie do końca. tzn zależy co z tymi proporcjami będę chciał zrobić: w razie gdyby "ratio" się zmieniło, nie będę rozciągał zdjęcia, tylko odpowiednio je wykadruje.

0

@cimak może to Ci się przyda:
http://blog.dkbza.org/?view=mosaic

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