Подяка Хобі Кальвіна за те, що я підштовхнув свою правильну ідею в правильному напрямку.
Розглянемо набір точок в площині, які ми будемо називати сайтами , і пов’язати колір з кожним сайтом. Тепер ви можете пофарбувати всю площину, пофарбувавши кожну точку кольором найближчого майданчика. Це називається карта Вороного (або діаграма Вороного ). В принципі, карти Вороного можна визначити для будь-якої метрики відстані, але ми просто використаємо звичайну евклідову відстань r = √(x² + y²)
. ( Примітка. Вам не обов'язково знати, як обчислити та зробити один із них, щоб змагатися в цьому виклику.)
Ось приклад зі 100 сайтами:
Якщо ви подивитеся на будь-яку клітинку, то всі точки в цій комірці розташовані ближче до відповідного сайту, ніж до будь-якого іншого сайту.
Ваше завдання - наблизити дане зображення до такої карти Вороного. Вам дають зображення в будь-якому зручному форматі растрової графіки, а також ціле число N . Тоді ви повинні створити до N сайтів і колір для кожного сайту, таким чином, щоб карта Вороного на основі цих сайтів була максимально схожою на вхідне зображення.
Ви можете використовувати фрагмент стека в нижній частині цього виклику, щоб відобразити карту Вороного зі свого результату, або ви можете зробити їх самостійно, якщо хочете.
Ви можете використовувати вбудовані або сторонні функції для обчислення карти Вороного з набору сайтів (якщо вам потрібно).
Це конкурс на популярність, тому відповідь з найбільшою кількістю чистих голосів виграє. Виборцям рекомендується судити відповіді
- наскільки наближено оригінальні зображення та їх кольори.
- наскільки добре алгоритм працює на різних видах зображень.
- наскільки добре працює алгоритм для малих N .
- чи алгоритм адаптивно кластеризує точки в областях зображення, які потребують більш детальної інформації.
Тестові зображення
Ось кілька зображень для перевірки алгоритму (деякі наші звичайні підозрювані, деякі нові). Клацніть зображення для більшої версії.
Пляж у першому ряду намалював Олівія Белл і включив з її дозволу.
Якщо ви хочете отримати додатковий виклик, спробуйте Йоші з білим тлом і підберіть його пряму лінію живота.
Ви можете знайти всі ці тестові зображення в цій галереї зображень, де їх можна завантажити у вигляді поштового файлу. Альбом також містить випадкову діаграму Вороного в якості іншого тесту. Для довідки, ось дані, які їх генерували .
Будь ласка, додайте приклади діаграм для різних зображень та N , наприклад 100, 300, 1000, 3000 (а також пастбіни до деяких відповідних специфікацій комірок). Ви можете використовувати або опускати чорні краї між клітинками, як вважаєте за потрібне (на деяких зображеннях це може виглядати краще, ніж на інших). Хоча не включайте сайти (за винятком окремого прикладу, можливо, якщо ви хочете пояснити, як працює розміщення вашого сайту, звичайно).
Якщо ви хочете показати велику кількість результатів, ви можете створити галерею на imgur.com , щоб розмір відповідей був розумним. Крім того, розмістіть ескізи у своєму дописі та зробіть їх посиланнями на більші зображення, як я це робив у своїй довідковій відповіді . Ви можете отримати маленькі ескізи, додавши s
ім'я файлу за посиланням imgur.com (наприклад I3XrT.png
-> I3XrTs.png
). Також сміливо використовуйте інші тестові зображення, якщо ви знайдете щось приємне.
Рендерер
Вставте свій результат у наступний фрагмент стека, щоб відобразити результати. Точний формат списку не має значення, якщо кожна комірка задається 5 числами з плаваючою точкою в порядку x y r g b
, де x
і y
є координати сайту комірки, і r g b
є червоний, зелений і синій кольорові канали в діапазоні 0 ≤ r, g, b ≤ 1
.
У фрагменті передбачені параметри для визначення ширини рядків ребер комірок, а також, чи слід показувати сайти комірок (останні здебільшого для налагодження). Але зауважте, що результат відображається лише тоді, коли специфікації комірок змінюються, тому, якщо ви модифікуєте деякі інші параметри, додайте пробіл у клітинки чи щось таке.
Великі кредити Реймонд Хілл за написання цієї справді прекрасної бібліотеки Дж. С. Вороного .