var editeur = { idFct : 0, fct : { fct : "", fctX : "", fctY : "", from : 0, to : 2*Math.PI, couleur : "", couleurD1 : "", couleurD2 : "", couleurP1 : "", width : 2, style : "continu", aire : false, derivee1 : false, derivee2 : false, primitive1 : false, conditionInitiale : 0 }, editer : function(id){ this.idFct = id; if(fct.list[this.idFct]){ document.getElementById("editeurFonction").style.visibility = "visible"; this.setOptions(); } else{ document.getElementById("editeurFonction").style.visibility = "hidden"; } fct.updateList(); }, couleur : function(id){ colorPicker.init(id); afficherMenu('menuCouleur'); }, getOptions : function(){ this.fct.fct = document.getElementById("editeurInput").value; this.fct.fctX = document.getElementById("editeurFctX").value; this.fct.fctY = document.getElementById("editeurFctY").value; this.fct.from = document.getElementById("editeurFrom").value; this.fct.to = document.getElementById("editeurTo").value; this.fct.width = document.getElementById("editeurWidth").value; this.fct.style = document.getElementById("editeurStyle").value; this.fct.aire = document.getElementById("editeurAire").checked ? true : false; this.fct.derivee1 = document.getElementById("editeurD1").checked ? true : false; this.fct.derivee2 = document.getElementById("editeurD2").checked ? true : false; this.fct.primitive1 = document.getElementById("editeurP1").checked ? true : false; if(this.fct.primitive1){ document.getElementById("editeurConditionInitiale").disabled = ""; document.getElementById("editeurTexteConditionInitiale").style.color = "rgb(0,0,0)" } else{ document.getElementById("editeurConditionInitiale").disabled = "disabled"; document.getElementById("editeurTexteConditionInitiale").style.color = "rgb(128,128,128)" } this.fct.conditionInitiale = parseFloat(document.getElementById("editeurConditionInitiale").value); fct.list[this.idFct].set(this.fct); fct.updateList(); historique.ajouter(fct.list[this.idFct]); this.apercu(); }, setOptions : function(){ var f = fct.list[this.idFct].get(); for(var i in f){ this.fct[i] = f[i]; } this.setDisplayStyle(); document.getElementById("editeurInput").value = this.fct.fct; document.getElementById("editeurFctX").value = this.fct.fctX; document.getElementById("editeurFctY").value = this.fct.fctY; document.getElementById("editeurFrom").value = this.fct.from; document.getElementById("editeurTo").value = this.fct.to; document.getElementById("editeurCouleur").style.backgroundColor = this.fct.couleur; document.getElementById("editeurCouleurD1").style.backgroundColor = this.fct.couleurD1; document.getElementById("editeurCouleurD2").style.backgroundColor = this.fct.couleurD2; document.getElementById("editeurCouleurP1").style.backgroundColor = this.fct.couleurP1; document.getElementById("editeurWidth").value = this.fct.width; document.getElementById("editeurStyle").value = this.fct.style; document.getElementById("editeurAire").checked = this.fct.aire ? "checked" : ""; document.getElementById("editeurD1").checked = this.fct.derivee1 ? "checked" : ""; document.getElementById("editeurD2").checked = this.fct.derivee2 ? "checked" : ""; document.getElementById("editeurP1").checked = this.fct.primitive1 ? "checked" : ""; if(this.fct.primitive1){ document.getElementById("editeurConditionInitiale").disabled = ""; document.getElementById("editeurTexteConditionInitiale").style.color = "rgb(0,0,0)" } else{ document.getElementById("editeurConditionInitiale").disabled = "disabled"; document.getElementById("editeurTexteConditionInitiale").style.color = "rgb(128,128,128)" } document.getElementById("editeurConditionInitiale").value = this.fct.conditionInitiale; document.getElementById("outputX").innerHTML = " "; document.getElementById("outputAire").innerHTML = " "; this.apercu(); }, setDisplayStyle : function(){ if(fct.list[this.idFct] instanceof CartesianFunction){ document.getElementById("editeurFctPrefix").textContent = "f(x) = "; document.getElementById("editeurFctDiv").style.display = "block"; document.getElementById("editeurFctXYDiv").style.display = "none"; document.getElementById("editeurRangeDiv").style.display = "none"; document.getElementById("editeurDeriveesDiv").style.display = "block"; document.getElementById("editeurStyleDiv").style.display = "block"; document.getElementById("editeurAireDiv").style.display = "block"; } else if(fct.list[this.idFct] instanceof ImplicitFunction){ document.getElementById("editeurFctPrefix").textContent = ""; document.getElementById("editeurFctDiv").style.display = "block"; document.getElementById("editeurFctXYDiv").style.display = "none"; document.getElementById("editeurRangeDiv").style.display = "none"; document.getElementById("editeurDeriveesDiv").style.display = "none"; document.getElementById("editeurStyleDiv").style.display = "none"; document.getElementById("editeurAireDiv").style.display = "none"; } else if(fct.list[this.idFct] instanceof PolarFunction){ document.getElementById("editeurFctPrefix").textContent = "r(t) = "; document.getElementById("editeurFctDiv").style.display = "block"; document.getElementById("editeurFctXYDiv").style.display = "none"; document.getElementById("editeurRangeDiv").style.display = "block"; document.getElementById("editeurDeriveesDiv").style.display = "none"; document.getElementById("editeurStyleDiv").style.display = "block"; document.getElementById("editeurAireDiv").style.display = "none"; } else if(fct.list[this.idFct] instanceof ParametricFunction){ document.getElementById("editeurFctDiv").style.display = "none"; document.getElementById("editeurFctXYDiv").style.display = "block"; document.getElementById("editeurRangeDiv").style.display = "block"; document.getElementById("editeurDeriveesDiv").style.display = "none"; document.getElementById("editeurStyleDiv").style.display = "block"; document.getElementById("editeurAireDiv").style.display = "none"; } }, etudier : function(){ fct.etudier(this.idFct); }, supprimer : function(){ fct.enlever(this.idFct); if(!fct.list[this.idFct]){ this.editer(this.idFct - 1); } else{ this.editer(this.idFct); } }, dupliquer : function(){ fct.dupliquer(this.idFct); this.editer(this.idFct + 1); }, apercu : function(){ editorPreview.drawFunction(fct.list[this.idFct]); } }; var editorPreview = { id : "editeurApercu", xGauche : -5, xDroite : 5, yBas : -4, yHaut : 4, largeur : 0, hauteur : 0, multX : 1, multY : 1, ctx: null, init : function(){ var canvas = document.getElementById("editeurApercu"); this.ctx = canvas.getContext("2d"); this.largeur = canvas.width; this.hauteur = canvas.height; this.multX = this.largeur/Math.abs(this.xDroite - this.xGauche); this.multY = this.hauteur/Math.abs(this.yHaut - this.yBas); this.precision = Math.abs(this.xDroite - this.xGauche)/50; }, drawFunction : function(func){ var x, y, pointX, pointY; var ctx = this.ctx; ctx.clearRect(0,0,100,80); ctx.globalAlpha = 0.7; ctx.fillStyle = "rgba(0,0,0,0.5)" ctx.fillRect(0,39.5, 100, 1); ctx.fillRect(49.5,0, 1, 80); ctx.beginPath(); // ctx.lineWidth = func.width/1.8; // ctx.strokeStyle = func.couleur; // ctx.moveTo(-100,-100); // for(x = -5; x <= 5; x+=0.2){ // // Evaluer la valeur y du point x // try{ // y = func.f(x); // } // catch(e){} // if(!isNaN(y)){ // // Transformation des coordonnées // pointX = x * 10 + 50; // pointY = 40 - y * 10; // // // Dessiner la fonction // ctx.lineTo(pointX, pointY); // } // } func.plot(ctx, this.precision, this); // ctx.stroke(); } };