Seite 1 von 1

zufall besser verteilen, oder Kollisionsabfrage

Verfasst: 15.05.2006, 11:59
von Metaman
ich hab gestern meine Chaotische Linkliste online gestellt
https://www.gifdown.de

möchte jetzt aber doch ein wenig Ordnung reinbringen..
Derzeit ist es so, das über eine Simple Zufallsfunktion die Platzierung der Einträge ermittelt wird.
das hat aber zur folge das selbst bei nur zwei Einträgen auf der Seite diese übereinander liegen können.

und recht doof würde es aussehen wenn auf einer Seite vielleicht 50 Einträge auf einen Haufen stehen.

also vielleicht hat ja jemand eine Idee wie die Button inneerhalb des festen Bereiches besser verteilen könnte

Verfasst:
von

Verfasst: 15.05.2006, 19:30
von tanmar
Also ich weiss ja nicht wie zufällig das sein soll aber die sicherste Variante wäre wohl den vorhandenen Platz in Quadranten einzuteilen und dann für jeden Link zufällig einen Quadranten zu ziehen.
Dann ist das Ganze zwar nicht mehr so zufällig aber Du kannst ohne allzu großen Rechenaufwand verhindern dass Links übereinander stehen.

Re: zufall besser verteilen, oder Kollisionsabfrage

Verfasst: 15.05.2006, 19:57
von haha
Metaman hat geschrieben:Derzeit ist es so, das über eine Simple Zufallsfunktion die Platzierung der Einträge ermittelt wird.
das hat aber zur folge das selbst bei nur zwei Einträgen auf der Seite diese übereinander liegen können.
Da der Zufall logischerweise nicht steuerbar ist, kannst Du Kollisionen nur verhindern, indem Du belegte Pixel protokollierst.

Ansatz:
Um zu verhindern, dass zigmal gewürfelt werden muss, weil immer wieder eine belegte Position rauskommt, würde ich eine sortierte Liste verwenden, in der die belegten Pixel oder besser noch Pixelbereiche eingetragen sind. Zur Positionierung eine Zahl zwischen 0 und Gesamtzahl_freier_Pixel-1 auswürfeln und dann quasi von links nach rechts, oben nach unten über die Fläche wandern, dabei belegte Pixel nicht mitzählen. Wenn unten rechts angekommen, oben links bei Pixel 0 weitermachen.
Der freie Platz zwischen den belegten Pixeln ergibt sich aus der Differenz zweier benachbarter Listeneinträge; diese Differenz ist bei jedem Schritt von einem zum nächsten Listeneintrag von der Zufallszahl abzuziehen, sofern sie dadurch nicht kleiner als 0 wird.

Auf diese Weise gelangt man am Ende der Tour definitiv an zumindest einen freien Pixel. Reicht der nachfolgende Platz nicht aus, von dort einfach weitergehen, bis genügend gefunden (dann Grafik einfügen) oder man wieder am ausgewürftelten Platz angekommen ist (kein Platz mehr für Grafik, abbrechen).

Grafik einfügen, neu belegte Pixelbereiche in die Liste eintragen (auf Sortierung achten), benachbarte Pixelbereiche zusammenfassen und Summe neu belegter Pixel von Gesamtzahl_freier_Pixel abziehen.

Da in der Liste nur belegte Pixel stehen, überspringt man automatisch die freien Plätze und spart sich die Prüfung jedes einzelnen Pixel, wie es bei einem Feld der Fall wäre. Bei einer Fläche von zum Beispiel 600x300 Pixeln sind das maximal 180.000 gesparte Prüfungen.

Zur Optimierung könnte man dafür sorgen, dass Grafiken sich bei der Platzierung "anziehen". Ist der Abstand zwischen zwei Grafiken kleiner als zum Beispiel 20 Pixel, wird die neue Grafik direkt an die bestehende angedockt. Den Wert könnte man der Anzahl der Grafiken anpassen - je mehr Grafiken, desto "magnetischer" werden sie.
Ob man damit die Platzverschwendung tatsächlich wirksam verringert, kann ich allerdings nur vermuten.

Verfasst:
von
SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Verfasst: 17.05.2006, 12:50
von Metaman
Danke für die anregungen.
aber das muß ich mir erstmal in ruhe durch den Kopf gehen lassen....

inzwischen behelfe ich mir erstmal mir einer kleinen Javascript funktion
die ein Teil der Layer aus, bzw einblendet

Verfasst: 17.05.2006, 13:22
von ole1210
Ich kann dir zwar nicht helfen, finde das aber ne Coole Idee!

Da produziert doch jeder User ohne Ende PIs, oder? Einfach nur zum ausprobieren...