Présentation de l'algorithme :

Cet algorithme permet de tracer une courbe de Von Koch (flocon) entre les points (0 ; 0) et (1 ; 1). L'utilisateur choisit le nombre d'itérations (au regard du temps d'exécution, il est conseillé de choisir une dizaine d'itérations maximum) et l'algorithme calcule les coordonnées de tous les points de la courbe (ligne polygonale) puis la trace.

Tester l'algorithme :


(cliquer sur le bouton ci-dessus pour lancer ou relancer l'exécution de l'algorithme)

Résultats :

Code de l'algorithme :
1     VARIABLES
2       LX_NEW EST_DU_TYPE LISTE
3       LY_NEW EST_DU_TYPE LISTE
4       LX_CURRENT EST_DU_TYPE LISTE
5       LY_CURRENT EST_DU_TYPE LISTE
6       N EST_DU_TYPE NOMBRE
7       i EST_DU_TYPE NOMBRE
8       j EST_DU_TYPE NOMBRE
9       k EST_DU_TYPE NOMBRE
10    DEBUT_ALGORITHME
11      //Nombre d'itérations
12      AFFICHER "Veuillez saisir le nombre d'itérations souhaitées : "
13      LIRE N
14      AFFICHER N
15      //Initialisation des listes LX_NEW et LY_NEW
16      LX_NEW[0] PREND_LA_VALEUR 0
17      LY_NEW[0] PREND_LA_VALEUR 0
18      LX_NEW[1] PREND_LA_VALEUR 1
19      LY_NEW[1] PREND_LA_VALEUR 1
20      //Calculs des coordonnées des points
21      POUR i ALLANT_DE 0 A N-1
22        DEBUT_POUR
23        k PREND_LA_VALEUR pow(4,i)
24        //Les listes LX_CURRENT et LY_CURRENT reçoivent les valeurs de LX_NEW et LY_NEW
25        POUR j ALLANT_DE 0 A k
26          DEBUT_POUR
27          LX_CURRENT[j] PREND_LA_VALEUR LX_NEW[j]
28          LY_CURRENT[j] PREND_LA_VALEUR LY_NEW[j]
29          FIN_POUR
30        //Calculs des nouvelles listes LX_NEW et LY_NEW
31        POUR j ALLANT_DE 0 A pow(4,i)-1
32          DEBUT_POUR
33          LX_NEW[4*j] PREND_LA_VALEUR LX_CURRENT[j]
34          LY_NEW[4*j] PREND_LA_VALEUR LY_CURRENT[j]
35          LX_NEW[4*j+1] PREND_LA_VALEUR (2*LX_CURRENT[j]+LX_CURRENT[j+1])/3
36          LY_NEW[4*j+1] PREND_LA_VALEUR (2*LY_CURRENT[j]+LY_CURRENT[j+1])/3
37          LX_NEW[4*j+2] PREND_LA_VALEUR (3*LX_CURRENT[j]+3*LX_CURRENT[j+1]+sqrt(3)*LY_CURRENT[j]-sqrt(3)*LY_CURRENT[j+1])/6
38          LY_NEW[4*j+2] PREND_LA_VALEUR (3*LY_CURRENT[j]+3*LY_CURRENT[j+1]-sqrt(3)*LX_CURRENT[j]+sqrt(3)*LX_CURRENT[j+1])/6
39          LX_NEW[4*j+3] PREND_LA_VALEUR (LX_CURRENT[j]+2*LX_CURRENT[j+1])/3
40          LY_NEW[4*j+3] PREND_LA_VALEUR (LY_CURRENT[j]+2*LY_CURRENT[j+1])/3
41          FIN_POUR
42        //Le dernier point ...
43        LX_NEW[4*k] PREND_LA_VALEUR LX_CURRENT[k]
44        LY_NEW[4*k] PREND_LA_VALEUR LY_CURRENT[k]
45        FIN_POUR
46      //Tracer de la courbe
47      k PREND_LA_VALEUR pow(4,i)-1
48      POUR i ALLANT_DE 0 A k
49        DEBUT_POUR
50        TRACER_SEGMENT (LX_NEW[i],LY_NEW[i])->(LX_NEW[i+1],LY_NEW[i+1])
51        FIN_POUR
52    FIN_ALGORITHME