Размер луны тайна
Я уверен, что вы слышали, что луна меняет свой размер. Когда вы влюблены и вам повезло, луна почти в два раза больше по сравнению с обычными ситуациями. Некоторые люди говорят, что причина в атмосфере, которая действует как линза. Другие считают, что это только вопрос сравнения с другими объектами, такими как деревья поблизости. Какое бы объяснение вы ни прочитали, оно весьма субъективно.
Размер луны науки
Хорошо, мы программисты, не так ли? Мы опираемся на факты, верно? Итак, вот эксперимент:
- Возьмите красивую камеру, которая поддерживает настройку времени и диафрагмы вручную.
- Установите на вашей камере максимальный уровень масштабирования.
- Выйдите на улицу, сделайте несколько фотографий луны, чтобы определить лучшие настройки, чтобы луна была четкой, а освещение - просто отличным.
- Запомнить настройки
- Делайте фотографии Луны с этими настройками каждый раз, когда вы думаете, что она большая или маленькая.
- Рассчитать размер луны в пикселях
Камера не будет врать, не так ли? Подсчитывая яркие пиксели, мы можем эффективно измерить размер луны - по крайней мере, в пикселях.
Если размер одинаков для всех фотографий, это ошибка в нашем мозгу. Если размер отличается, то есть место для спекуляций
- Луна действительно растет (но что она ест?)
- есть атмосферный эффект линзы
- Луна имеет эллиптическую кривую и иногда ближе, иногда дальше от Земли
- ...
Но я оставлю это открытым, пока ваша задача не будет выполнена. Конечно, вы хотите знать заранее, может ли ваша программа точно рассчитать размер Луны.
Задание
Учитывая несколько оптимизированных изображений луны, пожалуйста, рассчитайте размер луны. Оптимизация: пиксели либо черные, либо белые. Ничего промежуточного. Нет сглаживания. Это облегчает, не так ли?
Предостережение: луна не всегда полная, вы знаете ... это может быть серп! Но даже в форме серпа размер луны больше. Таким образом, вы рассчитаете полный размер, пожалуйста.
- Ваша программа принимает PNG в качестве входных данных, например, в качестве аргумента командной строки имени файла, переданного по конвейеру
stdin
или в виде объекта Bitmap (из стандартной библиотеки фреймворка), если вы пишете функцию вместо программы. - Ваша программа работает с любым разумным размером входного растрового изображения, не обязательно квадратным. Минимальная ширина и высота 150 пикселей гарантированы.
- Полная луна покрывает не менее 25% снимка.
- Ваша программа выводит рассчитанный размер луны в пикселях, как если бы это была полная луна.
- Мы предполагаем, что луна - идеальная сфера.
- Точный размер всегда является целым числом, но вы можете вывести десятичное число, если ваши вычисления возвращают это.
- Точность должна быть между 98% и 102%. (Это скорее предположение, чем то, что я могу гарантировать, чтобы быть достижимым. Если вы думаете, что это слишком сложно, пожалуйста, оставьте комментарий.)
Обновление :
- Центр луны не обязательно находится в середине картины.
- Минимальная видимая область составляет 5% от Луны или 1,25% от общего количества пикселей.
- Снимок сделан таким образом, чтобы вся луна соответствовала изображению, то есть общее количество пикселей является верхней границей размера луны.
- Луна не будет обрезана / обрезана.
Образцы
Вы можете создавать свои собственные образцы, используя файл blend, если хотите. Я создал следующие картинки для вас. Вы можете сосчитать пиксели в PNG-файле, используя WhitePixelCounter.exe (требуется .NET), чтобы проверить, содержит ли изображение только черные и белые пиксели и сколько их.
Следующие изображения размером 256x256 пикселей отличаются по количеству белых пикселей, но все они должны привести к расчетному размеру луны 16416 пикселей.
И эти 177x177 пикселей изображения должны возвращать 10241 пикселей. Изображения в основном одинаковые, но на этот раз использовалась камера с другим фокусным расстоянием.
Неквадратные и нецентрированные образцы с результатом 9988:
О, у меня пока нет эталонной реализации, и я даже не знаю, могу ли я что-то реализовать. Но в моем мозгу есть сильное убеждение, которое говорит мне, что это должно быть математически разрешимо.
Правила
Это Код Гольф. Самый короткий код на 2015-03-30 принимается.