 /***************************************************************************
 * 
 *                  NE PAS MODIFIER CETTE SECTION 
 *                  
 **************************************************************************/
import java.awt.*;
import Listes.*;

public class PiAires extends FenetreTortue
{ 
     
/***************************************************************************
 * 
 *                      SECTION MODIFIABLE 
 *                  
 **************************************************************************/
 
 
 
/********************** Parametres de l'interface ************************/

    public static int baseFenetre = 600; // Largeur de la fenetre
    public static int hauteurFenetre = 700; // Hauteur de la fenetre
    public static String titreFenetre = "Approximer pi via les aires"; // Titre de la fenetre
    // Le texte
    public static boolean zoneTexte = false; // Indique si on désire ou non une zone de texte
    // Les boutons
    public static String[] nomsBoutonsLigne1 = {"Calculer", "Quitter"}; // Noms des boutons de la ligne 1
    public static String[] nomsBoutonsLigne2 = {}; // Noms des boutons de la ligne 2
    // Les menus
    public static String[] nomsMenus1 = {}; // Exemple: private static String[] nomsMenus1 = {"nomMenu", "nomItem_1", ...};
    public static String[] nomsMenus2 = {}; // Laissez vide si vous ne désirez pas de menu
    public static String[] nomsMenus3 = {};
    public static String[] nomsMenus4 = {};
    public static String[] nomsMenus5 = {};
    public static String[] nomsMenus6 = {};
    public static String[] nomsMenus7 = {};
    public static String[] nomsMenus8 = {};
    
    public static void ajoutDeGlissieres(){
    // Exemple: ajouterGlissiereLigne1(legende, min, max, posDebut, nbDecimales)
        ajouterGlissiereLigne1("Nombre d'intervalles",0,1000,0,0);
    }

/****************** Initialisation *********************************/
   
    public void initialisation(){
    // Placer ici les actions a realiser a l'ouverture
        dessinerSituation();
    }
    
/****************** Placer vos procedures ici ****************************/

void dessinerSituation() {
    int nbIntervalles;
    double rayon, base, x, y, x1, y1, hMin, hMax, aireInf, aireSup, rayon2;
    aireInf=0; aireSup=0;
    nbIntervalles = valEnt(valeurGlissiere(1));
    rayon = min(hauteurZoneGraphique(),largeurZoneGraphique())/2-10;
    rayon2=rayon*rayon;
    base = 2*rayon/nbIntervalles;
    videGraphique(); centreTortue();
    couleurRemplissage(jaune);
    cercle(0,0,rayon);
    x=-rayon;
    for (int i=0; i<nbIntervalles; i=i+1) {
        y=racine(abs(rayon*rayon-x*x));
        x1=x+base; y1=racine(abs(rayon*rayon-x1*x1));
        hMin=min(y,y1); hMax=max(y,y1);  if ((x<0) && (0<x1)) {hMax=rayon;};
        rectanglePlein(x,-hMin,x1,hMin);
        rectangle(x,-hMax,x1,hMax);
        aireInf=aireInf+2*base*hMin; aireSup=aireSup+2*base*hMax;
        x=x1;
    }
     if (nbIntervalles > 0) {
         ecrisGraphique(-largeurZoneGraphique()/2 + 2, hauteurZoneGraphique()/2-10, "Pi est entre " + aireInf/rayon2 + " et " + aireSup/rayon2);}
}

void calculer() {
    int nbIntervalles;
    double rayon, base, x, y, x1, y1, hMin, hMax, aireInf, aireSup, rayon2;
    aireInf=0; aireSup=0;
    nbIntervalles = demanderEntier("Calcul de pi", "Nombre d'intervalles: ");
    rayon = min(hauteurZoneGraphique(),largeurZoneGraphique())/2-10;
    rayon2=rayon*rayon;
    base = 2*rayon/nbIntervalles;
    x=-rayon;
    for (int i=0; i<nbIntervalles; i=i+1) {
        y=racine(abs(rayon*rayon-x*x));
        x1=x+base; y1=racine(abs(rayon*rayon-x1*x1));
        hMin=min(y,y1); hMax=max(y,y1);  if ((x<0) && (0<x1)) {hMax=rayon;};
        aireInf=aireInf+2*base*hMin; aireSup=aireSup+2*base*hMax;
        x=x1;
    }
    if (nbIntervalles > 0) {message("Pi est entre " + aireInf/rayon2 + " et " + aireSup/rayon2 + '\r'  + "   ("+nbIntervalles + " intervalles)");}
}

/**************  Les actions des boutons  ************************************/

public void actionBouton1(){ 
    calculer();
} 

public void actionBouton2(){
    quitter();
}

// etc..
/**************  Les actions des menus  ****************************/
public void actionMenu1Item1(){    
} 

public void actionMenu1Item2(){    
}

// etc..
/*************** Les actions des glissieres *********************************/  
public void actionGlissiere1(double d){
    dessinerSituation();
}

// etc..
/**************** Les actions de la souris *******************************/
    
    public void clicSouris(double x, double y){
        
    }
    
    public void debutGlisser(double x, double y){
    }
    
    public void finGlisser(double x, double y){
    }
    
    public void glisserEnCours(double x, double y){
        
    }
/********************* Changement de taille de la fenetre *******************/ 
    public void actionTailleChange(){
    // Placer ici les actions a realiser lors d'un changement de taille de la fenetre
        dessinerSituation();
    }
/***************************************************************************
 * 
 *                  NE PAS MODIFIER CETTE SECTION 
 *                  
 **************************************************************************/    
     
    public static String[][] Menus = {nomsMenus1, nomsMenus2, nomsMenus3, nomsMenus4, nomsMenus5, nomsMenus6, nomsMenus7, nomsMenus8};    
    
    public PiAires(int l, int h, String titre, String[] nomsBoutons1, String[] nomsBoutons2, String[][] Menus, boolean avecTexte){
        super(l, h, titre, nomsBoutons1, nomsBoutons2, Menus, avecTexte);
    }
    
    public PiAires() {
        this(baseFenetre, hauteurFenetre, titreFenetre, nomsBoutonsLigne1, nomsBoutonsLigne2, Menus, zoneTexte);
    }
    
    public static void executer(boolean applet){
        initGlissieres();
        ajoutDeGlissieres();
        PiAires maFenetre = new PiAires();
        faireApplet(applet);
        maFenetre.toFront();
        maFenetre.initialisation();
    }
    
    public static void main(String[] args){
        javax.swing.SwingUtilities.invokeLater(new Runnable(){
            public void run(){
                executer(false);
            }
        });
    }

     
}  
