El tamaño del misterio de la luna
Estoy seguro de que has oído que la luna cambia de tamaño. Cuando estás enamorado y tienes suerte, la luna tiene casi el doble de tamaño en comparación con las situaciones normales. Algunas personas dicen que la razón es la atmósfera que actúa como lente. Otros piensan que es solo una cuestión de comparación con otros objetos como árboles cercanos. Cualquier explicación que leas, es bastante subjetiva.
El tamaño de la ciencia lunar
Ok, somos programadores, ¿no? Confiamos en los hechos, ¿verdad? Así que aquí está el experimento:
- Tome una buena cámara que admita el tiempo de ajuste y la apertura manualmente.
- Configure su cámara al máximo nivel de zoom.
- Salga, tome algunas fotografías de la luna para detectar la mejor configuración para que la luna sea nítida y la iluminación esté bien.
- Recuerda la configuración
- Tome fotos de la luna con esos ajustes cada vez que piense que la luna es grande o pequeña.
- Calcular el tamaño de la luna en píxeles
La cámara no mentirá, ¿verdad? Al contar los píxeles brillantes, podemos medir efectivamente el tamaño de la luna, al menos en píxeles.
Si el tamaño es el mismo en todas las fotos, entonces es un error en nuestro cerebro. Si el tamaño difiere, entonces hay espacio para la especulación.
- la luna realmente crece (pero ¿qué come?)
- hay un efecto de lente atmosférico
- la luna tiene una curva elíptica y a veces está más cerca, a veces más lejos de la tierra
- ...
Pero lo dejaré abierto hasta que se complete su tarea. Por supuesto, desea saber de antemano si su software puede calcular el tamaño de la luna con precisión.
La tarea
Dadas algunas imágenes optimizadas de la luna, calcule el tamaño de la luna. La optimización es: los píxeles son blancos o negros. Nada en el medio. Sin antialiasing. Eso lo hace fácil, ¿no?
La advertencia: la luna no siempre está llena, ya sabes ... ¡puede ser una hoz! Pero incluso en forma de hoz, el tamaño de la luna es más grande. Así que calcularás el tamaño completo, por favor.
- Su programa toma un PNG como entrada, por ejemplo, como argumento de línea de comando de nombre de archivo, canalizado en
stdin
o como un objeto de mapa de bits (de una biblioteca de marco estándar) si escribe una función en lugar de un programa. - Su programa funciona con cualquier tamaño de mapa de bits de entrada razonable, no necesariamente cuadrado. Se garantiza un ancho mínimo y una altura de 150 píxeles.
- La luna llena cubre al menos el 25% de la imagen.
- Su programa genera el tamaño calculado de la luna en píxeles como si fuera una luna llena.
- Asumimos que la luna es una esfera perfecta.
- El tamaño exacto siempre es un número entero, pero puede generar un número decimal si su cálculo lo devuelve.
- La precisión debe estar entre 98% y 102%. (Eso es más una conjetura que algo que podría garantizar que se pueda lograr. Si cree que es demasiado difícil de alcanzar, deje un comentario).
Actualización :
- El centro de la luna no está necesariamente en el medio de la imagen.
- El área visible mínima es el 5% de la luna o el 1,25% del número total de píxeles.
- La imagen se toma de manera que la luna entera se ajuste a la imagen, es decir, el número total de píxeles es un límite superior para el tamaño de la luna.
- La luna no se recortará / recortará.
Las muestras
Puede generar sus propias muestras utilizando el archivo de mezcla si lo desea. He creado las siguientes imágenes para ti. Puede contar píxeles en un archivo PNG con WhitePixelCounter.exe (necesita .NET) para verificar si la imagen contiene solo píxeles en blanco y negro y cuántos de ellos.
Las siguientes imágenes de 256x256 píxeles difieren en la cantidad de píxeles blancos, pero todas deben dar como resultado un tamaño de luna calculado de 16416 píxeles.
Y estas imágenes de 177x177 píxeles deberían devolver 10241 píxeles. Las imágenes son básicamente las mismas, pero esta vez se utilizó una cámara con una distancia focal diferente.
Muestras no cuadradas y no centradas con un resultado de 9988:
Oh, no tengo una implementación de referencia por ahora e incluso no sé si puedo implementar algo. Pero en mi cerebro hay una fuerte creencia que me dice que debe ser matemáticamente solucionable.
Las normas
Este es el código de golf. Se acepta el código más corto el 30/03/2015.