Papiroflèxia ============ .. module:: papiroflexia La Marina és una apassionada de la papiroflèxia i construeix tota mena de *polígons regulars inscrits en una circumferència*, com els següents: |br| ========================================== =========================================== Figura amb :math:`n=6` costats (hexàgon) Figura amb :math:`n=8` costats (octògon) |PAPIRO6| |PAPIRO8| Cobreix :math:`\approx 83\%` del cercle Cobreix :math:`\approx 90\%` del cercle ========================================== =========================================== .. admonition:: Recordem que Quan el nombre de costats :math:`n` d’un polígon regular inscrit en una circumferència, augmenta, l’àrea del polígon també augmenta. Aquesta àrea s’aproxima gradualment a la superfície del cercle, que és :math:`\pi r^2`. L’àrea d’un polígon regular amb :math:`n` costats inscrit en una circumferència de radi :math:`r` es calcula amb la fórmula següent: .. math:: area = \frac{nr^2}{2} \cdot sin\left(\frac{2\pi}{n}\right) Per fer aquest càlcul, disposes de la funció ``area_poligon(r, n)`` ja implementada al mòdul :download:`area_pol.py` La Marina vol saber de quants costats ha de fer un polígon per cobrir un cert percentatge de la superfície d'un cercle. Per exemple, per cobrir un 80% en tindria prou amb un hexàgon, que cobreix un 83%, però per cobrir un 95% necessitaria un dodecàgon de 12 costats, que arriba al 95,5%. Ajudem a la Marina i dissenyem, al mòdul :mod:`papiroflexia` (fitxer :file:`papiroflexia.py`), la següent funció: .. function:: perc_area(perc) Donat un percentatge `perc` (en tant per cent), la funció comença amb :math:`n=4` i va provant valors successius de :math:`n` fins a trobar el nombre mínim de costats per obtenir un polígon regular amb un percentatge de cobertura de la superfície del cercle igual o superior a `perc`. Només considerarà polígons amb un **nombre parell** de costats. Retorna una llista de tuples amb informació sobre els **3 últims polígons provats**, tot i que la llista pot ser més petita si la funció acaba abans. Cada tupla conté: - El nombre de costats (:math:`n`). - El percentatge de superfície que cobreix el polígon de :math:`n` costats, **arrodonit** a 4 decimals. .. admonition:: Comentari El percentatge d'àrea coberta pels polígons és independent del radi del cercle. Podríeu fer servir qualsevol valor, però per acotar la imprecisió en els càlculs, us recomanem :math:`r=1`. Els següents doctests mostren exemples del que ha de fer la funció: .. literalinclude:: test-papiroflexia.txt :language: pycon :start-after: --inici-enunciat :end-before: --fi-enunciat .. note :: Disposes d'un joc de proves més complet al fitxer :download:`test-papiroflexia.txt` Disposes de solucions al fitxer :download:`papiroflexia.py`. .. |PAPIRO6| image:: papiro6.png :height: 300px :width: 300px .. |PAPIRO8| image:: papiro8.png :height: 300px :width: 300px .. # define a hard line break for HTML .. |br| raw:: html