Schreiben Sie ein Programm oder eine Funktion, die die folgende Eingabe in einem angemessenen Format Ihrer Wahl aufnimmt:
Zwei positive ganze Zahlen W und H, die die Breite und Höhe des zu erzeugenden Bildes definieren.
Zwei RGB-Farben C1 und C2, mit denen das Bild eingefärbt wird.
Eine Liste von 3 Tupeln des Formulars
(r, x, y)
, die Kreise mit Radiusr
und Mittelpunktx, y
in der Bildebene definieren .r
ist eine positive ganze Zahl undx
undy
sind beliebige ganze Zahlen. Das obere linke Pixel des Bildes ist0, 0
und die x-Achse steigt nach rechts und die y-Achse steigt nach unten.
Geben Sie ein Bild mit den Abmessungen W bis H aus, das mit C1 und C2 so gefärbt ist, dass keine zwei benachbarten Bereiche, die durch alle überlappenden Kreise definiert sind, die gleiche Farbe haben.
Zum Beispiel: Wenn die Eingabe ist
W = 300 H = 200 C1 = (255, 200, 0) C2 = (128, 0, 255) Circles = (25, 50, 80), (40, 80, 120), (300, -100, 6), (17, 253, 162)
dann sehen die Kreisgrenzen so aus:
In dem von den Kreisen erzeugten Bild gibt es sechs verschiedene, zusammenhängende Bereiche. Jede Region muss mit C1 (gelb) oder C2 (lila) so gefärbt sein, dass keine zwei benachbarten Regionen dieselbe Farbe haben.
Hierfür gibt es zwei Möglichkeiten. Der einzige Unterschied besteht darin, dass die Farben vertauscht werden:
Somit wäre jedes dieser beiden Bilder eine gültige Ausgabe für die Beispieleingabe.
So etwas wie dies wäre ungültig Ausgabe seit zwei gelben Regionen Nachbarn einander.
Ihre Ausgabebilder sollten diesen Richtlinien entsprechen:
Neben C1 und C2 kann eine dritte neutrale Farbe wie Schwarz oder Weiß für Kreisgrenzen verwendet werden, sofern sie nicht dicker als 5 Pixel sind. (Im obigen Beispiel sind schwarze, 1 Pixel dicke Grenzen vorhanden.)
Kreisgrenzen sind jedoch nicht erforderlich. Die Regionen können direkt benachbart sein:
Beides ist eine weitere gültige Ausgabe des obigen Beispiels.
Kreise sollten so genau wie möglich sein, wobei Kreiszeichnungsalgorithmen oder was auch immer Ihre Grafikbibliothek bereitstellt, verwendet werden.
Im Allgemeinen ist keine Pixel-Perfektion erforderlich, aber wenn die Eingabeparameter immer größer skaliert werden, sollte das resultierende Bild immer genauer werden.
Anti-Aliasing ist zulässig, aber nicht erforderlich.
Gitternetzlinien, Achsenbeschriftungen usw. im Hintergrund sind nicht zulässig.
Der kürzeste Code in Bytes gewinnt.
Mehr Beispiele
Alle verwenden diese Eingaben mit verschiedenen Kreisen:
W = 100
H = 60
C1 = (255, 0, 0)
C2 = (0, 0, 255)
In jedem Beispiel können die Farben getauscht werden und bleiben gültig.
Circles =
A. empty list
B. (13, 16, 20)
C. (30, 16, 20)
D. (200, 16, 20)
E. (42, 50, 20)
F. (42, 50, 20), (17, 40, 30)
G. (42, 50, 20), (17, 20, 30)
H. (42, 50, 20), (17, 10, 30), (10, 50, 30)
I. (42, 50, 20), (17, 10, 30), (35, 50, 20)
J. (18, 36, 40), (18, 63, 40), (18, 50, 20)
K. (100, -10, -20), (60, 50, -10)
L. (18, 36, 40), (18, 63, 40), (18, 50, 20), (14, 50, 20), (5, 50, 18), (20, 0, 0), (70, 22, 0), (10000, -9970, 0), (135, 100, -80)
A.
B.
C.
D.
E.
F.
G.
H.
I.
J.
K.
L.
Stellen Sie sicher, dass sich Ihre Ausgabe ähnlich wie in diesen Beispielen verhält.
tikz