Розмір місячної таємниці
Я впевнений, що ви чули, що Місяць змінює свої розміри. Коли ви закохані і вам пощастило, Місяць майже вдвічі більший порівняно зі звичайними ситуаціями. Деякі люди кажуть, що причина - атмосфера, яка виступає в ролі лінзи. Інші вважають, що це лише питання порівняння з іншими об’єктами, такими як дерева поблизу. Яке б пояснення ви не читали, воно досить суб'єктивне.
Розмір місячної науки
Гаразд, ми програмісти, чи не так? Ми покладаємось на факти, правда? Отже ось експеримент:
- Візьміть гарну камеру, яка підтримує час налаштування та діафрагму вручну.
- Встановіть камеру на максимальний рівень збільшення.
- Вийдіть, зробіть кілька фотографій Місяця, щоб виявити найкращі настройки, щоб місяць був різким, а освітлення було чудовим.
- Запам’ятайте налаштування
- Робіть фотографії Місяця з тими налаштуваннями щоразу, коли вам здається, що місяць великий чи малий.
- Обчисліть розмір Місяця в пікселях
Камера не бреше, чи не так? Підраховуючи яскраві пікселі, ми можемо ефективно виміряти розмір Місяця - принаймні в пікселях.
Якщо розмір однаковий на всіх фотографіях, то це помилка в нашому мозку. Якщо розмір відрізняється, то є місце для спекуляцій
- Місяць справді росте (але що це їсть?)
- є атмосферний ефект лінзи
- Місяць має еліптичну криву і іноді ближче, іноді далі від землі
- ...
Але я залишаю це відкритим, поки ваше завдання не буде виконано. Звичайно, ви хочете знати заздалегідь, чи ваше програмне забезпечення може точно розрахувати розмір місяця.
Завдання
З огляду на кілька оптимізованих зображень Місяця, будь ласка, обчисліть розмір Місяця. Оптимізація така: пікселі або чорні, або білі. Нічого між ними. Ніякого антиалійного. Це робить його легко, чи не так?
Застереження: місяць не завжди повний, знаєте ... це може бути серп! Але навіть у формі серпа розмір Місяця більший. Тож ви підрахуєте повний розмір, будь ласка.
- Ваша програма приймає PNG як вхідний файл, наприклад, як аргумент командного рядка імені файлів, переданий в
stdin
об'єкт Bitmap або як об'єкт Bitmap (стандартної бібліотеки фреймворків), якщо ви пишете функцію замість програми. - Ваша програма працює з будь-яким розумним вхідним растровим розміром, не обов'язково квадратним. Мінімальна ширина та висота 150 пікселів гарантуються.
- Повний місяць охоплює щонайменше 25% малюнка.
- Ваша програма виводить обчислений розмір Місяця в пікселях так, ніби це був повний місяць.
- Ми припускаємо, що Місяць - це досконала сфера.
- Точний розмір завжди є цілим числом, але ви можете виводити десятковий номер, якщо ваш розрахунок повертає це.
- Точність повинна бути від 98% до 102%. (Це швидше здогадка, ніж те, що я міг би гарантувати, що можна досягти. Якщо ви вважаєте, що це занадто важко досягти, залиште коментар.)
Оновлення :
- Центр Місяця не обов’язково посередині малюнка.
- Мінімальна видима площа - 5% місяця або 1,25% від загальної кількості пікселів.
- Знімок зроблений таким чином, щоб цілий місяць відповідав зображенню, тобто загальна кількість пікселів - це верхня межа розміру місяця.
- Місяць не буде обрізаний / обрізаний.
Зразки
Ви можете генерувати власні зразки, використовуючи файл blend, якщо хочете. Я створив для вас наступні малюнки. Ви можете порахувати пікселі у PNG-файлі за допомогою WhitePixelCounter.exe (потрібен .NET), щоб перевірити, чи містить зображення лише чорно-білі пікселі та скільки їх.
Наведені нижче зображення розміром 256x256 пікселів відрізняються кількістю білих пікселів, але все це повинно спричинити обчислений розмір місяця 16416 пікселів.
І ці зображення розміром 177x177 пікселів повинні повертати 10241 пікселів. Зображення в основному однакові, але цього разу була використана камера з різною фокусною відстанню.
Неквадратні та нецентричні зразки з результатом 9988:
О, у мене поки що немає еталонної реалізації, і я навіть не знаю, чи здатний я щось реалізувати. Але в моєму мозку є тверда віра, яка говорить мені, що вона повинна бути вирішена математично.
Правила
Це Code Golf. Найкоротший код на 2015-03-30 приймається.