Построим функцию f (x) = sin (πx) + 0.5 sin (3πx) в области [-3,3] . Мы можем интерпретировать это как свободную нить, лежащую на доске. Теперь давайте вбиваем n гвоздей в доску в положениях (x 1 , y 1 ) к (x n , y n ) , где x i ∈ (-3,3) и y i ∈ [-1,1] . Представьте, что в конце струны есть два проушины, то есть в позициях (-3,0) и (3,0), Теперь мы можем взять концы нити и протянуть через проушины, пока нить не станет натянутой. Это деформирует наш граф в кусочно-линейную функцию.
Некоторые картинки могут помочь. Возьмите 8 гвоздей в (-2,8, -0,7), (-2,5, -0,9), (-1,2, 0,2), (-0,5, 0,8), (0,5, .4), (1,2, -0,9), (1,5, -0,6), (1,8, -0,8) . Следующие три графика показывают процесс, описанный выше:
Для большей версии: щелкните правой кнопкой мыши -> Открыть в новой вкладке
А вот анимация сжатия строки, если у вас возникли трудности с ее визуализацией:
Соревнование
Учитывая список «гвоздей» (который не обязательно отсортирован), нанесите эти гвозди и натянутую нить, если она начинается с формы вышеуказанной функции f .
Вы можете написать программу или функцию и получить ввод через STDIN, ARGV или аргумент функции. Вы можете либо отобразить результат на экране, либо сохранить изображение в файл.
Если результат растеризован, он должен иметь ширину не менее 300 пикселей и высоту 100 пикселей. Диапазон координат от (-3, -1.1) до (3,1.1) должен охватывать не менее 75% горизонтального и вертикального экстента изображения. Шкалы длин х и у не обязательно должны быть одинаковыми. Вам нужно показать гвозди (используя не менее 3х3 пикселя) и строку (не менее 1 пикселя в ширину). Вы можете включать или не включать оси.
Цвета - ваш выбор, но вам нужно как минимум два различимых цвета: один для фона, другой для ногтей и нитки (хотя они могут иметь разные цвета).
Вы можете предположить, что все гвозди находятся как минимум в 10 -5 единицах от f (так что вам не нужно беспокоиться о неточности с плавающей точкой).
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
Больше примеров
Вот еще два (более простых) примера:
{{-2.5, 1}, {-1.5, -1}, {-0.5, 1}, {0.5, -1}, {1.5, 1}, {2.5, -1}}
(Строка совпадает с осью 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}}