La dimensione del mistero della luna
Sono sicuro che hai sentito che la luna cambia dimensione. Quando sei innamorato e sei fortunato, la luna è quasi due volte più grande rispetto alle situazioni normali. Alcune persone dicono che il motivo sia l'atmosfera che funge da obiettivo. Altri pensano che sia solo una questione di confronto con altri oggetti come alberi nelle vicinanze. Qualunque sia la spiegazione che leggi, è abbastanza soggettiva.
La dimensione della scienza della luna
Ok, siamo programmatori, vero? Facciamo affidamento sui fatti, giusto? Quindi ecco l'esperimento:
- Prendi una bella fotocamera che supporti l'impostazione manuale del tempo e dell'apertura.
- Imposta la fotocamera al massimo livello di zoom.
- Esci, scatta alcune fotografie della luna per rilevare le migliori impostazioni in modo che la luna sia nitida e l'illuminazione sia perfetta.
- Ricorda le impostazioni
- Scatta foto della luna con queste impostazioni ogni volta che pensi che la luna sia grande o piccola.
- Calcola la dimensione della luna in pixel
La macchina fotografica non mentirà, vero? Contando i pixel luminosi possiamo misurare efficacemente la dimensione della luna - almeno in pixel.
Se la dimensione è la stessa in tutte le foto, allora è un bug nel nostro cervello. Se la dimensione differisce, allora c'è spazio per le speculazioni
- la luna cresce davvero (ma cosa mangia?)
- c'è un effetto lente atmosferico
- la luna ha una curva ellittica ed è talvolta più vicina, a volte più lontana dalla terra
- ...
Ma lo lascerò aperto fino a quando il tuo compito non sarà completato. Ovviamente vuoi sapere in anticipo se il tuo software è in grado di calcolare accuratamente le dimensioni della luna.
L'obiettivo
Date alcune immagini ottimizzate della luna, si prega di calcolare la dimensione della luna. L'ottimizzazione è: i pixel sono bianchi o neri. Niente in mezzo. Nessun antialiasing. Questo lo rende facile, vero?
L'avvertimento: la luna non è sempre piena, sai ... può essere una falce! Ma anche a forma di falce, la dimensione della luna è più grande. Quindi calcolerai la dimensione intera, per favore.
- Il tuo programma accetta un PNG come input, ad es. Come argomento della riga di comando del nome file, reindirizzato
stdin
o come oggetto Bitmap (di una libreria di framework standard) se scrivi una funzione anziché un programma. - Il tuo programma funziona con qualsiasi dimensione bitmap di input ragionevole, non necessariamente quadrata. La larghezza e l'altezza minima di 150 pixel sono garantite.
- La luna piena copre almeno il 25% dell'immagine.
- Il tuo programma genera la dimensione calcolata della luna in pixel come se fosse una luna piena.
- Partiamo dal presupposto che la luna è una sfera perfetta.
- La dimensione esatta è sempre un numero intero, ma è possibile generare un numero decimale se il calcolo lo restituisce.
- La precisione dovrebbe essere compresa tra il 98% e il 102%. (È piuttosto un'ipotesi che qualcosa che potrei garantire per essere realizzabile. Se pensi che sia troppo difficile da raggiungere, lascia un commento.)
Aggiornamento :
- Il centro della luna non è necessariamente al centro dell'immagine.
- L'area minima visibile è il 5% della luna o l'1,25% del numero totale di pixel.
- L'immagine è scattata in modo tale che l'intera luna si adatterebbe all'immagine, cioè il numero totale di pixel è un limite superiore per la dimensione della luna.
- La luna non sarà ritagliata / tagliata.
I campioni
Se lo desideri, puoi generare i tuoi campioni usando il file di fusione . Ho creato le seguenti immagini per te. Puoi contare i pixel in un file PNG usando WhitePixelCounter.exe (necessita di .NET) per verificare se l'immagine contiene solo pixel in bianco e nero e quanti di essi.
Le seguenti immagini di 256x256 pixel differiscono nella quantità di pixel bianchi, ma dovrebbero tutti tradursi in una dimensione lunare calcolata di 16416 pixel.
E queste immagini di 177x177 pixel dovrebbero restituire 10241 pixel. Le immagini sono sostanzialmente le stesse, ma questa volta è stata utilizzata una fotocamera con una lunghezza focale diversa.
Campioni non quadrati e non centrati con un risultato di 9988:
Oh, non ho un'implementazione di riferimento per ora e non so nemmeno se sono in grado di implementare qualcosa. Ma nel mio cervello c'è una forte convinzione che mi dice che deve essere matematicamente risolvibile.
Le regole
Questo è Code Golf. Viene accettato il codice più breve del 30-03-2015.