La taille du mystère lunaire
Je suis sûr que vous avez entendu que la lune change de taille. Lorsque vous êtes amoureux et que vous avez de la chance, la lune a presque deux fois sa taille par rapport aux situations normales. Certaines personnes disent que la raison en est l'atmosphère qui agit comme une lentille. D'autres pensent que ce n'est qu'une question de comparaison avec d'autres objets tels que les arbres à proximité. Quelle que soit l'explication que vous lisez, c'est assez subjectif.
La taille de la science de la lune
Ok, nous sommes programmeurs, n'est-ce pas? Nous nous appuyons sur des faits, non? Voici donc l'expérience:
- Prenez un bel appareil photo qui prend en charge le réglage de l'heure et de l'ouverture manuellement.
- Réglez votre appareil photo au niveau de zoom maximum.
- Sortez, prenez quelques photos de la lune afin de détecter les meilleurs réglages pour que la lune soit nette et que l'éclairage soit très bien.
- Rappelez-vous les paramètres
- Prenez des photos de la lune avec ces paramètres chaque fois que vous pensez que la lune est grande ou petite.
- Calculez la taille de la lune en pixels
La caméra ne mentira pas, n'est-ce pas? En comptant les pixels lumineux, nous pouvons mesurer efficacement la taille de la lune - au moins en pixels.
Si la taille est la même sur toutes les photos, c'est un bug dans notre cerveau. Si la taille diffère, alors il y a place à la spéculation
- la lune grandit vraiment (mais que mange-t-elle?)
- il y a un effet de lentille atmosphérique
- la lune a une courbe elliptique et est parfois plus proche, parfois plus éloignée de la terre
- ...
Mais je vais laisser cela ouvert jusqu'à ce que votre tâche soit terminée. Bien sûr, vous voulez savoir à l'avance si votre logiciel peut calculer avec précision la taille de la lune.
La tâche
Compte tenu de quelques images optimisées de la lune, veuillez calculer la taille de la lune. L'optimisation est la suivante: les pixels sont noirs ou blancs. Rien entre les deux. Pas d'anticrénelage. C'est facile, non?
La mise en garde: la lune n'est pas toujours pleine, vous savez ... ça peut être une faucille! Mais même en forme de faucille, la taille de la lune est plus grande. Vous allez donc calculer la taille réelle, s'il vous plaît.
- Votre programme prend un PNG en entrée, par exemple comme argument de ligne de commande de nom de fichier, canalisé dans
stdin
ou en tant qu'objet Bitmap (d'une bibliothèque de framework standard) si vous écrivez une fonction au lieu d'un programme. - Votre programme fonctionne avec n'importe quelle taille de bitmap d'entrée raisonnable, pas nécessairement carrée. La largeur et la hauteur minimales de 150 pixels sont garanties.
- La pleine lune couvre au moins 25% de l'image.
- Votre programme affiche la taille calculée de la lune en pixels comme s'il s'agissait d'une pleine lune.
- Nous supposons que la lune est une sphère parfaite.
- La taille exacte est toujours un nombre entier, mais vous pouvez sortir un nombre décimal si votre calcul le renvoie.
- La précision doit être comprise entre 98% et 102%. (C'est plutôt une supposition que quelque chose que je pourrais garantir. Si vous pensez que c'est trop difficile à atteindre, veuillez laisser un commentaire.)
Mise à jour :
- Le centre de la lune n'est pas nécessairement au milieu de l'image.
- La zone visible minimale est de 5% de la lune ou 1,25% du nombre total de pixels.
- La photo est prise de manière à ce que la lune entière s'adapte à l'image, c'est-à-dire que le nombre total de pixels est une limite supérieure pour la taille de la lune.
- La lune ne sera pas recadrée / coupée.
Les échantillons
Vous pouvez générer vos propres échantillons en utilisant le fichier de mélange si vous le souhaitez. J'ai créé les images suivantes pour vous. Vous pouvez compter les pixels d'un fichier PNG à l'aide de WhitePixelCounter.exe (nécessite .NET) pour vérifier si l'image ne contient que des pixels noir et blanc et combien d'entre eux.
Les images 256x256 pixels suivantes diffèrent par la quantité de pixels blancs, mais devraient toutes entraîner une taille de lune calculée de 16416 pixels.
Et ces images de 177x177 pixels devraient renvoyer 10241 pixels. Les images sont fondamentalement les mêmes, mais cette fois, un appareil photo avec une distance focale différente a été utilisé.
Échantillons non carrés et non centrés avec un résultat de 9988:
Oh, je n'ai pas d'implémentation de référence pour l'instant et je ne sais même pas si je suis capable d'implémenter quelque chose. Mais dans mon cerveau, il y a une forte croyance qui me dit qu'elle doit être mathématiquement soluble.
Les règles
C'est Code Golf. Le code le plus court du 30/03/2015 est accepté.