Publié le :
Graphique CREATION_INTERNE

Générateur de Sapin de Noël IFS

Ce code est également disponible en : Deutsch English
En attente de validation
Le script utilise la procédure IML pour implémenter un système de fonctions itérées stochastiques discrètes. Il définit des matrices de transformation linéaire (L), des vecteurs de translation (B) et des probabilités (prob) pour chaque transformation. Le processus itératif calcule 100 000 points qui, une fois tracés, forment l'image d'un sapin de Noël. Les points générés sont ensuite stockés dans un jeu de données SAS© nommé 'IFS'. Enfin, PROC SGPLOT est utilisée pour afficher ces points sous forme de nuage de points, sans axes, pour créer une représentation visuelle du sapin.
Analyse des données

Type : CREATION_INTERNE


Les données (points x, y) sont générées entièrement au sein du bloc PROC IML par un processus itératif, puis stockées dans le dataset temporaire 'IFS'. Aucune donnée externe ou issue de SASHELP n'est utilisée pour la génération principale.

1 Bloc de code
PROC IML Data
Explication :
Ce bloc initialise les matrices de transformation linéaire (L), les vecteurs de translation (B) et les probabilités pour un système de fonctions itérées, spécifiquement configuré pour générer un sapin de Noël. Il effectue ensuite 100 000 itérations en utilisant la fonction `randgen` pour sélectionner aléatoirement une transformation. Chaque itération calcule un nouveau point basé sur le précédent. Les points générés (x, y) sont ensuite transcodés et stockés dans un jeu de données SAS temporaire nommé 'IFS', qui sera utilisé pour la visualisation.
Copié !
1PROC IML;
2/* For an explanation of how to construct an iterated function system in SAS, see
3 http://blogs.sas.com/content/iml/2012/12/12/iterated-function-systems-and-barnsleys-fern-in-sas/
4*/
5/* Each row is a 2x2 linear transformation */
6/* Christmas tree */
7L = {0.03 0 0 0.1,
8 0.85 0.00 0.00 0.85,
9 0.8 0.00 0.00 0.8,
10 0.2 -0.08 0.15 0.22,
11 -0.2 0.08 0.15 0.22,
12 0.25 -0.1 0.12 0.25,
13 -0.2 0.1 0.12 0.2};
14/* ... and each row is a translation vector */
15B = {0 0,
16 0 1.5,
17 0 1.5,
18 0 0.85,
19 0 0.85,
20 0 0.3,
21 0 0.4 };
22prob = { 0.02 0.6 0.1 0.07 0.07 0.07 0.07};
23L = L`; B = B`; /* For convenience, transpose the L and B matrices */
24
25/* Iterate the discrete stochastic map */
26N = 1e5; /* number of iterations */
27x = j(2,N); k = j(N,1);
28x[,1] = {0, 2}; /* initial point */
29call randgen(k, "Table", prob); /* values 1-7 */
30
31DO i = 2 to N;
32 x[,i] = shape(L[,k[i]], 2)*x[,i-1] + B[,k[i]]; /* iterate */
33END;
34
35/* Plot the iteration history */
36y = x`;
37create IFS from y[c={"x" "y"}]; append from y; close IFS;
38QUIT;
2 Bloc de code
PROC SGPLOT
Explication :
Ce bloc configure le système de destination ODS Graphics pour définir la taille de l'image de sortie (200px de large par 400px de haut). Ensuite, PROC SGPLOT est utilisée pour créer un graphique de type nuage de points (scatter plot) à partir du jeu de données 'IFS' généré précédemment. Les attributs des marqueurs sont définis avec une petite taille (1) et une couleur vert forêt pour simuler l'apparence des aiguilles du sapin. Les axes Y et X sont désactivés pour produire une image épurée du sapin.
Copié !
1ods graphics / width=200px height=400px;
2PROC SGPLOT DATA=IFS;
3 title "SAS Christmas Tree";
4 scatter x=x y=y / markerattrs=(size=1 color=ForestGreen);
5 yaxis display=none;
6 xaxis display=none;
7RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.