#######################################################################################################################################
# #
# 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