З огляду на зображення, які мають лише чорні та білі пікселі, та (x, y) розташування, яке є білим пікселем, розфарбуйте білі пікселі на основі їх мінімальної відстані на Манхеттені від (x, y) на шляху, який передбачає лише проходження інших білих пікселів.
Відтінок з кольорових пікселів повинна бути пропорційна відстані від (х, у), так що піксель в точці (х, у) буде мати колірної тон 0 ° (чистий червоний колір) і пікселі далі від (х, у) матиме відтінок 360 ° (також червоний), а інші відтінки змішуються плавно та лінійно між ними. І насиченість, і значення повинні бути 100%.
Якщо білий піксель не з'єднаний з (x, y) через інші білі пікселі, він повинен залишатися білим.
Деталі
- Вхід буде складатися з назви файла зображення або необроблених даних зображення, плюс цілі числа x та y.
- Вихідне зображення може бути збережене у файл або перероблене в необработному вигляді для будь-якого загального формату файлу зображень або просто відображатися.
- Значення x дорівнює 0 на крайньому лівому пікселі, і збільшується, якщо йде справа. Значення y дорівнює 0 у найвищих пікселях і збільшується вниз. (x, y) завжди буде в межах зображення.
- Дозволені як повні програми, так і функції.
Виграє найкоротший код у байтах.
Приклади
Усі ці зображення були зменшені для економії місця. Клацніть на них, щоб переглянути в повному розмірі.
Вхідне зображення:
(x,y) = (165,155)
і (x,y) = (0,0)
Вхідне зображення та вихід із (x,y) = (0,0)
:
Вхідне зображення та вихід із (x,y) = (600,350)
:
Вхідне зображення та вихід із (x,y) = (0,0)
:
Вхідне зображення та вихід із (x,y) = (0,0)
:
Необов’язково -30% бонус: використовуйте евклідову дистанцію. Пропозиція щодо вашого алгоритму полягає в наступному (загальний контур):
- Мати стартовий піксель.
- Заливка з цього пікселя.
- На кожен піксель, досягнутий у заповненні,
- Перемістіться від стартового пікселя до цього пікселя кроком на пів-одиниці по прямій лінії.
- На кожному кроці застосовуйте
int()
до координат x і y. Якщо піксель у цих координатах чорний, зупиніться. В іншому випадку продовжуйте. (Це метод прямого бачення.) - Будь-який досягнутий піксель, що межує з білим пікселем та / або пікселем, який раніше був позначений значно більшою відстані (тобто +10), стає піксельним початком.
У більш мета-сенсі цей алгоритм поширюється на кожен доступний піксель по прямій лінії від початкових / вже кольорових пікселів, потім "дюймів" по краях. Біт "значно більшої відстані" призначений для прискорення роботи алгоритму. Чесно кажучи, це не дуже важливо, як ви реалізуєте евклідову дистанцію, вона просто має виглядати приблизно так.
Ось як виглядає перший приклад з евклідовою дистанцією, використовуючи алгоритм, наведений вище:
Вхідне зображення і (x,y) = (165,155)
Велике спасибі Calvin'sHobbies та трихоплаксам за допомогу в написанні цього виклику! Веселіться!