Paver en suivant une spirale

pavage spirale

Dans cet article, on va voir comment construire un pavage dynamique s'étendant progressivement le long d'une "spirale" (au sens commun du terme).


En ce qui concerne la spirale, il s'agira d'une spirale avec un espacement constant entre les spires (autrement dit une "spirale" de nature archimédienne, la spirale d'Archimède proprement dite étant définie par son équation polaire $r=a+b.\theta$).

Une spirale possible est définie par le script suivant :

01 script pavage

Ce script construit la spirale suivante :

02 spirale

voir pavage-01-courbe.zir en pj

On va ensuite "greffer" différentes tuiles ayant une forme de quadrilatère sur ce parcours. Pour les tuiles triangulaires, on utilisera une autres spirale.

1) Pavage avec des carrés

A) Avec CaRMetal

On crée un script dans l'intention de créer une macro "carré".

03 pour macro

Après avoir lancé ce script, on peut créer le carré (polygone), puis la macro "carré", d'initial A et de final le carré (polygone).

04 macro

Puis on modifie légèrement le script de la spirale en ajoutant un appel à la macro que l'on vient de créer.

05 script

On obtient un pavage qui se développe le long d'une spirale.

06 pavage

voir pavage-02-carrés.zir en pj

Pour obtenir une version dynamique en deux points A et B, on utilise  une macro carré2 avec deux initiaux A et B:

07 macro

On modifie le script ainsi :

08 script

On obtient alors un pavage dynamique en A et B.

09 pavage

 voir pavage-03-carrés-dyn.zir en pj

On peut aussi obtenir l'effet de "déplacement" en spirale sans utiliser la tortue, mais en utilisant des variables dont c'est le contenu lui-même qui, en quelque sorte, "décrit la spirale".
Comme on le verra plus loin, l'intérêt dans DGPad sera de pouvoir mobiliser la tortue pour tracer la tuile, sans devoir "raccorder" deux types de parcours tortue (ce qui demanderait à certains moments du script d'enregistrer la position et l'orientation de la tortue).

On commence par créer un carré ABCD, puis on écrit le script suivant :

script carres sans tortue

On obtient le même pavage dynamique que précédemment.

voir pavage-03b-carrés-dyn-sansTortue.zir en pj

B) Avec DGPad

La méthode précédente est transposable à DGPad. A la place de transformations, on utilise des opérateurs affines.

On va créer une version dynamique en n (nombre de tuiles posées du pavage). On commence par créer un curseur n.
Puis on crée un carré ABCD.
Dans l'onglet tortue des propriétés du point A, on écrit alors le script suivant :

 script dgp 01

On obtient la figure dynamique suivante :

2) Pavage avec des losanges

A) Avec CaRMetal

On crée une macro appelée "losange", d'initiaux A, B, C et de finaux les triangles (polygones) ABC et BCD.

10 macro

On écrit le script suivant :

11 script

On obtient ce pavage dynamique

12 pavage

voir pavage-04-losanges.zir en pj


On peut aussi paver à partir des  triangles (que l'on peut choisir isocèles).
Comme pour le pavage par des carrés, on choisit une méthode sans tortue, qui peut être transposée facilement à DGPad.

On pave successivement les différentes couronnes en partant du centre, chaque couronne étant pavée en répétant 6 fois le pavage d'une coque de bateau renversée.

toile 02

En pratique, on construit trois points libres A, B C.
Puis on écrit le script suivant :

script triangles sans tortue

On obtient ce pavage, dynamique en A, B, C.

paavge triangles sans tortue

voir pavage-04-triangles-dyn-sansTortue.zir zn p-j

B) Avec DGPad

On transpose le code.

script triangles dgp

On obtient la figure dynamqiue suivante :


3) Pavage avec des quadrilatères

A) Avec CaRMetal

Première méthode : en adaptant le pavage périodique par des tuiles deux fois plus grosses

Remarque : "esthétiquement", on pourra préférer la deuxième méthode.

On crée quatre points libres A, B, C, D.
On construit le milieu E de [BC].
On construit le symétrique F de D par rapport à E.
On construit le symétrique G de A par rapport à E.

13 fig init

On n'a pas besoin de macro ici car les quatre points A, B, C, D sont libres.
On peut utiliser directement la CaRCommande Polygone dans le script.
Le pavage est invariant par rapport aux vecteurs $\vec{AC}$ et $\vec{BD}$.

14 script

On obtient ce pavage dynamique :

15 pavage

voir pavage-05-quadrilatères.zir en pj

Dans le pavage ci-dessus, le pavé est constitué de deux quadrilatères symétriques par rapport à un point, et on construit toujours le quadrilatère bleu avant le quadrilatère rouge, ce qui convient (esthétiquement) quand on se déplace vers l'est ou vers le nord.
On peut donner une variante du script qui tient compte de ce facteur.

16 script

voir pavage-06-quadrilatères-dir.zir en pj

Pour finir, on peut donner une figure avec un pavage dont le nombre de pavés est pilotable par un curseur.
Théoriquement, dans CaRMetal on pourrait le faire avec un script action qui supprimerait tous les pavés pour ensuite en recréer un certain nombre selon la valeur du curseur.
Mais en pratique, cette méthode ne donnerait pas une figure asez réactive.
On préfère donc un système de masquage conditionnel qui évite une suppression et une création d'objets qui serait déclenchée par une action sur le curseur.

Remarque : il y a un petit problème de traduction avec la CaRCommande Conditionnel. On doit laisser "hidden" en anglais.
(Normalement, "caché" devrait être traduit en "hiddden"par le compilateur, mais ce n'est pas le cas dans la version 4.2.8 de CaRMetal = c'est un bug du traducteur intégré dans le compilateur)

voir pavage-07-quadrilatères-dir-masque.zir en pj

DEUXIEME méthode : en adaptant le pavage périodique par des tuiles deux fois plus grosses

On peut aussi procéder comme précédemment sans tortue. Le déplacement se fait alors par symétrie centrale.

Script de base :
script base

voir pavage-08-quadrilatères-sym.zir en pj

Script complet avec un curseur n et un système de masquage :

script complet

voir pavage-09-quadrilatères-sym-bicolore.zir en pj

B) Avec DGPad

On transpose le script (tortue du point A) et on obtient cette figure dynamique :

Pièces jointes :

pavages.zip [zip de 9 figures CaRMetal]