Je me suis dit que c'était tout-à-fait dans les corde de mon brave MO5. Après avoir laissé de coté le sujet (pleins d'autres projets), non sans avoir griffoné ça et là quelques bouts de l'algorithme, j'ai fini par dégager du temps hier, jusqu'au bout de la nuit. J'ai sorti le MO5, le SDDrive, avec une image disque dédiée, et j'ai tant bien que mal écrit et dépanné mon programme comme à l'époque...
Mode d'emploi
Le programme démarre avec un préréglage permettant d'obtenir un flocon de Koch. Pour changer, aller dans l'écran de saisie (option 2).
On doit saisir la graine, l'angle de base, et les différentes règles de substitution nécessaires (de A à Z).
La syntaxe des règles et de la graine (si ça peut aider, imaginer qu'au final on obtient un programme suivi par la proverbiale tortue du LOGO) :
- Toute lettre (de A à Z, sans distinction de casse) désigne une règle de substitution. Lors de la phase de dessin, ce sera transformé en un tracé de une unité de longueur.
- '+' pour "tourner vers la droite", '-' pour "tourner vers la gauche", l'ampleur de la rotation égale l'angle de base.
- '(' pour "commencer une sous-branche", ')' pour "finir la sous-branche et revenir à la branche". On peut aller jusqu'à 100 niveaux d'embranchement.
(Pour que je me souvienne un peu de comment que j'ai fait pour que ça marchouille)
Le programme en lui même n'est pas trop compliqué -je crois-.
Le mécanisme le plus sophistiqué est la gestion de la mémoire, je réserve le plus de tranches de 4 Kio possible, et j'utilise cet espace comme un tampon mémoire circulaire pour stocker l'étape de génération n et n+1.
Les règles et la graines sont utilisées en convertissant les caractères en codes opérationnels, (code 128 + i pour désigner la règle i, code 1 à 4 pour tourner et gérer les branches)
Pour dessiner, on parcours une première fois la séquence finale sans facteur d'échelle, pour obtenir la boîte englobante du dessin. On calcule les facteurs d'échelle x et y et la translation pour que le dessin tienne dans un carré de 180 par 180 calé en bas de l'écran et centré.
L'angle de cap 0 pointe vers le nord, et on augmente en tournant vers la droite (dans le sens des aiguilles d'une montre conventionnelle), on a précalculé une table des vecteurs unitaires (de longueur 1) pour chaque angle de cap de 0 à 359.
Le plan de route
(si j'ai du temps un de ces quatres matins... dans quelques mois ou années)
- Pour le moment, j'utilise le SDDrive sans extension mémoire et c'est donc un peu serré, je n'ai que 4Kio à consacrer au tampon mémoire. Ça tombe bien, j'ai un kit pour une extension mémoire de 512Ko à monter -et à domestiquer- (j'ai aussi une extension mémoire 64Ko, mais j'obtiens un plantage au démarrage -ecran façon zebre orange qui flashouille par endroits-, j'imagine que cette extension est défectueuse, et/ou que je n'ai pas bien lu tout sur le SDDrive)
- Une version pour mon TO8 ? J'imagine que le programme sauvé ASCII est utilisable directement, mais je n'ai pas vérifié.
- Pouvoir sauvegarder les images genérées.
- Ergonomie.
Version 0
Une capture montrant en temps réel (soyez patients), depuis la sélection de l'image disquette jusqu'au résultat final, la génération du flocon de Koch prédéfini en 2 itérations. Un exemple montrant les branches, en remplaçant la règle F préchargée par celle-ci : F(-F)F Un exemple plus végétal, montré dans l'article d'origine (angle : 22°, graine : F, règle F : FF+(+F-F-F)-(-F+F+F), en 3 itérations ) Téléchargements
v0.0.2 - 14 octobre 2023
- Gestion correcte de la mémoire, le tampon mémoire passe à 6 Kio
- Dessin avec un facteur d'échelle uniforme, la zone de dessin passe à 300×180 pixels
- Un correctif (bancal) pour le dépassement mémoire
- Lorsque la capacité mémoire est dépassée, la génération s'arrête et on passe au dessin, au lieu de tout stopper.