Escreva um programa ou função que receba as seguintes entradas em um formato razoável de sua escolha:
Dois números inteiros positivos W e H que definem a largura e a altura da imagem que você irá gerar.
Duas cores RGB C1 e C2 que serão usadas para colorir a imagem.
Uma lista de três tuplas do formulário
(r, x, y)
que definem círculos com raior
e centrox, y
no plano da imagem.r
É um número inteiro positivo ex
ey
são quaisquer inteiros. O pixel superior esquerdo da imagem é0, 0
e o eixo x aumenta para a direita e o eixo y aumenta para baixo.
Envie uma imagem com as dimensões W por H coloridas com C1 e C2, de modo que não haja duas regiões vizinhas definidas por todos os círculos sobrepostos da mesma cor.
Por exemplo: Se a entrada for
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)
então os limites do círculo ficam assim:
Existem seis regiões distintas e contíguas na imagem criada pelos círculos. Cada região deve ser colorida com C1 (amarelo) ou C2 (roxo), de modo que não haja duas regiões vizinhas da mesma cor.
Há duas maneiras de fazer isso, sua única diferença é que as cores são trocadas:
Assim, qualquer uma dessas duas imagens seria saída válida para a entrada de exemplo.
Algo parecido com isso seria saída inválida, pois duas regiões amarelas são vizinhas.
Suas imagens de saída devem seguir estas diretrizes:
Além de C1 e C2, uma terceira cor neutra, como preto ou branco, pode ser usada para os limites do círculo, desde que não tenham mais que 5 pixels de espessura. (Os limites pretos de 1 pixel de espessura estão presentes no exemplo acima.)
Os limites dos círculos não são necessários, no entanto. As regiões podem se vizinhos diretamente:
Ambos são outra saída válida para o exemplo acima.
Os círculos devem ser o mais precisos possível, usando algoritmos de desenho de círculo ou o que sua biblioteca de gráficos fornecer.
Em geral, a perfeição de pixels não é necessária, mas se os parâmetros de entrada forem redimensionados igualmente cada vez maiores, a imagem resultante deverá se tornar cada vez mais precisa.
Anti-aliasing é permitido, mas não obrigatório.
Linhas de grade ou rótulos de eixos etc. em segundo plano não são permitidos.
O código mais curto em bytes vence.
Mais exemplos
Todos usando essas entradas com diferentes conjuntos de círculos:
W = 100
H = 60
C1 = (255, 0, 0)
C2 = (0, 0, 255)
Em qualquer exemplo, as cores podem ser trocadas e permanecem válidas.
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.
Verifique se sua saída se comporta de maneira semelhante a todos esses exemplos.
tikz