####################################################################################################################################### # # # C A L C U L D E L A # # D E F I N I T I O N D ' U N O R N E M E N T D E Y O U R T E F U N E R A I R E # # E N V E R S I O N R E C U R S I V E : # # # # # # Author of '$xiirf/.YOUF.31.2.$U' : # # # # Jean-Francois Colonna (LACTAMME, 20070724123128). # # # ####################################################################################################################################### $Z set PReFeReNcE=`$CA $FPoint1.ancrage | $NL | $R "$K_TAB" "$K_BLANC" | $GRE " $NEXIST"'$' | $HEA -1 | $AW ' { print $1 } '` $Z # Parametre introduit le 20070724123128 et definissant le point de reference. Celui-ci est # $Z # le premier point a l'etat '$NEXIST' dans la liste '$FPoint1.ancrage'. # $Z if ("$PReFeReNcE" == "$K_VIDE") then $Z EROR "Le point de reference n'a pu etre defini, on prend le premier point de la liste 'ancrage'." $Z set PReFeReNcE=1 $Z # On force la valeur '1' au cas ou il n'y aurait aucun point a l'etat '$NEXIST' dans la liste # $Z # '$FPoint1.ancrage'... # $Z else $Z endif $Z FileTmpB FPointN $Z # Definition du "premier etage" (et qui sera ensuite cumule aux etages superieurs au cours # $Z # des iterations) tel qu'il est pret a etre visualise : # $Z set NPoInTsE=`$CA $FPoint1.exemplaires | $WCl` $Z alias genere2 'set FiChIeR1=\!:1 ; set FiChIeR2=\!:2 ; \\ $Z $xrv/duplique.01$X \\ $Z ne=$NPoInTsE \\ $Z fichier=$FiChIeR1 \\ $Z exemplaires=$FPoint1.exemplaires \\ $Z > $FiChIeR2 ; \\ $Z unset FiChIeR1 FiChIeR2' $Z # Alias introduit le 20070724102131... # $Z genere2 $FPoint1$COORD_X $FPointN$COORD_X $Z genere2 $FPoint1$COORD_Y $FPointN$COORD_Y $Z genere2 $FPoint1.d$COORD_X $FPointN.d$COORD_X $Z genere2 $FPoint1.d$COORD_Y $FPointN.d$COORD_Y $Z genere2 $FPoint1.rayon $FPointN.rayon $Z set ReDuCtIoN=`calculNS 1/$_____Reduction` $Z # Reduction courante... # $Z set NEtAgEs=$_____Etages $Z # Nombre d'etages... # $Z set PaRaMeTrEs_R1="$K_VIDE" $Z set PaRaMeTrEs_R1="$PaRaMeTrEs_R1"" LISTE_Z=$_____Z0" $Z set PaRaMeTrEs_R1="$PaRaMeTrEs_R1"" transformation_autosimilaire=VRAI" $Z set PaRaMeTrEs_R1="$PaRaMeTrEs_R1"" transformation_quelconque=VRAI" $Z set PaRaMeTrEs_R1="$PaRaMeTrEs_R1"" a11=`calculNS 1/$_____Reduction`" $Z set PaRaMeTrEs_R1="$PaRaMeTrEs_R1"" a22=`calculNS 1/$_____Reduction`" $Z set PaRaMeTrEs_R1="$PaRaMeTrEs_R1"" SELECTION_ANCRAGE=$FPoint1.ancrage" $Z set PaRaMeTrEs_R1="$PaRaMeTrEs_R1"" SELECTION_A_ANCRER=$FPoint1.ancrer" $Z set PaRaMeTrEs_R2="$K_VIDE" $Z set PaRaMeTrEs_R2="$PaRaMeTrEs_R2"" DUPLIQUER_VALEUR=$FPoint1.dupliquer" $Z set PaRaMeTrEs_R3="$K_VIDE" $Z set PaRaMeTrEs_R3="$PaRaMeTrEs_R3"" DUPLIQUER_VALEUR=$NEXIST" $Z while ($NEtAgEs > 0) $Z set xP1_CoUrAnT=`$CA $FPoint1$COORD_X` $Z set xP1_CoUrAnT=$xP1_CoUrAnT[$PReFeReNcE] $Z set yP1_CoUrAnT=`$CA $FPoint1$COORD_Y` $Z set yP1_CoUrAnT=$yP1_CoUrAnT[$PReFeReNcE] $Z # Le point de reference est initialement le point 'P1_'... # $Z set TrAnSlAtIoN_X=`calculNS -($xP1_CoUrAnT*(1/$_____Reduction))` $Z set TrAnSlAtIoN_Y=`calculNS -($yP1_CoUrAnT*(1/$_____Reduction))` $Z # Translation des etages apres reduction... # $Z set NPoInTs1X=`$CA $FPoint1$COORD_X | $WCl` $Z set NPoInTs1Y=`$CA $FPoint1$COORD_Y | $WCl` $Z set NPoInTs1=`$xcg/MIN2.01$X x=$NPoInTs1X y=$NPoInTs1Y` $Z set PaRaMeTrEs_R4="$K_VIDE" $Z set PaRaMeTrEs_R4="$PaRaMeTrEs_R4"" tX=$TrAnSlAtIoN_X tY=$TrAnSlAtIoN_Y" $Z set PaRaMeTrEs_R4="$PaRaMeTrEs_R4"" alphaX=1 alphaY=1" $Z set PaRaMeTrEs_R5="$K_VIDE" $Z set PaRaMeTrEs_R5="$PaRaMeTrEs_R5"" tX=0 tY=0" $Z set PaRaMeTrEs_R5="$PaRaMeTrEs_R5"" alphaX=0 alphaY=0" $Z FileTmpB FPoint2 $Z # Definition des etages superieurs... # $Z set PaRaMeTrEs_R6="$K_VIDE" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" ne=$NPoInTs1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_X=$FPoint1$COORD_X" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_Y=$FPoint1$COORD_Y" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R4" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" px=1 py=0 pz=0" $Z # Introduit le 20070724114019... # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R2 \ $Z >>! $FPointN$COORD_X $Z # Construction progressive des fichiers '$FPointN' a visualiser par '$xrv/particule.10$X'. # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R3 \ $Z > $FPoint2$COORD_X $Z # Definition du prochain etage a "multiplier" autosimilairement. # $Z set PaRaMeTrEs_R6="$K_VIDE" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" ne=$NPoInTs1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_X=$FPoint1$COORD_X" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_Y=$FPoint1$COORD_Y" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R4" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" px=0 py=1 pz=0" $Z # Introduit le 20070724114019... # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R2 \ $Z >>! $FPointN$COORD_Y $Z # Construction progressive des fichiers '$FPointN' a visualiser par '$xrv/particule.10$X'. # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R3 \ $Z > $FPoint2$COORD_Y $Z # Definition du prochain etage a "multiplier" autosimilairement. # $Z set PaRaMeTrEs_R6="$K_VIDE" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" ne=$NPoInTs1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_X=$FPoint1.d$COORD_X" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_Y=$FPoint1.d$COORD_Y" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R5" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" px=1 py=0 pz=0" $Z # Introduit le 20070724114019... # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R2 \ $Z >>! $FPointN.d$COORD_X $Z # Construction progressive des fichiers '$FPointN' a visualiser par '$xrv/particule.10$X'. # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R3 \ $Z > $FPoint2.d$COORD_X $Z # Definition du prochain etage a "multiplier" autosimilairement. # $Z set PaRaMeTrEs_R6="$K_VIDE" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" ne=$NPoInTs1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_X=$FPoint1.d$COORD_X" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_Y=$FPoint1.d$COORD_Y" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R5" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" px=0 py=1 pz=0" $Z # Introduit le 20070724114019... # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R2 \ $Z >>! $FPointN.d$COORD_Y $Z # Construction progressive des fichiers '$FPointN' a visualiser par '$xrv/particule.10$X'. # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R3 \ $Z > $FPoint2.d$COORD_Y $Z # Definition du prochain etage a "multiplier" autosimilairement. # $Z set PaRaMeTrEs_R6="$K_VIDE" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" ne=$NPoInTs1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_X=$FPoint1.rayon" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" LISTE_Y=0" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R1" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" $PaRaMeTrEs_R5" $Z set PaRaMeTrEs_R6="$PaRaMeTrEs_R6"" px=1 py=0 pz=0" $Z # Introduit le 20070724114019... # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R2 \ $Z >>! $FPointN.rayon $Z # Construction progressive des fichiers '$FPointN' a visualiser par '$xrv/particule.10$X'. # $Z $xrv/ROTATION.01$X \ $Z $PaRaMeTrEs_R6 \ $Z $PaRaMeTrEs_R3 \ $Z > $FPoint2.rayon $Z # Definition du prochain etage a "multiplier" autosimilairement. # $Z $CA $FPoint1.ancrage $FPoint1.ancrage \ $Z > $FPoint2.ancrage $Z # Le fichier d'ancrage etant du type : # $Z # # $Z # 1 0 1 1 0 1 1 0 1 1 0 1 (...) # $Z # V F V V F V V F V V F V (...) # $Z # # $Z # le passage de sa version courante a la suivante se fait tout simplement par "doublement" # $Z # (c'est-a-dire par "auto-concatenation")... # $Z $CA $FPoint1.ancrer \ $Z > $FPoint2.ancrer $Z set NPoInTs1=`$CA $FPoint2.ancrer | $WCl` $Z set NPoInTs2=`$CA $FPoint2.ancrage | $WCl` $Z set NPoInTs=`calculNS $NPoInTs2-$NPoInTs1` $Z repeat $NPoInTs \ $Z echo $NEXIST >>! $FPoint2.ancrer $Z # Le fichier d'ancrage etant du type : # $Z # # $Z # 1 1 1 0 0 0 0 0 0 0 0 0 (...) # $Z # V V V F F F F F F F F F (...) # $Z # # $Z # le passage de sa version courante a la suivante se fait tout simplement en ajoutant # $Z # suffisamment de triplets {0,0,0} en queue... # $Z $CA $FPoint1.dupliquer $FPoint1.dupliquer \ $Z > $FPoint2.dupliquer $Z # Le fichier de duplication etant du type : # $Z # # $Z # 0 1 0 0 1 0 0 1 0 0 1 0 (...) # $Z # F V F F V F F V F F V F (...) # $Z # # $Z # le passage de sa version courante a la suivante se fait tout simplement par "doublement" # $Z # (c'est-a-dire par "auto-concatenation")... # $Z $DELETE $FPoint1.* $Z $MV $FPoint2$COORD_X $FPoint1$COORD_X $Z $MV $FPoint2$COORD_Y $FPoint1$COORD_Y $Z $MV $FPoint2.d$COORD_X $FPoint1.d$COORD_X $Z $MV $FPoint2.d$COORD_Y $FPoint1.d$COORD_Y $Z $MV $FPoint2.rayon $FPoint1.rayon $Z $MV $FPoint2.ancrage $FPoint1.ancrage $Z $MV $FPoint2.ancrer $FPoint1.ancrer $Z $MV $FPoint2.dupliquer $FPoint1.dupliquer $Z # Passage de l'etage courant ('$FPoint1') a l'etage suivant ('$FPoint2')... # $Z FileTmpE FPoint2 $NEXIST $Z set ReDuCtIoN=`calculNS $ReDuCtIoN/$_____Reduction` $Z # Reduction courante... # $Z @ NEtAgEs = $NEtAgEs - 1 $Z # Passage a l'etage superieur... # $Z end $Z set NPoInTsX=`$CA $FPointN$COORD_X | $WCl` $Z set NPoInTsY=`$CA $FPointN$COORD_Y | $WCl` $Z set NPoInTs=`$xcg/MIN2.01$X x=$NPoInTsX y=$NPoInTsY` $Z FileTmpB FPointC $Z set GrAiNe=$_____Graine $Z # Graine du generateur aleatoire de couleurs... # $Z alias genere3 'set CoUlEuR=\!:1 ; set MiNiMuM=\!:2 ; set MaXiMuM=\!:3 ; \\ $Z $xrv/val_alea.01$X \\ $Z ne=$NPoInTs \\ $Z graine=$GrAiNe \\ $Z LISTE_BORNES_INFERIEURES=$MiNiMuM \\ $Z LISTE_BORNES_SUPERIEURES=$MaXiMuM \\ $Z entiers=VRAI \\ $Z > $FPointC$CoUlEuR ; \\ $Z @ GrAiNe = $GrAiNe + $_____DGraine ; \\ $Z unset CoUlEuR MiNiMuM MaXiMuM' $Z # Alias introduit le 20070724115348... # $Z genere3 $ROUGE $_____MinROUGE $_____MaxROUGE $Z genere3 $VERTE $_____MinVERTE $_____MaxVERTE $Z genere3 $BLEUE $_____MinBLEUE $_____MaxBLEUE $Z # Generation des composantes {R,V,B}... # $Z alias genere4 'set CoUlEuR=\!:1 ; \\ $Z $xrv/homogene.01$X \\ $Z ne=$NPoInTs \\ $Z LISTE_X=$FPointN$COORD_X \\ $Z LISTE_Y=$FPointN$COORD_Y \\ $Z LISTE_Z=$_____Z0 \\ $Z LISTE_VALEUR=$FPointC$CoUlEuR \\ $Z entiers=VRAI \\ $Z > $FPointN$CoUlEuR ; \\ $Z unset CoUlEuR' $Z # Alias introduit le 20070724115348... # $Z genere4 $ROUGE $Z genere4 $VERTE $Z genere4 $BLEUE $Z # Homogeneisation des composantes {R,V,B} afin que tous les points identiques (c'est-a-dire # $Z # de memes coordonnees {X,Y,Z}) aient exactement la meme couleur... # $Z FileTmpE FPointC $Z $xrv/particule.10$X \ $Z npoints=$NPoInTs \ $Z LISTE_X=$FPointN$COORD_X \ $Z LISTE_Y=$FPointN$COORD_Y \ $Z LISTE_Z=$_____Z0 \ $Z LISTE_dX=$FPointN.d$COORD_X \ $Z LISTE_dY=$FPointN.d$COORD_Y \ $Z LISTE_dZ=0 \ $Z LISTE_RAYON=$FPointN.rayon \ $Z LISTE_ROUGE=$FPointN$ROUGE \ $Z LISTE_VERTE=$FPointN$VERTE \ $Z LISTE_BLEUE=$FPointN$BLEUE \ $Z isoles=FAUX \ $Z Pajuster=VRAI \ $Z chainer=FAUX \ $Z equidistance=VRAI \ $Z cubique=$_____Cubique \ $Z ZOOM=$_____Zoom \ $Z extrema_hors=FAUX \ $Z R=$_____ImageR \ $Z chiffres=0 \ $Z $formatI $Z # Generation de l'image finale... # $Z FileTmpE FPointN $Z FileTmpE FPoint1