<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JSL, ci-joint , modifié un peu pour faire cette vidéo.Meilleur vu.Destiné au plein écran.Inspiré par Économiseur d'écran de substrat .
https://www.youtube.com/watch?v=WP1moAuUKXo
c'est une image typique du JSL ci-joint.

Merci pour la réponse rapide. J'ai eu beaucoup de plaisir à générer des images avec différentes combinaisons de courbures et de couleurs.
Merci! Dans mon enthousiasme à l’idée de poster, on dirait que j’ai oublié d’écrire des commentaires !
Ce programme utilise une liste JSL nommée stack (qui porte un mauvais nom, mais ignorez-le.) Stack contient une liste de routes actives. Chaque élément de la pile est une liste de
- la dernière ligne,col emplacement d'un pixel dans la route
- le dernier angle vers lequel la route se dirigeait
- l'angle delta que la route tourne à mesure que chaque pixel est dessiné
Il y a aussi un veclen, qui, je crois, est toujours de 0,7, proche de 0,707.
La boucle du pilote, vers la fin, appelle la fonction doodle N fois avec des index sur les N éléments les plus en avant de la pile. Doodle dessine un pixel pour chacune de ces routes, il semble donc que N routes soient construites en même temps. Regardez le code au début du doodle et vous verrez le code qui implémente le tour :
1 {row, col, angle, deltaangle, veclen} = stack[istack];
2 {newrow, newcol, angle} = Eval List( {row + veclen * Sin( angle ), col + veclen * Cos( angle ), angle + deltaangle} );
3 If( newrow >= 1 & newrow <= rowsiz & newcol >= 1 & newcol <= colsiz,
4 stack[istack] = Eval List( {newrow, newcol, angle, deltaangle, veclen} );La ligne 1 saisit l'état de la nième route (stack). La ligne 2 calcule une ligne et un col pour le pixel suivant ET un nouvel angle (pour la prochaine fois.) La ligne 3 teste si la ligne et le col sont toujours à l'écran, et si c'est le cas, la ligne 4 met à jour les informations sur la route dans la pile.
Si vous suivez toujours la source, vous verrez un pixel noir défini sur la ligne, la colonne ou, s'il est hors de l'écran, vous verrez l'élément de pile supprimé... ce qui créera une nouvelle route, plus bas dans la pile, commencez à dessiner la prochaine fois.
Vous verrez également du code qui génère de nouvelles routes à angle droit (en ajoutant +/- pi/2 à l'angle actuel), ainsi qu'un code qui pulvérise également le sable légèrement coloré à angle droit.
Le code qui engendre une nouvelle route
// new doodle at right angle
stack[N Items( stack ) + 1] = Eval List({newrow, newcol, angle + If( Random Integer( 0, 1 ), Pi() / 2, -Pi() / 2 ), Random Normal( 0, .0001 ), .7});est la réponse à votre question : la normale aléatoire génère un angle delta très proche de zéro, la plupart du temps. Augmentez la taille du .0001 et un plus grand nombre de lignes auront plus de courbure.
Merci de vous être interrogé sur le code et demandez à nouveau si les commentaires manquants posent un problème.
Super scénario ! Je ne vois pas où dans le code les lignes courbes sont générées. Existe-t-il un moyen de générer plus de courbes ?
Je suis nouveau sur JSL.
Merci.
Merci!Je pensais à un défileur construit avec des bitmaps transparents.
Wow Craige, vous venez de transformer JMP en économiseur d'écran. Et après -- grille-pain volant ?