Dank an Calvins Hobbys, die meine Herausforderungsidee in die richtige Richtung gelenkt haben.
Betrachten Sie eine Reihe von Punkten in der Ebene, die wir Sites nennen , und ordnen Sie jeder Site eine Farbe zu. Jetzt können Sie die gesamte Ebene malen, indem Sie jeden Punkt mit der Farbe der nächstgelegenen Stelle einfärben. Dies wird als Voronoi-Karte (oder Voronoi-Diagramm ) bezeichnet. Grundsätzlich können Voronoi-Karten für jede Entfernungsmetrik definiert werden, aber wir verwenden einfach die übliche euklidische Entfernung r = √(x² + y²)
. ( Hinweis: Sie müssen nicht unbedingt wissen, wie man eines davon berechnet und rendert, um in dieser Herausforderung bestehen zu können.)
Hier ist ein Beispiel mit 100 Sites:
Wenn Sie eine Zelle betrachten, befinden sich alle Punkte in dieser Zelle näher an der entsprechenden Stelle als an einer anderen Stelle.
Ihre Aufgabe ist es, ein bestimmtes Bild mit einer solchen Voronoi-Karte anzunähern. Sie sind das Bild in jedem geeigneten Rastergrafikformat, sowie eine ganze Zahl gegeben N . Sie sollten dann bis zu N Standorte und eine Farbe für jeden Standort erstellen , sodass die auf diesen Standorten basierende Voronoi-Karte dem Eingabebild so nahe wie möglich kommt.
Sie können das Stapel-Snippet unten in dieser Herausforderung verwenden, um eine Voronoi-Karte aus Ihrer Ausgabe zu rendern, oder Sie können sie selbst rendern, wenn Sie dies bevorzugen.
Sie können integrierte Funktionen oder Funktionen von Drittanbietern verwenden, um eine Voronoi-Karte von einer Reihe von Standorten aus zu berechnen (falls erforderlich).
Dies ist ein Beliebtheitswettbewerb, daher gewinnt die Antwort mit den meisten Netto-Stimmen. Die Wähler werden aufgefordert, die Antworten nach zu beurteilen
- wie gut die Originalbilder und ihre Farben angenähert sind.
- Wie gut der Algorithmus auf verschiedenen Arten von Bildern funktioniert.
- wie gut der Algorithmus funktioniert für kleine N .
- ob der Algorithmus Punkte in Bereichen des Bildes, die mehr Details erfordern, adaptiv gruppiert.
Bilder testen
Hier sind einige Bilder zum Testen Ihres Algorithmus (einige unserer üblichen Verdächtigen, einige neue). Klicken Sie auf die Bilder für größere Versionen.
Der Strand in der ersten Reihe wurde von Olivia Bell gezeichnet und mit ihrer Erlaubnis eingeschlossen.
Wenn Sie eine zusätzliche Herausforderung möchten, probieren Sie Yoshi mit einem weißen Hintergrund aus und achten Sie darauf, dass seine Bauchlinie stimmt.
Sie finden alle diese Testbilder in dieser Bildergalerie, wo Sie sie alle als zip-Datei herunterladen können. Das Album enthält auch ein zufälliges Voronoi-Diagramm als weiteren Test. Als Referenz hier sind die Daten, die es erzeugt haben .
Bitte fügen Sie Beispieldiagramme für eine Vielzahl verschiedener Bilder und N , z. B. 100, 300, 1000, 3000 (sowie Pastebins zu einigen der entsprechenden Zellenspezifikationen) bei. Sie können schwarze Ränder zwischen den Zellen nach Belieben verwenden oder weglassen (dies kann auf einigen Bildern besser aussehen als auf anderen). Fügen Sie die Websites jedoch nicht hinzu (außer in einem separaten Beispiel, wenn Sie natürlich erläutern möchten, wie Ihre Website-Platzierung funktioniert).
Wenn Sie eine große Anzahl von Ergebnissen anzeigen möchten , können Sie auf imgur.com eine Galerie erstellen , um die Größe der Antworten angemessen zu halten. Alternativ können Sie Thumbnails in Ihren Beitrag einfügen und sie mit größeren Bildern verknüpfen, wie ich es in meiner Referenzantwort getan habe . Sie können die kleinen Thumbnails erhalten, indem Sie s
an den Dateinamen im Link imgur.com anhängen (z . B. I3XrT.png
-> I3XrTs.png
). Sie können auch andere Testbilder verwenden, wenn Sie etwas Schönes finden.
Renderer
Fügen Sie Ihre Ausgabe in das folgende Stapel-Snippet ein, um Ihre Ergebnisse zu rendern. Das genaue Listenformat ist irrelevant, solange jede Zelle durch 5 Gleitkommazahlen in der Reihenfolge angegeben wird x y r g b
, in der x
und y
die Koordinaten des Zellstandorts und r g b
die roten, grünen und blauen Farbkanäle im Bereich sind 0 ≤ r, g, b ≤ 1
.
Das Snippet bietet Optionen zum Angeben einer Linienbreite der Zellenkanten und zum Anzeigen der Zellenstandorte (letztere hauptsächlich zu Debugging-Zwecken). Beachten Sie jedoch, dass die Ausgabe nur dann neu gerendert wird, wenn sich die Zellenspezifikationen ändern. Wenn Sie also einige der anderen Optionen ändern, fügen Sie den Zellen ein Leerzeichen hinzu.
Dank an Raymond Hill für das Schreiben dieser wirklich schönen JS Voronoi-Bibliothek .