Напишите программу или функцию, которая принимает следующие данные в приемлемом формате по вашему выбору:
Два натуральных числа W и H, которые определяют ширину и высоту изображения, которое вы будете генерировать.
Два цвета RGB C1 и C2, которые будут использоваться для окрашивания изображения.
Список из трех кортежей формы,
(r, x, y)
которые определяют круги с радиусомr
и центромx, y
в плоскости изображения.r
является положительным целым числом иx
иy
являются любыми целыми числами. Верхний левый пиксель изображения - это,0, 0
а ось x увеличивается вправо, а ось y увеличивается вниз.
Выведите изображение с размерами W по H, которое раскрашено C1 и C2 так , чтобы никакие две соседние области, определенные всеми перекрывающимися кругами, не были одного цвета.
Например: если ввод
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)
тогда границы круга выглядят так:
В изображении, созданном кругами, есть шесть отдельных смежных областей. Каждый регион должен быть окрашен в C1 (желтый) или C2 (фиолетовый) так, чтобы никакие два соседних региона не были одинакового цвета.
Есть два способа сделать это, их единственное отличие состоит в том, что цвета меняются местами:
Таким образом, любое из этих двух изображений будет правильным выводом для примера ввода.
Что - то вроде этого будет недействительным выходом , так как два желтых областей граничат друг с другом.
Ваши выходные изображения должны следовать этим рекомендациям:
Помимо C1 и C2, третий, нейтральный цвет, такой как черный или белый, может использоваться для границ круга, если они имеют толщину не более 5 пикселей. (Черные границы толщиной в 1 пиксель присутствуют в приведенном выше примере.)
Однако границы кругов не обязательны. Регионы могут соседствовать друг с другом напрямую:
И то, и другое является еще одним допустимым выходом для примера выше.
Круги должны быть настолько точными, насколько это возможно, используя алгоритмы рисования кругов или все, что предоставляет ваша графическая библиотека.
В общем, пиксельное совершенство не требуется, но если входные параметры масштабируются одинаково все больше и больше, результирующее изображение должно становиться все более и более точным.
Сглаживание разрешено, но не обязательно.
Линии сетки или метки осей и т. Д. На заднем плане не допускаются.
Самый короткий код в байтах побеждает.
Больше примеров
Все используют эти входы с различными наборами кругов:
W = 100
H = 60
C1 = (255, 0, 0)
C2 = (0, 0, 255)
В любом примере цвета можно поменять местами и оставить их действительными.
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.
Убедитесь, что ваш вывод ведет себя подобно всем этим примерам.
tikz