function ImplicitFunction(txtFct){ this.setFct = function(txt){ this.fct = txt; this.f = new Function("x", "y", "return "+this.fct); } if(txtFct){ this.setFct(txtFct); } this.couleur = fct.couleur; this.width = document.getElementById("inputTaille").value; this.style = document.getElementById("selectStyle").value; this.getX = function(x){ return x; }; this.getY = function(x){ return -1000000; }; this.set = function(f){ var equalPos = f.fct.indexOf("="); if(equalPos >= 0){ f.fct = f.fct.replace("=", "-(") + ")"; } this.setFct(fct.remplacer(fct.verifier(f.fct))); this.couleur = f.couleur; this.width = f.width; this.style = f.style; return this; }; this.get = function(){ var f = {}; f.type = "implicit"; f.fct = this.fct; f.couleur = this.couleur; f.width = this.width; f.style = this.style; return f; }; this.readableText = function(){ return this.fct + " = 0"; }; this.plot = function(ctx, precision, affichage){ var epsilon = 0.01; var width2 = this.width / 2; precision /= 20; ctx.beginPath(); ctx.lineWidth = this.width; ctx.strokeStyle = this.couleur; ctx.fillStyle = this.couleur; ctx.moveTo(-100,-100); for(var x = affichage.xGauche-precision; x <= affichage.xDroite+precision; x+=precision){ for(var y = affichage.yBas-precision; y <= affichage.yHaut+precision; y+=precision){ // Compute function for current (x, y) position z = this.f(x, y); // Check condition f(x, y) = 0 if(!isNaN(z) && Math.abs(z) < epsilon){ // Transform coordinates var pointX = (x - affichage.xGauche) * affichage.multX; var pointY = affichage.hauteur - (y - affichage.yBas) * affichage.multY; ctx.fillRect(pointX-width2, pointY-width2, this.width, this.width); // ctx.beginPath(); // ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true); // ctx.fill(); } } } // ctx.stroke(); }; }