les dessins numériques de tTh

J'ai toujours aimé dessiner avec des bouts de programme que je donne à manger à quasiment tous les ordinateurs que j'ai eu. Mais les aléas de la vie m'ont un peu détourné de cette saine activité ces dernières années (modulo la famille Hexacone, mais ça n'est pas vraiment du dessin) alors, je viens de décider (April fool day, 2026) de m'y remettre mais en utilisant des technologies issues du siècle dernier.

Commençons par le logiciel de traçage, genplot2, qui va convertir des ordres simples de tracé en image bit-map à 8 couleurs. Ces ordres simples sont, en fait, très simples. Ils sont exprimés par trois champs numériques, les deux premiers sont les coordonnées en X/Y, et le troisième est à double usage {{ si .eq. à -1, alors déplace la plume, sinon trace un trait depuis la position précédente }}. Il suffit d'enregistrer ces ordres de tracé dans un fichier qui aura plus ou moins cet aspect :

    -4.99992    -3.68462   -1
    -4.98813    -3.40397    2
    -4.99992    -3.68462   -1
    -4.82542    -3.46451    2
    -4.99992    -3.68462   -1
    -4.72937    -3.60911    2

Spirale de type 1

En graphisme (numérique ou papier/crayon), j'ai parfois été attiré par le thème de la spirale, telle qu'on la rencontre dans le milieu naturel ou dans les abstractions mathématiques ou même dans les délires d'architectes. J'ai même tenté d'en faire une interprétation avec POVray, mais sans pousser l'idée jusqu'au bout.

made with fortran 90
made with fortran 90

Étoile, première tentative.

Regardons maintenant l'utilisation du tout nouveau logiciel sorti récemment du laboratoire de techno-futilité des Bourtoulots. C'est du Fortran moderne, parce que c'est quand même assez cool, voyez par vous-même avant de raler.

program etoiles
  use genplotting
  implicit none
  call genp_init (0, 'etoiles.scratch')
  call do_etoiles (1337)
  call genp_end(0)
end program
made with fortran 90

Étoile, deuxième tentative.

Nous pouvons aussi dessiner plein d'étoiles avec les sept couleurs disponibles. Nous avons d'abord une procédure qui dessine une étoile à un emplacement précis :

subroutine plot_a_star(at_x, at_y, sz, color)
  real, intent(in)        :: at_x, at_y, sz
  integer, intent(in)     :: color
  integer                 :: idx
  real                    :: rad, xv, yv
  call genp_set_offset(at_x, at_y)
  do idx=0, 360, 36
    rad = 0.042 + (real(idx) * (3.14159 / 180))
    xv = sz * sin(rad)    ;    yv = sz * cos(rad)
    call genp_move(0.0, 0.0)
    call genp_draw(xv, yv, color)
  enddo
end subroutine

Et ensuite une boucle avec du random dedans :

  do idx=0, nbstar
    px = (rand(0) * 10.00) - 5.00
    py = (rand(0) * 10.00) - 5.00
    sz = (rand(0) *  0.16) + 0.19
    color = 1 + mod(idx, 7)
    call plot_a_star(px, py, sz, color)
  end do
made with fortran 90

Surface perturbante.

real function displacement(x, y, a)
  real, intent(in)        :: x, y
  integer, intent(in)     :: a
  displacement = cos(((5.8+x+y)*(y+x))/real(a))
end function

Là aussi, je pense qu'il est possible de construire un générateur de surfaces perturbantes assez puissant grâce à un gazillion de paramètres et pouvant générer de sonptueuses gif89a.

Maintenant, il reste à définir ce que peut bien être une surface perturbante (je n'en ai moi-même pas la moindre idée), mais elle doit probablement être caractérisée par sa géométrie, ses constantes physiques, sa connectivité axiale-transverse et le nombre de co-facteurs humainement gérables par un néo-rural.

made with fortran 90

Random walking

En fait, comme je ne sais pas trop dans quelle direction va partir ce projet dessinant, j'ai vite bricolé un programme qui tente de simuler la démarche d'un ivrogne cherchant ses clefs autour d'un réverbère, parce qu'il n'y a que là qu'il y a de la lumière.

  px = 0.0        ;       py = 0.0
  call genp_move(px, py)
  do idx=1, nbre
    px2 = px + rand(0) - 0.50
    py2 = py + rand(0) - 0.50
    call genp_line(px, py, px2, py2, col)
    px = px2  ;  py = py2
  enddo

C'est en errant dans les méandres du dessin numérique en Fortran moderne que l'on augmente le karma de la sérénité dont nous avons tous bien besoin en ces temps troublés. C'est aussi un précieux champ d'expérimentation d'où l'on peut extraire de précieuses données statistiques inutiles mais néanmoins utilisables pour créer d'autres #UselessGraphic multi-valués..

made with fortran 90

Courbe de Lissajous

this is the wip of the day. Mais c'est un bon début pour faire une animation trop psychédélique.

made with fortran 90

La manie des carrés

this is the wip of the day.

made with fortran 90

Marche aléatoire, la suite

Après une première tentative déja bien plaisante, mais confectionnée à la va-vite et un soupçon de rache, Je me suis replongé dans l'analyse psychomathique du process.

Et une erreur m'est vite apparue évidente : en aucun cas, notre chercheur de clef n'est capable de faire un changement de direction aussi brutal qu'un quasi demi-tour sans se vautrer sur le tarmac. J'ai donc défini de façon plus formelle ce que peut être un pochtron numérique :

  type walker
    real    :: xloc, yloc      ! where I am ?
    real    :: heading         ! direction in degrees
    real    :: powa            ! correlated to nothing
  end type walker

Et maintenant, à chaque itération, son orientation, la direction dans laquelle il hésite à marcher est modifiée par un random ddd, comme vous pouvez le constater dans la procédure move_the_walker de notre programme. Lequel ne demande qu'à être amélioré lors du prochain gloumiam aux Bourtoulots...