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