Zentriert und gut gerastert
Beim Umbau meiner Fotogalerie fiel mir ein mathematisch interessanter Aspekt der Anordnung gleich großer Bilder ins Auge. Wie Buchstaben im Fließtext stehen die Vorschaubilder auf den Galerieseiten eines nach dem anderen und rutschen in die nächste Zeile, wenn eine Zeile voll ist. Außerdem ist eingestellt, dass sie zentriert ausgerichtet werden. So ergibt sich immer eines der folgenden Szenarien.
Erster Fall: Die Bilder füllen genau eine bestimmte Zahl von Zeilen und bilden dabei ein rechtwinkliges Raster aus Zeilen und Spalten. Schön!
Zweiter Fall: Es sind so wenige Bilder, dass keine Zeile ganz gefüllt wird. Es ist ein einfaches, aber trotzdem einheitliches „Raster“. Schön!
Dritter Fall: Die letzte Zeile ist zwar nicht komplett gefüllt, aber das oder die Bilder darin passen trotzdem genau ins Raster der Zeilen darüber. Schön!
Vierter Fall: Die letzte Zeile ist nicht komplett gefüllt und das oder die Bilder darin sind gegenüber dem Raster der anderen Zeilen um eine halbe Bildbreite verschoben. Zwingt man die Bilder ins Raster, sind sie nicht mehr zentriert. Das ist nicht schön.
Wie lässt sich der vierte Fall trotz begrenztem Einfluss auf die Anzahl der Bilder je Zeile (Webseiten werden auf ganz unterschiedlich großen Monitoren vom kleinen Smartfon bis zum Wandbildschirm betrachtet) vermeiden? Bevor wir zu Antworten kommen, verleihe ich den beteiligten Zahlen Symbole und fange ihre Beziehungen mit einer Formel ein:
Taufe und Formel
Die Zeilenbreite, also wie viele Bilder in einer Zeile Platz hätten, heiße $b$. Die Anzahl der mit Bildern tatsächlich voll gefüllten Zeilen heiße $a$ und die Anzahl der restlichen Bilder $r$. Nennen wir zu guter Letzt die Gesamtzahl der Bilder $n$.
$a,b,n,r$ sind allesamt ganze Zahlen mit $n>0$ und $a\geq 0$ und $r\geq 0$ und $b>r$ und es gilt die Formel:
Kriterien der schönen Rasterung
Den ersten Fall eines schönen Rasters haben wir genau dann, wenn $r=0$ ist. Den zweiten Fall eines schönen Rasters haben wir genau dann, wenn $a=0$ ist. Den dritten Fall eines schönen Rasters haben wir genau dann, wenn $a$ und $r$ größer als null sind sowie $b-r$ eine gerade Zahl ist.
Das dritte Kriterium bedarf vielleicht einer Erklärung: Da $b$ die Anzahl der Plätze je Zeile und $r$ die Zahl der vorhandenen Bilder in der unvollständigen Zeile ist, ist $b-r$ die Anzahl freier Plätze in jener Zeile. Wenn diese Zahl gerade ist, teilen sich die freien Plätze ganzzahlig auf beide Seiten der vorhandenen Bilder auf.
Wenn die Zahl der freien Plätze ungerade ist, können sie nicht ganzzahlig zu gleichen Teilen links und rechts der vorhandenen Bilder liegen. Entweder man halbiert einen freien Platz, sodass die Bilder um diese halbe Bildbreite aus dem Raster tanzen, oder man kann sie nicht richtig zentrieren.
Wer immer das Raster bewahrt
Wie sichert man sich eine schöne Rasterung? Zum Beispiel, indem man eine Zahl von Bildern zusammenstellt, die sich bei jeder Seitenbreite an ein Raster hält. Das triviale Beispiel ist $n=1$:
Ebenso leicht sieht man, dass $n=2$ immer die Anordnung im Raster wahrt:
Die nächsten immer schönen Bilderzahlen sind $n=4$ und $n=6$, was man zum Beispiel durch Auslegen von Spielkarten leicht ausprobieren kann. Als nächste immer schön gerasterte Bilderzahl folgt $n=10$:
Die letzte ihrer Art
Zehn ist die größte Bilderzahl, bei der nie Bilder aus der Spalte tanzen. Es folgt in drei Teilen ein Beweis, dass keine größere Anzahl das leistet.
Erster Teil: Bei jeder ungeraden Zahl bleibt als Rest eins, wenn man ganzzahlig durch zwei teilt. Man kann die Zahl also immer als $n=a\cdot 2+1$ darstellen. Darin ist $b-r=2-1=1$ ungerade und $r>0$ sowie für ungerade Zahlen ab drei auch $a>0$. Keines der Kriterien für eine schöne Rasterung ist damit erfüllt.
Zweiter Teil: Jede gerade Zahl lässt sich als $n=2\cdot m+0$ mit einer ganzen Zahl $m$ darstellen. Für gerade Zahlen ab vierzehn ist $m\geq 7$. Dann gelten aber auch diese Gleichungen:
Einmal steht $m-1$ und einmal $m-2$ für die Anzahl $b$ der Bilder je voller Zeile. Einer der Werte muss ungerade sein, doch in beiden Fällen ist der Rest $r$, zwei oder vier, gerade. So ist in einem der beiden Fälle $b-r$ ungerade und $a>0$ sowie $r>0$ und keines der Kriterien für eine schöne Rasterung erfüllt.
Dritter Teil: Für zwölf Bilder ist bei $b=5$ keines der Kriterien für eine schöne Rasterung erfüllt. Die Bilder der letzten Zeile brechen also das Raster.
Bis zu einer gegebenen Breite
Auch wenn zehn die größte immer gut gerasterte Bilderzahl ist, kann man fragen, ob es größere Zahlen gibt, die zumindest bis zu einer beliebigen vorgegebenen Zeilenbreite $B$ stets gut gerastert sind. Ja, die gibt es. Eine einfache Antwort wäre $n=B!$, denn $B!=1\cdot 2\cdot 3\cdot\ldots\cdot(B-1)\cdot B$ hat stets den Rest $r=0$, wenn man sie durch irgend eine der Zahlen von eins bis $B$ teilt.
$B!$ wird allerdings sehr schnell sehr groß und unhandlich. So kann man stattdessen nach der kleinsten Zahl $n_{\min}(B)$ suchen, die für Zeilenbreiten von eins bis $B$ immer gut gerastert ist und dabei mindestens eine Zeile füllt. Wie findet man diese? Zum Beispiel, indem man bei eins beginnend für jede Bilderzahl $n$ durchprobiert, bis zu welcher Breite $B_{\max}(n)$ sie stets gut gerastert ist …
$n$ | $B_{\max}(n)$ |
---|---|
1 | ∞ |
2 | ∞ |
3 | 1 |
4 | ∞ |
5 | 1 |
6 | ∞ |
7 | 1 |
8 | 2 |
9 | 1 |
10 | ∞ |
11 | 1 |
12 | 4 |
13 | 1 |
14 | 2 |
15 | 1 |
16 | 6 |
17 | 1 |
18 | 6 |
19 | 1 |
20 | 2 |
21 | 1 |
22 | 4 |
23 | 1 |
24 | 4 |
25 | 1 |
26 | 2 |
27 | 1 |
28 | 10 |
29 | 1 |
30 | 6 |
31 | 1 |
32 | 2 |
33 | 1 |
34 | 4 |
35 | 1 |
36 | 12 |
37 | 1 |
38 | 2 |
39 | 1 |
40 | 8 |
… | … |
Aus dieser Tabelle können wir entnehmen, dass $n_{\min}(12)=36$ ist, denn 36 ist die kleinste Bilderzahl $n$, die mindestens 12 beträgt und bei Zeilenbreiten von 1 bis 12 immer gut gerastert ist. Übrigens geht ebenso $n_{\min}(11)=36$ aus der Tabelle hervor, denn 36 ist auch die kleinste Zahl größer oder gleich 11, bei der die Zeilenbreiten 1 bis 11 immer gut gerastert sind.
Ich habe ein Python-Programm für Bilderzahlen $n$ von 1 bis $10^{10}$ prüfen lassen, bis zu welcher Zeilenbreite sie stets gut gerastert sind, und so die folgenden Werte gefunden.
$B$ | $n_{\min}(B)$ |
---|---|
1 | 1 |
2 | 2 |
4 | 4 |
6 | 6 |
10 | 10 |
12 | 36 |
14 | 66 |
18 | 196 |
22 | 568 |
24 | 1008 |
28 | 1288 |
30 | 8398 |
32 | 8730 |
34 | 50688 |
38 | 124738 |
46 | 155296 |
56 | 1784476 |
58 | 11486476 |
60 | 24045750 |
64 | 37165588 |
70 | 68108038 |
78 | 1363196836 |
88 | 1865403540 |
Für ausgelassene $B$ entspricht $n_{\min}(B)$ dem nächst größeren aufgelisteten Wert. Für $B=25$ ist beispielsweise $n_{\min}(25)=n_{\min}(28)=1288$.
Python-Programm
record = 0
n = 0
while n < 10000000000:
n = n + 1
b = 1
r = 0
while r == 0 or b & 1 == r & 1:
b = b + 1
r = n % b
if b > record:
record = b
print [b - 1, n]