Vamos traçar uma função f (x) = sin (πx) + 0,5 sin (3πx) sobre o domínio [-3,3] . Podemos interpretar isso como um fio solto deitado em um quadro. Agora vamos colocar n pregos no quadro nas posições (x 1 , y 1 ) a (x n , y n ) , onde x i ∈ (-3,3) e y i ∈ [-1,1] . Imagine que existem dois ilhós no final da corda, que estão nas posições (-3,0) e (3,0). Agora podemos pegar as pontas do barbante e puxar através dos ilhós até que o barbante esteja esticado. Isso deforma nosso gráfico em uma função linear por partes.
Algumas fotos podem ajudar. Faça 8 unhas em (-2,8, -0,7), (-2,5, -0,9), (-1,2, .2), (-0,5, 0,8), (0,5, .4), (1,2, -0,9), (1,5, -0,6), (1,8, -0,8) . Os três gráficos a seguir mostram o processo descrito acima:
Para versão maior: Clique com o botão direito do mouse -> Abrir em uma nova guia
E aqui está uma animação do aperto da corda, se você tiver alguma dificuldade para visualizá-la:
O desafio
Dada uma lista de "pregos" (que não é necessariamente classificada), plote essas unhas e a corda esticada se ela começar da forma da função acima f .
Você pode escrever um programa ou função e receber entradas via STDIN, ARGV ou argumento de função. Você pode exibir o resultado na tela ou salvar uma imagem em um arquivo.
Se o resultado for rasterizado, ele precisará ter pelo menos 300 pixels de largura e 100 pixels de altura. O intervalo de coordenadas de (-3, -1,1) a (3,1.1) deve cobrir pelo menos 75% da extensão horizontal e vertical da imagem. As escalas de comprimento de x e y não tem que ser o mesmo. Você precisa mostrar as unhas (usando pelo menos 3x3 pixels) e a corda (com pelo menos 1 pixel de largura). Você pode ou não incluir os eixos.
As cores são a sua escolha, mas você precisa de pelo menos duas cores distintas: uma para o fundo e outra para as unhas e a corda (essas podem ter cores diferentes).
Você pode assumir que todas as unhas estão a pelo menos 10 a 5 unidades de distância de f (para que você não precise se preocupar com imprecisão de ponto flutuante).
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
Mais exemplos
Aqui estão mais dois exemplos (mais simples):
{{-2.5, 1}, {-1.5, -1}, {-0.5, 1}, {0.5, -1}, {1.5, 1}, {2.5, -1}}
(A sequência coincide com o eixo x ).
{{-2.7, -0.5}, {-2.3, -0.5}, {-1.7, 0.5}, {-1.3, 0.5}, {-0.7, -0.5}, {-0.3, -0.5}, {0.5, 1}, {1.5, -1}, {2.5, 1}}