Verhältnis von Grafiken zueina < Computergraphik < Praktische Inform. < Hochschule < Informatik < Vorhilfe
|
Ich möchte gerne eine Bilderverwaltung programmieren mit einer
Ratio für die einzelnen Bilder.
Dargestellt werden soll jeweils 1 Bild. Auf einen
Bildplatz können mehrere Bilder kommen.
z.B. Ich möchte Bild 1 Ratio 1:2 zuweisen Bild 2 Ratio 1:5, Bild 3 Ratio 1:3
Nach meinem Wissen würde Ratio 1:2 bedeuten das
dieses Bild bei jedem zweiten Seitenaufruf angezeigt
wird. Ratio 1:5 würde dann heissen das Bild 2 bei jedem
5ten Seitenaufruf angezeigt wird.
Bild 1 sollte dann auch wirklich nur bei jedem zweiten
Seitenaufruf angezeigt werden so das sich das Bild ergeben würde:
Seitenaufruf
1 - Kein Bild
2 - Bild 1
3 - Bild 3
4 - Bild 1
5 - Bild 2
6 - Bild 1, Bild 3
So Bild 1 und Bild 3 überschneiden sich, dadurch stimmt das die Reihenfolge nicht mehr?
Hat jemand eine Idee wie ich das Lösen kann, eine Gewichtung der Bilder hinzubekommen?
Gerne bin ich auf offen für andere Ideen oder Lösungsansätzte da ich schon zu lange
drin hänge und irgentwann ist man etwas verfahren im Kopf
Die Programmiersprache ist erstmal egal, mehr gehts mir um die Logig, das ganze läuft über MySQL.
Gruß,
Steini
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt: http://www.mediengestalter.info/forum/10/verhaeltnis-von-grafiken-zueinander-gewichtung-47962-1.html
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:17 Mo 14.11.2005 | Autor: | steini007 |
Wäre das ein Lösungsansatz:
Pro Bild gibt es noch eine Variable "credit" alle ratio´s starten mit 10 credits. wenn jetzt bild 1 (ratio 1:2) angezeigt wird dann wird von den credits bei bild 1 (-1) gerechnet. Alle anderen erhalten +2 credits (oder +4, +5 je nach Ratio)
so ergibt sich ein gutes gleichgewicht, angezeigt wird immer das Bild was gerade die höchsten Credit Wert hat.
Was man damit nicht darstellen kann: Das ein Bild garnicht erscheint oder eine 1:1 Ratio (Bild wird immer angezeigt)
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:34 Di 15.11.2005 | Autor: | bazzzty |
Also zunächst mal das Problem, wie ich es verstanden habe:
Du weist Bildern eine Wertigkeit (Ratio) zu, die angibt, wie oft ein Bild zu sehen sein soll. Ratio 1/2 heißt dabei soviel wie 'jedes 2. Mal' (im Schnitt?).
Das erste Problem: Wenn die Summe der Ratios nicht 1 ist, dann gibt es ohnehin Probleme: Ist sie größer (1/2, 1/4, 1/4, 1/5) = 24/20, dann müßten manchmal mehrere Bilder gezeigt werden, um die Ratios einzuhalten, ist sie kleiner, dann dürfte manchmal gar kein Bild gezeigt werden.
Daher meine erste Idee: Ratios nur relativ auffassen, d.h. durch die Summe teilen.
Haben drei Bilder die Ratios 1/2, 1/4, 1/4, 1/5 dann ergäbe sich danach Werte von 10/24, 5/24, 5/24, 4/24. Das kleinste gemeinsame Vielfache der Nenner merken ([mm]=k[/mm]) merken.
Die nächste Frage wäre dann, wie entschieden wird, welches Bild jeweils gezeigt wird.
Variante A: Bei jedem Seitenaufruf zufällig eine Zahl zwischen 0 und 1 auswürfeln und das entsprechende Bild auswählen. Bei 10/24, 5/24, 5/24, 4/24 hieße das: 0 bis 10/24 = Bild 1, 10/24 bis 15/24=Bild 2, 15/24-20/24=Bild 3, 20/24 bis 24/24=Bild 4.
Variante B: Eine feste Sequenz der Länge k berechnen, in der jedes Bild entsprechend oft vorkommt. Im Beispiel: 10x Bild 1, 5x Bild 2, 5x Bild 3, 4x Bild 4.
Wie kommt man zu so einer Folge, die halbwegs sinnvoll ist?
Intuitiv würde ich zu etwas ähnlichem wie Du greifen:
Jedes Bild hat eine bestimmte Vielfachheit [mm]v_i[/mm], also [mm]v_1=10, v_2=5 \dots [/mm] zusammen mit der Summe [mm]k=24[/mm].
Für jedes Bild führen wir jetzt eine Variable [mm]a_i[/mm] ein, zählen in jedem Schritt auf jede Variable die entsprechende Vielfachheit, wählen das Maximum aus (diese Bild wird in die Sequenz eingefügt), und verringern *nur* die entsprechende Variable um [mm]k[/mm].
Klingt kompliziert, ist es aber nicht.
Das Beispiel für [mm] v_1=10, v_2=5, v_3=5, v_4=4[/mm].
Initialisieren: [mm]a_1=0, a_2=0, a_3=0, a_4=0[/mm].
Schritt 1:
Addieren ([mm]a_i+=v_i[/mm]): [mm]a_1=10, a_2=5, a_3=5, a_4=4[/mm]
Wähle Maximum ([mm]l=argmax_{i}a_i[/mm]=1), füge Bild 1 an die Sequenz [mm]S=1[/mm].
Verringere ([mm]a_l-=v_l[/mm]): [mm]a_1=-14, a_2=5, a_3=5, a_4=4[/mm]
Schritt 2:
Addieren ([mm]a_i+=v_i[/mm]): [mm]a_1=-4, a_2=10, a_3=10, a_4=8[/mm]
Wähle Maximum ([mm]l=argmax_{i}a_i[/mm]=2 (oder 3, beliebig)), füge Bild 2 an die Sequenz [mm]S=12[/mm].
Verringere ([mm]a_l-=v_l[/mm]): [mm]a_1=-4, a_2=-14, a_3=10, a_4=8[/mm]
Schritt 3:
Addieren ([mm]a_i+=v_i[/mm]): [mm]a_1=6, a_2=-9, a_3=15, a_4=12[/mm]
Wähle Maximum ([mm]l=argmax_{i}a_i[/mm]=3), füge Bild 3 an die Sequenz [mm]S=123[/mm].
Verringere ([mm]a_l-=v_l[/mm]): [mm]a_1=6, a_2=-9, a_3=-9, a_4=12[/mm]
Schritt 4:
Addieren ([mm]a_i+=v_i[/mm]): [mm]a_1=16, a_2=-4, a_3=-4, a_4=16[/mm]
Wähle Maximum ([mm]l=argmax_{i}a_i[/mm]=1 (oder 4, beliebig)), füge Bild 1 an die Sequenz [mm]S=1231[/mm].
Verringere ([mm]a_l-=v_l[/mm]): [mm]a_1=-8, a_2=-4, a_3=-4, a_4=16[/mm]
Schritt 5:
Addieren ([mm]a_i+=v_i[/mm]): [mm]a_1=2, a_2=1, a_3=1, a_4=20[/mm]
Wähle Maximum ([mm]l=argmax_{i}a_i[/mm]=4), füge Bild 4 an die Sequenz [mm]S=12314[/mm].
Verringere ([mm]a_l-=v_l[/mm]): [mm]a_1=2, a_2=1, a_3=1, a_4=-4[/mm]
Schritt 6:
Addieren ([mm]a_i+=v_i[/mm]): [mm]a_1=12, a_2=6, a_3=6, a_4=0[/mm]
Wähle Maximum ([mm]l=argmax_{i}a_i[/mm]=1), füge Bild 1 an die Sequenz [mm]S=123141[/mm].
Verringere ([mm]a_l-=v_l[/mm]): [mm]a_1=-12, a_2=6, a_3=6, a_4=0[/mm]
usw usf.
Das Ergebnis ist eine Sequenz, die zum einen ausgewogen ist, und in der zum anderen die Häufigkeit der Bilder genau dem Verhältnis der Ratios entspricht.
Zweifellos ist die Variante B komplizierter, aber auch ungleich interessanter (aus Algorithmischer Sicht)
Gruß
|
|
|
|