La spirale de Fibonacci

par Hilaire Fernandes

Email: hilaire@drgeo.eu

15 février 2016

Résumé

La spirale de Fibonacci s'appuie sur la suite éponyme pour la construction d'une courbe en forme de spirale, cette spirale et ses variantes apparaissent dans des constructions du vivant. Dans cet article nous proposons une construction calculée d'une forme interactive

1. La courbe résultante est déformable par l'utilisateur tout en respectant ses propriétés intrinsèques.

1 de cette courbe, à l'aide de Dr. Geo, logiciel de géométrie interactive et de programmation. Nous relaterons ensuite les liens à faire avec les programmes d'enseignement secondaire de mathématiques.

1Introduction

Leonardo Fibonacci, marchand, comptable, mathématicien italien du XIIIe siècle, est connu pour sa suite de Fibonacci dont les termes sont appelés nombres de Fibonacci. Ses contributions mathématiques vont bien au delà de cette suite, somme toute assez anecdotique en regard de l'ensemble de son œuvre. Il a introduit en Europe les chiffres arabes et son système positionnel de construction des nombres, il a écrit plusieurs traités de mathématiques et comptabilité.

La suite de Fibonacci est définie par deux termes initiaux et une relation de récurrence :

f0=1,f1=1,fn+1=fn+fn-1

Les premiers termes de la suite sont donc 1, 1, 2, 3, 5, 8.

La spirale de Fibonacci se construit en considérant les carrés de côté les termes de la suite, à l'intérieur de ces carrés sont inscrits des arcs de cercle – portions de la spirale – dont le centre est un des sommets du carré et le rayon la longueur du carré :

Figure 1. Spirale de Fibonacci construite à partir des 6 premiers termes de la suite.

La logique de la construction est aisée à comprendre : à l'image des termes de la suite, un carré se déduit de ces deux prédécesseurs. Le challenge est de retranscrire cette logique en un processus itératif programmable dans un logiciel de géométrie interactive. La suite de l'article s'attache à en présenter les grandes lignes.

2L'amorce

Puisque la suite de Fibonacci voit ses deux premiers termes définis, intéressons nous aux deux premiers carrés et leur arc de cercle :

  1. Nous plaçons deux points A(1 ; 0) et B(-1 ; 0), puis nous construisons leur milieu M(0 ; 0).

  2. Pour le premier carré, avec f1=1, M est un sommet, c'est également le centre de l'arc correspondant. Le point A est considéré comme son origine. Pour déterminer l'arc il nous suffit de construire son extrémité E=r(A) par la rotation r(M,-90𝅝). Le quatrième sommet du carré est construit par la translation de vecteur MA.

    Figure 2. Construction des deux arcs initiaux de la spirale

  3. Pour le deuxième carré, avec f2=1, M est toujours le centre de son arc inscrit. Le point E devient son origine. L'extrémité B de l'arc se construit par la même rotation r de E, B=r(E). Le quatrième sommet du carré est construit par la translation de vecteur ME.

Dégageons les étapes de ces constructions :

Rotation

Elle construit l'extrémité de l'arc connaissant son origine. Son centre est le centre de l'arc, l'angle -90 degrés.

Translation

Elle construit le quatrième sommet du carré. Son origine est le centre de l'arc, son extrémité l'origine de l'arc.

Transition

L'extrémité du premier arc devient l'origine du suivant, le centre est resté inchangé.

Nous traduisons cette description en un code Dr. Geo :

|canvas shape alpha a b m s|
canvas := DrGeoCanvas new fullscreen.
alpha := canvas freeValue: -90 degreesToRadians.
shape := [:c :o :f| | e p |
   "c,o,e: center, origin and extremity of the arc"
   e := canvas rotate: o center: c angle: alpha.
   canvas arcCenter: c from: o to: e.
   p := canvas translate: e vector: (canvas vector: c to: o).
   (canvas polygon: { c. o. p. e }) name: f.
   e].
a := canvas point: 1@0.
b := canvas point: -1 @0.
m := canvas middleOf: a and: b.
s := shape value: m value: a value: 1.
shape value: m value: s value: 1.

Quelques commentaires :

A l'image des deux premiers termes de la suite, ces deux premières portions de la spirale sont particulières : de mêmes centre et rayon. Dans la section suivante, nous généralisons le procédé au reste de la spirale.

