# La figure initiale est un triangle équilatéral $P_0$ de côté $1$.
# À chaque étape, le polygone $P_n$ étant construit avec des côtés de longueur $a_n$, on obtient le polygone $P_{n+1}$ en remplaçant chaque côté par une ligne polygonale à quatre segments de longueur $a_{n+1}=\displaystyle \frac{a_n}{3}$ , vers l’extérieur.
#
# Activer la figure dynamique ci-dessous, qui permet de visualiser les polygones $P_n$ pour les premières valeurs de $n$.
# (Pour faire apparaître et activer la figure dynamique, sélectionner la cellule et valider avec SHIFT+Entrée).
# In[ ]:
#Sélectionner cette zone puis SHIFT+ENTREE
from IPython.display import HTML ; HTML("""""")
#
#
# Notations :
# Pour tout $n \in \mathbb{N}$, on note :
#
#
$\color{#3F48CC}{c_n}$ le nombre de côtés du polygone $P_n$ ;
#
$\color{#22B14C}{a_n}$ la longueur des côtés du polygone $P_n$ ;
#
$\color{#A349A4}{p_n}$ le périmètre du polygone $P_n$ ;
#
$\color{#E36C0A}{A_n}$ l'aire du polygone $P_n$.
#
#
# ## 2. Étude du périmètre du flocon de Von Koch
# 2.1. $\;$a. Donner les valeurs de $c_0$ ; $c_1$ et $c_2$.
# $\quad\;\;$ b. Quelle est la nature de la suite $(c_n)_{n\geq0}$ ? Exprimer $c_n$ en fonction de $n$.
# $\quad\;\;$ c. Combien le polygone $P_5$ a-t-il de côtés ?
# $\quad\;\;$ d. Déterminer $\displaystyle\lim\limits_{n \to +\infty}{c_n}$.
# $\quad\;\;$ e. Écrire une fonction Python c d'argument n permettant le calcul de $c(n)$.
# $\quad\quad\;$ Effectuer ensuite les saisies nécessaires pour vérifier le résultat de la question 2.1.c.
#
#
#
# a. $c_0=3$ ; $c_1=3\times4=12$ ; $c_2=12\times4=48$.
# b. $(c_n)_{n\geq0}$ est géométrique de premier terme $c_0=3$ et de raison $q=4$ donc $c_n=3\times4^n$.
# c. $P_5$ a $c_5=3\times4^5=3072$ côtés.
# d. $c_0=3>0$ et $q=4>1$ donc $\displaystyle\lim\limits_{n \to +\infty}{c_n}=+\infty$.
#
# In[ ]:
# Écrire ici la fonction c permettant le calcul de c(n)
def c(n):
"Fonction qui calcule le nombre de côtés du polygone P_n"
return 3*4**n
# In[ ]:
# Effectuer ici la saisie pour vérifier le résultat de la question 2.1.c.
c(5)
# 2.2. $\;$a. Donner les valeurs exactes de $a_0$ ; $a_1$ et $a_2$.
# $\quad\;\;$ b. Quelle est la nature de la suite $(a_n)_{n\geq0}$ ? Exprimer $a_n$ en fonction de $n$.
# $\quad\;\;$ c. Quelle est la longueur des côtés du polygone $P_5$ ?
# $\quad\;\;$ d. Déterminer $\displaystyle\lim\limits_{n \to +\infty}{a_n}$.
# $\quad\;\;$ e. La fonction Python a d'argument n donnée ci-dessous permet le calcul de la valeur exacte de $a(n)$.
# $\quad\quad\;$ Effectuer la saisie nécessaire pour vérifier le résultats de la questions 2.2.c.
#
#
#
# a. $a_0=1$ ; $\displaystyle a_1=\frac{a_0}{3}=\frac{1}{3}$ ; $\displaystyle a_2=\frac{a_1}{3}=\frac{1}{9}$.
# b. $(a_n)_{n\geq0}$ est géométrique de premier terme $a_0=1$ et de raison $q=\displaystyle \frac{1}{3}$ donc $\displaystyle a_n=\frac{1}{3^n}$.
# c. La longueur des côtés de $P_5$ est $\displaystyle a_5=\frac{1}{3^5}=\frac{1}{243}$.
# d. $a_0=1>0$ et $0
#
# In[ ]:
from sympy import Rational
# Cet import permet d'utiliser la fonction Rational pour effectuer des calculs de fractions sous forme exacte
def a(n):
"Fonction qui calcule la longueur des côtés du polygone P_n"
return Rational(1,3**n)
# In[ ]:
# Effectuer ici la saisie pour vérifier le résultat de la question 2.2.c.
a(5)
# 2.3. $\;$a. Exprimer $p_n$ en fonction de $c_n$ et $a_n$.
# $\quad\;\;$ b. Déterminer la valeur exacte du périmètre de $P_5$.
# $\quad\;\;$ c. Écrire une fonction Python p d'argument n permettant le calcul de la valeur exacte de $p_n$
# $\quad\quad\;$ (on effectuera des appels aux fonctions précédentes avec les syntaxes c(n) et a(n)).
# $\quad\quad\;$ Effectuer la saisie nécessaire pour vérifier le résultat de la question 2.3.b.
#
#
#
# a. $p_n=c_n\times a_n$.
# b. Le périmètre de $P_5$ est $\displaystyle p_5=c_5\times a_5=\frac{3\times4^5}{3^5}=\frac{4^5}{3^4}=\frac{1024}{81}$.
#
# In[ ]:
# Écrire ici la fonction p permettant le calcul de p(n) sous forme exacte
def p(n):
"Fonction qui calcule le périmètre du polygone P_n"
return a(n)*c(n)
# In[ ]:
# Effectuer ici la saisie pour vérifier le résultat de la question 2.3.b.
p(5)
#
# $\quad$ d. Exprimer $p_n$ en fonction de $n$. Justifier que la suite $(p_n)_{n\geq0}$ est géométrique.
# $\quad$ e. Déterminer $\displaystyle\lim\limits_{n \to +\infty}{p_n}$. Donner une interprétation géométrique de ce résultat.
#
#
#
# a. $\displaystyle p_n=c_n\times a_n=3\times4^n\times\frac{1}{3^n}=3\times \left( \frac{4}{3} \right)^n$.
# $\;\;\;$On obtient l'expression d'une suite géométrique de premier terme $p_0=3$ et de raison $\displaystyle q=\frac{4}{3}$.
# b. $p_0=3>0$ et $q=\frac{4}{3}>1$ donc $\displaystyle\lim\limits_{n \to +\infty}{a_n}=+\infty$.
# $\;\;\;$Le périmètre de $P_n$ peut être aussi grand qu'on le souhaite, pour $n$ "assez grand".
# $\;\;\;$Ainsi le flocon de Von Koch a un contour de longueur infinie.
#
# ## 3. Étude de l'aire du flocon de Von Koch
# 3.1. $\;$Démontrer qu'un triangle équilatéral de côté $a>0$ a pour aire $\displaystyle \frac{\sqrt{3}}{4}a^2$.
# 3.2. $\;$Donner la valeur de $A_0$.
# 3.3. $\;$a. Combien de triangles sont ajoutés lorsqu'on passe de la figure $P_0$ à $P_1$ ? Que vaut l'aire ajoutée ? En déduire la valeur de $A_1$.
# $\quad\;\;$ b. On fournit ci-dessous la fonction Python AireEqui d'argument a qui permet le calcul de la valeur exacte d'un triangle de côté $a$.
# $\quad\quad\;$ Effectuer la saisie nécessaire pour effectuer le calcul de $A_1$ de la question 3.3.a.
# $\quad\quad\;$ (on utilisera respectivement les syntaxes a(0) et a(1) pour les longueurs des côtés de $P_0$ et $P_1$)
#
#
#
# 3.1. La hauteur d'un triangle équilatéral de côté $a$ vaut $\displaystyle \frac{a\sqrt{3}}{2}$ (peut s'établir à l'aide du théorème de Pythagore ou à l'aide de résultats de trigonométrie).
# $\quad\;$ Ainsi l'aire d'un tel triangle vaut $\displaystyle \frac{a\times \frac{a\sqrt{3}}{2}}{2}=\frac{a^2\sqrt{3}}{4}.$
# 3.2. $\displaystyle A_0=\frac{a_0^2\sqrt{3}}{4}=\frac{\sqrt{3}}{4}$.
# 3.3.a. Lorsqu'on passe de la figure $P_0$ à $P_1$ on ajoute $c_0=3$ triangles équilatéraux de côté $\displaystyle a_1=\frac{1}{3}$.
# $\quad\;\;\;$ L'aire ajoutée vaut donc $\displaystyle 3\times \frac{ \left( \frac{1}{3} \right) ^2\sqrt{3}}{4}=\frac{\sqrt{3}}{12}.$
# $\quad\;\;\;$ On en déduit $\displaystyle A_1=A_0+\frac{\sqrt{3}}{12}=\frac{\sqrt{3}}{4}+\frac{\sqrt{3}}{12}=\frac{\sqrt{3}}{3}$.
#
# In[ ]:
from sympy import sqrt
# Cet import permet d'utiliser la fonction sqrt pour effectuer des calculs avec racines carrées sous forme exacte
def AireEqui(a):
"Fonction qui calcule l'aire d'un triangle équilatéral de côté a (sous forme exacte)"
return sqrt(3)*Rational(a**2,4)
# In[ ]:
# Effectuer ici la saisie pour retrouver le résultat de la question 3.3.a.
AireEqui(a(0))+3*AireEqui(a(1))
#
# 3.4. On effectue maintenant un raisonnement similaire à celui de la question 3.2. dans le cas général.
# $\quad\;\;$ a. On considère un entier $n>0$.
# $\quad\quad\;\;$ En raisonnant sur les aires ajoutées lorsqu'on passe de la figure $P_{n-1}$ à $P_n$, justifier que :
# $\quad\quad\;\;$ $\displaystyle A_n = A_{n-1}+c_{n-1}\times \frac{\sqrt{3}}{4}{a_n}^2$
# $\quad\;\;$ b. On fournit ci-dessous la fonction Python A d'argument n permettant le calcul de $A_n$..
# $\quad\quad\;\;$ Exécuter les saisies proposées pour obtenir la valeur exacte de $A_1$ et sa valeur décimale approchée.
# $\quad\quad\;\;$ Vérifier la cohérence avec les résultats des questions 3.3.a. et 3.3.b.
#
#
#
# 3.4.a. Lorsqu'on passe de la figure $P_{n-1}$ à $P_n$ on ajoute $c_{n-1}$ triangles équilatéraux de côté $\displaystyle a_n$, d'où le résultat.
#
# In[ ]:
def A(n):
"fonction qui calcule l'aire du polygone P_n (sous forme exacte)"
if n==0: return AireEqui(1)
return A(n-1)+c(n-1)*sqrt(3)*Rational(a(n)**2,4)
# In[ ]:
A(1)
# In[ ]:
A(1).evalf()
#
# $\quad\;\;$ d. Effectuer des saisies pour évaluer $A_5$, $A_{10}$ et $A_{100}$.
# $\quad\quad\;\;$ Que peut-on conjecturer pour la suite $(A_n)_{n\geq0}$ ?
# $\quad\quad\;\;$ Interpréter géométriquement ce résultat.
#
#
#
# Il semble que la suite $(A_n)_{n\geq0}$ soit majorée et admette une limite finie.
# Ainsi, le flocon de Von Koch a une aire finie, bien que délimité par un contour de longueur infini.
#
# In[ ]:
# Utiliser ces zones pour les saisies demandées
A(5)
# In[ ]:
A(5).evalf()
# In[ ]:
A(10)
# In[ ]:
A(10).evalf()
# In[ ]:
A(100)
# In[ ]:
A(100).evalf()
# ![Von_Koch](https://raw.githubusercontent.com/PythonLycee/PyLyc/master/img/Von_Koch.png)
#
#