Segments et javascript

La grille d'Hermann

Proposez un code de la figure ci-dessus dans lequel les répétitions seront traitées à l'aide de javascript.

Une solution en créant le texte du code svg avec js

Une solution en créant les éléments du DOM avec js

Un immeuble aux lignes ondulantes ?

Utilisez javascript pour reproduire l'image suivante.

Une solution en créant le texte du code svg avec js

Un exemple de code. Vous pouvez bien sûr le modifier pour paramétrer l'ensemble.

Une solution en créant les éléments du DOM avec js

La courbe du dragon

Construction de chaînes de caractères

On pose :

  • A0 = "h"
  • B0 = "g"
  • C0 = "b"
  • D0 = "d".

On construit ensuite les chaînes suivantes :

  • A1 = A0B0, c'est à dire A1 = "hg"
  • B1 = C0B0, c'est à dire B1 = "bg"
  • C1 = C0D0, c'est à dire C1 = "bd"
  • D1 = A0D0, c'est à dire D1 = "hd"

Et on recommence :

  • A2 = A1B1, c'est à dire A2 = "hgbg"
  • B2 = C1B1, c'est à dire B2 = "bdbg"
  • C2 = C1D1, c'est à dire C2 = "bdhd"
  • D2 = A1D1, c'est à dire D2 = "hghd"

Et ainsi de suite pour tout entier naturel non nul n :

  • An = An-1Bn-1
  • Bn = Cn-1Bn-1
  • Cn = Cn-1Dn-1
  • Dn = An-1Dn-1

Définir une fonction js prenant en entrée un entier naturel n et donnant en sortie An.

Interprétation graphique

Pour un entier naturel n donné, on interprète la chaîne An graphiquement comme suit :

On part du point (0,0) (point actuel). L'orientation des axes est celle en vigueur avec le svg.

  • Si le caractère suivant de la chaîne est "h", on trace un segment en faisant un pas vers le haut (c'est à dire en reliant le point actuel à son image par la translation de vecteur de coordonnées (0,-1)).
  • Si le caractère suivant de la chaîne est "b", on trace un segment en faisant un pas vers le bas (c'est à dire en reliant le point actuel à son image par la translation de vecteur de coordonnées (0,1)).
  • Si le caractère suivant de la chaîne est "g", on trace un segment en faisant un pas vers la gauche (c'est à dire en reliant le point actuel à son image par la translation de vecteur de coordonnées (-1,0)).
  • Si le caractère suivant de la chaîne est "d", on trace un segment en faisant un pas vers la droite (c'est à dire en reliant le point actuel à son image par la translation de vecteur de coordonnées (1,0)).
  • Dans tous les cas, le point extrémité du segment tracé devient le nouveau point actuel et on recommence la démarche avec la lettre suivante.

Exemple : pour la chaîne "bdbg", on trace le segment [(0,0), (0,1)] puis le segment [ (0,1), (1,1)], suivi du segment [(1,1), (1,2) du segment [(1,2), (0,2)].
(0;0) (0;1) (1;1) (1;2) (0;2)

  1. Écrire une fonction qui détermine les valeurs xmin, xmax, ymin, ymax, valeurs extrêmes des coordonnées des points obtenus lors de l'interprétation graphique de la chaîne An.
  2. Construire une figure svg (construite à l'aide de javascript) représentant la chaîne An.

Chaîne

Production de chaînes de caractères

Graphique (en créant le texte du code via js)

Ne testez pas au-delà de n = 13 ou 14, les calculs sont longs. A partir de n = 12, on a déjà une bonne idée de ce qu'est la courbe du dragon. Vous pourrez chercher sur le web des renseignements complémentaires sur cette "dragon curve".

Graphique (en créant les éléments dans le DOM via js)

Remarque: les éléments html créés ne disparaissent pas (dans le code écrit ci-dessous) lorsqu'on relance la fonction, il y a donc une superposition de dessins d'appels distincts. Il faudrait ajouter des instructions de destruction d'éléments html si l'on veut remédier à ce problème.

Perspective

Recréez l'image ci-dessous. On utilisera javascript pour les tâches répétitives.

Solution en créant le texte du code svg avec js

Solution en créant les éléments du DOM avec js