3Encore une transformation

Le troisième brin de la spirale est de rayon 2, il est donc clair qu'un changement d'échelle s'opère, ce qui fait pressentir l'utilisation d'une homothétie :

  1. Pour ce brin de la spirale, f3=2, nous avons besoin de son centre et de son origine : ce sont les points A et B. Notre bloc de code shape construit l'arc et le carré associé.

  2. Le point E retourné par le bloc shape est l'origine de l'arc suivant, f4=3.

  3. Le rayon de cet arc passera de 2 à 3 par rapport au précédent, soit une dilatation de 32. Le centre de cet arc est donc h(A) par l'homothétie h(E,32).

Figure 3. Construction des brins pour f3etf4.

Dégageons les étapes :

Construction

Le brin de spirale est construit à partir de son centre A et origine B connus, en utilisant la méthode vue précédemment.

Arc suivant

La construction ci-dessus donne l'origine de l'arc suivant E. Son centre est déterminé par l'image du centre précédent A par l'homothétie de centre E, origine de l'arc, et de rapport f4f3. L'étape de construction est alors répétée pour l'arc suivant et ainsi de suite.

Nous traduisons cette description en un bloc de code fibo récursif :

fibo := [ :f :o :c :k | | e f1 f2 f3|
"f1: term Fn, f2: term Fn+1, o & c: origin and center of the arc
e: extremity of the arc/orgin of the next arc"
   f1 := f first.
   f2 := f second.
   f3 := f1 + f2.
   e := shape value: c value: o value: f2. 
   c := canvas scale: c center: e factor: f3 / f2.
   k > 0 ifTrue: [ 
      fibo value: {f2. f3} value: e value: c value: k - 1 ]].

Quelques commentaires nécessaires :

Le code complet, proposé en annexe, est assez court. Il est constitué des deux extraits présentés précédemment. Cet exemple illustre bien toute la puissance de la programmation ; avec une API

2. Interface de programmation

2 appropriée de fonctions géométriques nous nous concentrons directement sur le problème, et un code concis permet alors de décrire le problème posé de la construction.

L'autre intérêt est de construire un grand nombre d'objets, parfois des milliers. Enfin la figure obtenue se doit d'être déformable interactivement : déplacer le point initial A déforme l'ensemble de la spirale.

Figure 4. Une spirale déformable interactivement

4Conclusion

Alors pourquoi programmer des figures interactives avec des élèves du secondaire ? Plusieurs thèmes sont abordés :

Des élèves du secondaire II sont mathématiquement outillés pour décortiquer cette spirale. La récursivité du bloc de code renvoie à la récursivité de la suite de Fibonacci et celle de la construction de la spirale. La partie programmation demandera une connaissance préalable, à acquérir avec des problèmes plus simples. Le langage et l'environnement Smalltalk de Dr. Geo furent conçus pour des enfants, certes des enfants des années '70 pour qui l'ordinateur avait une dimension magique et attractive, mais la puissance démultiplicatrice de la programmation reste un facteur fort d'intérêt.

Annexe A

|canvas shape alfa fibo a b m s|
canvas := DrGeoCanvas new fullscreen.
alfa := (canvas freeValue: -90 degreesToRadians) hide.
shape := [:c :o :f| | e p |
   e := (canvas rotate: o center: c angle: alfa) hide.
   (canvas arcCenter: c from: o to: e) large.
   p := canvas translate: e vector: (canvas vector: c to: o) hide.
   (canvas polygon: { c. o. p hide. e }) name: f.
   e].
fibo := [ ].
fibo := [ :f :o :c :k | | e f1 f2 f3|
"f1: term Fn-1, f2: term Fn, o & c: origin and center of spiral arm
e: extremity of the spiral arm"
   f1 := f first.
   f2 := f second.
   f3 := f1 + f2.
   e := shape value: c value: o value: f2. 
   c := (canvas scale: c center: e factor: f3 / f2) hide.
   k > 0 ifTrue: [ 
      fibo value: {f2. f3} value: e value: c value: k - 1 ]].
a := canvas point: 1@0.
b := canvas point: -1 @0.
m := (canvas middleOf: a and: b) hide.
s := shape value: m value: a value: 1.
shape value: m value: s value: 1.
fibo value: {1. 2} value: b value: a value: 10