4. Papiroflèxia¶
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:
Figura amb \(n=6\) costats (hexàgon) |
Figura amb \(n=8\) costats (octògon) |
Cobreix \(\approx 83\%\) del cercle |
Cobreix \(\approx 90\%\) del cercle |
Recordem que
Quan el nombre de costats \(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 \(\pi r^2\).
L’àrea d’un polígon regular amb \(n\) costats inscrit en una circumferència de radi \(r\) es calcula amb la fórmula següent:
Per fer aquest càlcul, disposes de la funció area_poligon(r, n) ja implementada al mòdul 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 papiroflexia (fitxer papiroflexia.py), la següent funció:
- papiroflexia.perc_area(perc)¶
Donat un percentatge perc (en tant per cent), la funció comença amb \(n=4\) i va provant valors successius de \(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 (\(n\)).
El percentatge de superfície que cobreix el polígon de \(n\) costats, arrodonit a 4 decimals.
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 \(r=1\).
Els següents doctests mostren exemples del que ha de fer la funció:
Un quadrat cobreix el 63% de l'area del cercle en el que està inscrit >>> ll1 = perc_area(80) # un hexàgon cobreix més del 80% de l'area >>> ll1 [(4, 63.662), (6, 82.6993)] >>> ll2 = perc_area(85) # un octògon (8 costats) cobreix més del 85% >>> ll2 [(4, 63.662), (6, 82.6993), (8, 90.0316)] >>> ll3 = perc_area(60) # un quadrat cobreix més del 60% >>> ll3 [(4, 63.662)]
Nota
Disposes d’un joc de proves més complet al fitxer test-papiroflexia.txt
Disposes de solucions al fitxer papiroflexia.py.

