sorry mir ist aber nix anderes eingefallen... Vielleicht habt ihr da eine Lösung..
Ich brauche einen Algo welcher mir ein Quadrat mit Punkten füllt. Die Fläche soll möglichst gleichmässig mit punkten befüllt werden. Doch die punkte sollen nicht in einer Reihe sein. Egal ob ich von links nach rechts oder von oben nach unten schaue, die Anzahl der punkte sollte gleich sein..
Ist vielleicht ganz simpel, doch ich hab volln Brett vorm schädel..
Mercie Thomas
ADD: Achso und die Anzahl der Punkte bzw die Dichte sollte man auch angeben können
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
So etwas wie eine Gleichverteilung (also, dass es dann auch so aussieht) kann man natürlich nur bei ausreichend großer Fläche und ausreichend großer Punktanzahl erreichen. Ich würde dafür erstmal die Brute-Force-Lösung vorschlagen. Das heißt, du nimmst dir einfach die normale Random-Funktion (die sollte recht gleichverteilt sein), lässt dir von dieser Koordinaten für deine Punkte berechnen. Wenn an der Stelle schon ein Punkt ist, dann „würfelst“ du neu. Gegebenenfalls kannst du eine zu lange Rechenzeit durch mehrfachtreffer verhindern, indem du ab 50% Füllung den anderen Weg gehst: Erst alles mit Punkten füllen und dann zufällig die Punkte wieder weg machen.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Doch die punkte sollen nicht in einer Reihe sein. Egal ob ich von links nach rechts oder von oben nach unten schaue, die Anzahl der punkte sollte gleich sein..
Wie ist das gemeint?
Ansonsten ist die Methode von Lord Horazont wohl das Mittel der Wahl.
Alternativ könnte man (wenns relativ wenige Punkte sein sollen zB) die Punkte erst regelmäßig verteilen, und dann ein Bisschen verschieben. Halt weit genug, dass es zufällig aussieht, aber nicht so weit, dass zB alle in einem Eck landen können.
Ich das vielleicht so gemeint, dass in jeder Zeile und Spalte des Bildes genau gleich viele Punkte sein sollen? Dann wäre das so eine Art Sudoku mit nur 0 und 1. In dem Fall sollte man wahrscheinlich zuerst ein paar Punkte zufällig setzen und dann das ganze als eine Art Gleichungssystem formulieren. Da 0 und 1 die einzigen Lösungen sind brauchst du kein normales Gleichungssystem sondern ein "binary integer program", kurz BIP. Ist ein Spezialfall von linearen Programmen (LP). Es sollte sich aber eine Library mit einem Solver für sowas finden lassen.
Man sollte anmerken das dieses BIP Probleme NP-hart sind und du für eine effiziente Lösung (*) vermutlich 1 Mio. Dollar bekommst, weil du dann eines der wichtigsten Informatik-Probleme der heutigen Zeit, nämlich N = NP, bewiesen hättest. Wenn du beweist, dass N != NP ist auch schon toll....hat auch noch keiner geschafft und gibt ebenfalls 1 Mio. Dollar
=> Du wirst vermutlich nur für ein kleines Bild ein Rauschen berechnen können....100x100 ist wahrscheinlich schon toll.
(*) effizient heißt hier polynomielle Laufzeit, also du kannst mit einem Polynom eine obere Grenze für die Anzahl der nötigen Rechenschritte berechnen.
Ne es geht hier um lichtstrahlen.. und die Punkte sind zielpunkte. Darum sollte das alles gleichmässig und zufällig aussehen. Habs jetzt mit Random realisiert und sieht toppi aus. Danke für eure Hilfe Thomas
Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.