#######################################################################################################################################
# #
# V I S U A L I S A T I O N D ' U N T R I P L E T P Y T H A G O R I C I E N : #
# #
# #
# Author of '$xiirv/.PYTH.21.1.$U' : #
# #
# Jean-Francois Colonna (LACTAMME, 20130302114425). #
# #
#######################################################################################################################################
$Z SETParam _____Rayon1 0.005
$Z setParam _____Rayon2 0.010
$Z setParam _____Grossissement 2
$Z setParam _____Zoom 1.8
$Z SET Triplet1=3
$Z SET Triplet2=4
$Z SET Triplet3=5
$Z # Definition du triplet pythagoricien {3,4,5}. #
$Z set ChEcK1=`calcul ($Triplet3*$Triplet3)`
$Z set ChEcK2=`calcul ($Triplet1*$Triplet1) + ($Triplet2*$Triplet2)`
$Z if ($ChEcK1 != $ChEcK2) then
$Z # Test introduit le 20130303081048... #
$Z EROR "Le triplet {$Triplet1,$Triplet2,$Triplet3} n'est pas pythagoricien."
$Z else
$Z endif
$Z SET FaCtEuR=0.2
$Z # Facteur de passage des nombres entiers {3,4,5} a des coordonnees dans [0,1]. #
$Z SET Coord_X1=0.9
$Z SET Coord_Y1=0.2
$Z # Premier sommet fixe arbitrairement (en bas et a droite). #
$Z SET Coord_X2=`calcul $Coord_X1 - ($FaCtEuR*$Triplet2)`
$Z SET Coord_Y2=$Coord_Y1
$Z # Deuxieme sommet (en bas et a gauche). #
$Z SET Coord_X3=$Coord_X2
$Z SET Coord_Y3=`calcul $Coord_Y2 + ($FaCtEuR*$Triplet1)`
$Z # Troisieme sommet (en haut et a gauche). #
$Z SET HyPo2=`calcul ((($Coord_X1)-($Coord_X3))*(($Coord_X1)-($Coord_X3))) + ((($Coord_Y1)-($Coord_Y3))*(($Coord_Y1)-($Coord_Y3)))`
$Z SET TrAnSlAtIoN=0.08
$Z SET Coord_X4=`calcul $Coord_X1 + $TrAnSlAtIoN`
$Z SET LoNgUeUr2=`calcul (($Coord_X4)-($Coord_X3))*(($Coord_X4)-($Coord_X3))`
$Z if (`$xcg/IFGT.01$X n1=$LoNgUeUr2 n2=$HyPo2` == $EXIST) then
$Z # Test introduit le 20130303093808... #
$Z EROR "La longueur du troisieme brin de la corde est superieure a l'hypothenuse, \c"
$Z echo "il faut donc reduire '"'$TrAnSlAtIoN'"' qui vaut actuellement $TrAnSlAtIoN."
$Z SET LoNgUeUr2=$HyPo2
$Z # Afin d'eviter des "nan"... #
$Z else
$Z endif
$Z set Coord_Y4=`calcul $Coord_Y3 - sqrt($HyPo2 - $LoNgUeUr2)`
$Z # Ainsi, on ne referme pas le triangle rectangle, le sommet {$Coord_X4,$Coord_Y4} etant #
$Z # different du somme de depart {$Coord_X1,Coord_Y1}, bien que proche de lui (via le "+0.08" #
$Z # ci-dessus...). #
$Z # #
$Z # On remarquera que pour '$Coord_Y4' il y a deux solutions '-sqrt(...)' et '+sqrt(...)' #
$Z # et que c'est evidemment la solution "-" qu'il faut utiliser si l'on veut que le point #
$Z # {$Coord_X4,$Coord_Y4} soit au voisinage du point {$Coord_X1,$Coord_Y1}... #
$Z alias Genere 'set FiLe=\!:1 ; set TrIpLeT=\!:2 ; set vDvA=(\!:3*) ; \\
$Z set ArGs="premiere=0 lineaire=VRAI" ; \\
$Z $xci/valeurs_inte$X $ArGs derniere=$TrIpLeT vD=$vDvA[1] vA=$vDvA[2] >>! $FiLe$COORD_X ; \\
$Z $xci/valeurs_inte$X $ArGs derniere=$TrIpLeT vD=$vDvA[3] vA=$vDvA[4] >>! $FiLe$COORD_Y ; \\
$Z $xci/valeurs_inte$X $ArGs derniere=$TrIpLeT vD=$vDvA[5] vA=$vDvA[6] >>! $FiLe$ROUGE ; \\
$Z $xci/valeurs_inte$X $ArGs derniere=$TrIpLeT vD=$vDvA[7] vA=$vDvA[8] >>! $FiLe$VERTE ; \\
$Z $xci/valeurs_inte$X $ArGs derniere=$TrIpLeT vD=$vDvA[9] vA=$vDvA[10] >>! $FiLe$BLEUE ; \\
$Z unset FiLe TrIpLeT vDvA'
$Z # Il est imperatif d'avoir "premiere=0" et ainsi, '$TrIpLeT' donne un nombre de "piquets" #
$Z # et non pas un nombre d'intervalles... #
$Z set ArGuMeNtS="$K_VIDE"
$Z set ArGuMeNtS="$ArGuMeNtS"" np=1"
$Z set ArGuMeNtS="$ArGuMeNtS"" LISTE_Z=0"
$Z set ArGuMeNtS="$ArGuMeNtS"" isoles=FAUX"
$Z set ArGuMeNtS="$ArGuMeNtS"" chainer=VRAI"
$Z set ArGuMeNtS="$ArGuMeNtS"" ZOOM=$_____Zoom"
$Z set ArGuMeNtS="$ArGuMeNtS"" Lz=100"
$Z set ArGuMeNtS="$ArGuMeNtS"" editer_extrema_hors=FAUX"
$Z set ArGuMeNtS="$ArGuMeNtS"" chiffres=0"
$Z if ($_____Rayon1 == 0) then
$Z execRVB $xci/init$X \
$Z n=$NOIR \
$Z R=$xTV/PYTHAGORE%s \
$Z $formatI
$Z else
$Z FilSTmpB FPyTh1
$Z set Triplet0=1
$Z Genere $FPyTh1 $Triplet0 $Coord_X1 $Coord_X4 $Coord_Y1 $Coord_Y4 $BLANC $BLANC $BLANC $BLANC $BLANC $BLANC
$Z set NpointsX=`$CA $FPyTh1$COORD_X | $WCl`
$Z set NpointsY=`$CA $FPyTh1$COORD_Y | $WCl`
$Z set Npoints=`$xcg/MIN2.01$X x=$NpointsX y=$NpointsY`
$Z $xrv/particule.10$X \
$Z iterations=$Npoints \
$Z LISTE_X=$FPyTh1$COORD_X \
$Z LISTE_Y=$FPyTh1$COORD_Y \
$Z LISTE_ROUGE=$FPyTh1$ROUGE \
$Z LISTE_VERTE=$FPyTh1$VERTE \
$Z LISTE_BLEUE=$FPyTh1$BLEUE \
$Z points=8 \
$Z rayon_de_visualisation=$_____Rayon1 \
$Z $ArGuMeNtS \
$Z R=$xTV/PYTHAGORE \
$Z $formatI
$Z # Marquage (sous forme d'un pointille blanc) de la manipulation a faire pour refermer la #
$Z # corde pythagoricienne afin d'en faire un triangle rectangle {3,4,5}. #
$Z FilSTmpE FPyTh1
$Z endif
$Z FilSTmpB FPyTh2
$Z Genere $FPyTh2 $Triplet2 $Coord_X1 $Coord_X2 $Coord_Y1 $Coord_Y2 $NOIR $NOIR $BLANC $BLANC $NOIR $NOIR
$Z Genere $FPyTh2 $Triplet1 $Coord_X2 $Coord_X3 $Coord_Y2 $Coord_Y3 $BLANC $BLANC $NOIR $NOIR $NOIR $NOIR
$Z Genere $FPyTh2 $Triplet3 $Coord_X3 $Coord_X4 $Coord_Y3 $Coord_Y4 $NOIR $NOIR $NOIR $NOIR $BLANC $BLANC
$Z set NpointsX=`$CA $FPyTh2$COORD_X | $WCl`
$Z set NpointsY=`$CA $FPyTh2$COORD_Y | $WCl`
$Z set Npoints=`$xcg/MIN2.01$X x=$NpointsX y=$NpointsY`
$Z $xrv/particule.10$X \
$Z iterations=$Npoints \
$Z LISTE_X=$FPyTh2$COORD_X \
$Z LISTE_Y=$FPyTh2$COORD_Y \
$Z LISTE_ROUGE=$FPyTh2$ROUGE \
$Z LISTE_VERTE=$FPyTh2$VERTE \
$Z LISTE_BLEUE=$FPyTh2$BLEUE \
$Z Pajuster=VRAI equidistance=VRAI \
$Z rayon_de_visualisation=$_____Rayon2 \
$Z grossissement=$_____Grossissement \
$Z fond=VRAI F=$xTV/PYTHAGORE \
$Z $ArGuMeNtS \
$Z R=$_____ImageR \
$Z $formatI
$Z # Materialisation en couleur de la corde pythagoricienne {3,4,5}. #
$Z FilSTmpE FPyTh2