 /***************************************************************************
 * 
 *                  NE PAS MODIFIER CETTE SECTION 
 *                  
 **************************************************************************/
import java.awt.*;
import Listes.*;

public class Expresso extends FenetreTortue
{ 
     
/***************************************************************************
 * 
 *                      SECTION MODIFIABLE 
 *                  
 **************************************************************************/
 
 
 
/********************** Parametres de l'interface ************************/

    public static int baseFenetre = 600; // Largeur de la fenêtre
    public static int hauteurFenetre = 700; // Hauteur de la fenêtre
    public static String titreFenetre = "????"; // Titre de la fenêtre
    // Le texte
    public static boolean zoneTexte = true; // Indique si on désire ou non une zone de texte
    // Les boutons
    public static String[] nomsBoutonsLigne1 = {"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(){
        ajouterGlissiereLigne1("Nombre de termes", 0,8,0,0);
    }

/****************** Initialisation *********************************/
   
    public void initialisation(){
    // Placer ici les actions a realiser a l'ouverture
        permettreInterruption(false);
        fixerProportionZoneTexte(0.2);
        tracerAxes();
        tracerSin();
        tracerSerie(valEnt(valeurGlissiere(1)));
        afficherSerie(valEnt(valeurGlissiere(1)));
    }
    
/****************** Placer vos procedures ici ****************************/
double facteur = 1;
void tracerAxes(){
    couleurCrayon(noir);
    double haut = hauteurZoneGraphique();
    double large = largeurZoneGraphique();
    fixeOrigineTortue(large/2, haut/2);
    double x = origineTortueX();
    double y = origineTortueY();
    segment(0, y, 0, y - haut);
    segment(-x, 0, large-x, 0);
    facteur = 6 * Pi / large;
}

void tracerSin(){
    couleurCrayon(rouge);
    double x0 = -origineTortueX(); double y0 = sin( facteur * x0)/facteur;
    for(int i = valEnt(-origineTortueX()+1); i <= largeurZoneGraphique(); i++){
        double x1 = i; double y1 = sin( facteur * x1)/facteur;
        segment(x0, y0, x1, y1);
        x0 = x1;
        y0 = y1;
    }
}

double serie(double x, int n){// n = nombre de termes dans la serie
    if (n == 0) return 0;
    double terme = x;
    double x2 = x*x;
    double resultat = 0;
    for(int i = 1; i <= n; i++){
        resultat += terme;
        terme *= -x2/(2*i*(2*i+1));
    }
    return resultat;
}

void tracerSerie(int n){
    couleurCrayon(vert);
    double x0 = -origineTortueX(); double y0 = serie( facteur * x0, n )/facteur;
    for(int i = valEnt(-origineTortueX()+1); i <= largeurZoneGraphique(); i++){
        double x1 = i; double y1 = serie( facteur * x1, n)/facteur;
        segment(x0, y0, x1, y1);
        x0 = x1;
        y0 = y1;
    }
}

void afficherSerie(int n){
    String[] termes = {"x/1!" , "- x^3/3!", "+ x^5/5!", "- x^7/7!", "+ x^9/9!", "- x^11/11!", "+ x^13/13!", "- x^15/15!"};
    videTexte();
    ecris(unicode("S#eaigrie ="));
    if (n == 0){ecris(0); return;}
    if (n > termes.length){return;}
    for(int i = 0; i < n ; i++){
        ecris(" " + termes[i] + " ");
    }
}

/**************  Les actions des boutons  ************************************/

public void actionBouton1(){
    quitter();
} 

public void actionBouton2(){
}

public void actionBouton3(){
}   

public void actionBouton4(){
}
/**************  Les actions des menus  ****************************/


   
/*************** Les actions des glissieres *********************************/  

public void actionGlissiere1(double d){
    videGraphique();
    tracerAxes();
    tracerSin();
    tracerSerie(valEnt(d));
    afficherSerie(valEnt(d));
}    
  
/**************** 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){
        
    }
    
/***************************************************************************
 * 
 *                  NE PAS MODIFIER CETTE SECTION 
 *                  
 **************************************************************************/    
     
    public static String[][] Menus = {nomsMenus1, nomsMenus2, nomsMenus3, nomsMenus4, nomsMenus5, nomsMenus6, nomsMenus7, nomsMenus8};    
    
    public Expresso(int l, int h, String titre, String[] nomsBoutons1, String[] nomsBoutons2, String[][] Menus, boolean avecTexte){
        super(l, h, titre, nomsBoutons1, nomsBoutons2, Menus, avecTexte);
    }
    
    public Expresso() {
        this(baseFenetre, hauteurFenetre, titreFenetre, nomsBoutonsLigne1, nomsBoutonsLigne2, Menus, zoneTexte);
    }
    
    public static void executer(boolean applet){
        initGlissieres();
        ajoutDeGlissieres();
        Expresso maFenetre = new Expresso();
        faireApplet(applet);
        maFenetre.toFront();
        maFenetre.initialisation();
    }
    
    public static void main(String[] args){
        executer(false);
    }

     
}  
