O tamanho do mistério da lua
Tenho certeza que você já ouviu falar que a lua muda de tamanho. Quando você está apaixonado e tem sorte, a lua tem quase o dobro do tamanho em comparação com situações normais. Algumas pessoas dizem que o motivo é a atmosfera que age como uma lente. Outros pensam que é apenas uma questão de comparação com outros objetos, como árvores próximas. Seja qual for a explicação que você lê, é bastante subjetiva.
O tamanho da ciência da lua
Ok, somos programadores, não somos? Contamos com fatos, certo? Então, aqui está o experimento:
- Pegue uma boa câmera que suporte a hora e a abertura manualmente.
- Defina sua câmera para o nível máximo de zoom.
- Saia, tire algumas fotografias da lua para detectar as melhores configurações, para que a lua fique nítida e a iluminação esteja ótima.
- Lembre-se das configurações
- Tire fotos da lua com essas configurações sempre que achar que a lua é grande ou pequena.
- Calcular o tamanho da lua em pixels
A câmera não mente, não é? Contando os pixels brilhantes, podemos medir efetivamente o tamanho da lua - pelo menos em pixels.
Se o tamanho é o mesmo em todas as fotos, é um erro no nosso cérebro. Se o tamanho for diferente, haverá espaço para especulações
- a lua realmente cresce (mas o que ela come?)
- há um efeito de lente atmosférica
- a lua tem uma curva elíptica e às vezes está mais próxima, às vezes mais distante da terra
- ...
Mas deixarei isso em aberto até que sua tarefa seja concluída. É claro que você deseja saber com antecedência se o seu software pode calcular o tamanho da lua com precisão.
A tarefa
Dadas algumas fotos otimizadas da lua, calcule o tamanho da lua. A otimização é: os pixels são pretos ou brancos. Nada no meio. Sem antialiasing. Isso facilita, não é?
A ressalva: a lua nem sempre está cheia, você sabe ... pode ser uma foice! Mas mesmo na forma de uma foice, o tamanho da lua é maior. Então, você calculará o tamanho completo, por favor.
- Seu programa usa um PNG como entrada, por exemplo, como argumento da linha de comando do nome do arquivo, canalizado
stdin
ou como um objeto Bitmap (de uma biblioteca de estrutura padrão) se você escrever uma função em vez de um programa. - Seu programa funciona com qualquer tamanho de bitmap de entrada razoável, não necessariamente quadrado. Largura e altura mínimas de 150 pixels são garantidas.
- A lua cheia cobre pelo menos 25% da imagem.
- Seu programa gera o tamanho calculado da lua em pixels como se fosse lua cheia.
- Assumimos que a lua é uma esfera perfeita.
- O tamanho exato é sempre um número inteiro, mas você pode gerar um número decimal se seu cálculo retornar isso.
- A precisão deve estar entre 98% e 102%. (Isso é um palpite do que algo que eu poderia garantir que seja viável. Se você acha que é muito difícil de alcançar, por favor, deixe um comentário.)
Atualização :
- O centro da lua não está necessariamente no meio da imagem.
- A área mínima visível é de 5% da lua ou 1,25% do número total de pixels.
- A foto é tirada de forma que a lua inteira se encaixe na imagem, ou seja, o número total de pixels é um limite superior para o tamanho da lua.
- A lua não será cortada / cortada.
As amostras
Você pode gerar suas próprias amostras usando o arquivo de mistura, se desejar. Eu criei as seguintes imagens para você. Você pode contar pixels em um arquivo PNG usando o WhitePixelCounter.exe (precisa do .NET) para verificar se a imagem contém apenas pixels em preto e branco e quantos deles.
As seguintes imagens de 256x256 pixels diferem na quantidade de pixels brancos, mas devem resultar em um tamanho calculado da lua de 16416 pixels.
E essas imagens de 177x177 pixels devem retornar 10241 pixels. As imagens são basicamente as mesmas, mas desta vez uma câmera com uma distância focal diferente foi usada.
Amostras não quadradas e não centradas, com resultado de 9988:
Por enquanto, não tenho uma implementação de referência e nem sei se consigo implementar alguma coisa. Mas, no meu cérebro, existe uma forte crença que me diz que deve ser matematicamente solucionável.
As regras
Este é o Code Golf. O código mais curto de 30/03/2015 é aceito.