You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
4.6 KiB
228 lines
4.6 KiB
|
|
// Lance la procédure pour dessiner la fonction qui se trouve dans l'input en haut du widget.
|
|
// Permet aussi d'actualiser le graphique.
|
|
function actualiserGraph(){
|
|
affichage.calculer();
|
|
}
|
|
|
|
// Retourne l'index du dernier endroit où se trouve listCharacter dans une chaîne de caractère.
|
|
String.prototype.getLastIndexOf = function(listCharacter, minPos, maxPos){
|
|
var count = 0;
|
|
var parenthese = false;
|
|
if(!maxPos){
|
|
maxPos = this.length;
|
|
}
|
|
for(var i=maxPos; i>=minPos; i--){
|
|
if(this.charAt(i) == ")"){
|
|
count++;
|
|
parenthese = true;
|
|
}
|
|
else if(this.charAt(i) == "("){
|
|
count--;
|
|
}
|
|
// window.console.log(this.charAt(i)+" ; "+count);
|
|
for(var j=0; j<listCharacter.length; j++){
|
|
if(this.charAt(i) == listCharacter[j]){
|
|
if(count<=0){
|
|
if(parenthese){
|
|
parenthese = false;
|
|
}
|
|
else{
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
String.prototype.getIndexOf = function(listCharacter, minPos, maxPos){
|
|
var count = 0;
|
|
if(!maxPos){
|
|
maxPos = this.length;
|
|
}
|
|
for(var i=minPos; i<=maxPos; i++){
|
|
if(this.charAt(i) == "("){
|
|
count++;
|
|
}
|
|
else if(this.charAt(i) == ")"){
|
|
count--;
|
|
}
|
|
for(var j=0; j<listCharacter.length; j++){
|
|
if(this.charAt(i) == listCharacter[j]){
|
|
if(count==0){
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
// Retourne un nombre aléatoire entre a et b.
|
|
function alea(a,b){
|
|
return Math.floor((b-a+1)*Math.random()+a);
|
|
}
|
|
|
|
// ---- Fonctions canvas personnalisées ----
|
|
var ctxPrototype = Object.getPrototypeOf(document.createElement("canvas").getContext("2d"));
|
|
|
|
// Dessiner une bulle
|
|
ctxPrototype.bulle = function(x, y, largeur, hauteur, rayon){
|
|
if(!rayon){
|
|
rayon = 5;
|
|
}
|
|
this.beginPath();
|
|
this.moveTo(x+0, y-rayon);
|
|
this.quadraticCurveTo(x+0, y-0, x+rayon, y-0);
|
|
this.lineTo(x+largeur-rayon, y);
|
|
this.quadraticCurveTo(x+largeur, y-0, x+largeur, y-rayon);
|
|
this.lineTo(x+largeur, y-hauteur+rayon);
|
|
this.quadraticCurveTo(x+largeur, y-hauteur, x+largeur-rayon, y-hauteur);
|
|
this.lineTo(x+rayon, y-hauteur);
|
|
this.quadraticCurveTo(x+0, y-hauteur, x+0, y-hauteur+rayon);
|
|
this.closePath();
|
|
this.fill();
|
|
}
|
|
|
|
|
|
// ---- Fonctions Mathématiques et constantes ----
|
|
// (rempalce sin() par Math.sin(), cos() par Math.cos(), tan() par Math.tan(), etc.
|
|
var pi = 4 * atan(1);
|
|
var PI = pi;
|
|
var e = exp(1);
|
|
|
|
function sin(valeur){
|
|
return Math.sin(valeur);
|
|
}
|
|
function cos(valeur){
|
|
return Math.cos(valeur);
|
|
}
|
|
function tan(valeur){
|
|
return Math.tan(valeur);
|
|
}
|
|
function cot(valeur){
|
|
return 1/Math.tan(valeur);
|
|
}
|
|
function sec(valeur){
|
|
return 1/cos(valeur);
|
|
}
|
|
function csc(valeur){
|
|
return 1/sin(valeur);
|
|
}
|
|
|
|
function asin(valeur){
|
|
return Math.asin(valeur);
|
|
}
|
|
function acos(valeur){
|
|
return Math.acos(valeur);
|
|
}
|
|
function atan(valeur){
|
|
return Math.atan(valeur);
|
|
}
|
|
function acot(valeur){
|
|
return Math.atan(1/valeur);
|
|
}
|
|
function asec(valeur){
|
|
return Math.acos(1/valeur);
|
|
}
|
|
function acsc(valeur){
|
|
return Math.asin(1/valeur);
|
|
}
|
|
|
|
var arcsin = asin;
|
|
var arccos = acos;
|
|
var arctan = atan;
|
|
var arccot = acot;
|
|
var arcsec = asec;
|
|
var arccsc = acsc;
|
|
|
|
function sinh(valeur){
|
|
return (Math.exp(valeur)-Math.exp(-valeur))/2;
|
|
}
|
|
function cosh(valeur){
|
|
return (Math.exp(valeur)+Math.exp(-valeur))/2;
|
|
}
|
|
function tanh(valeur){
|
|
return (Math.exp(valeur)-Math.exp(-valeur))/(Math.exp(valeur)+Math.exp(-valeur));
|
|
}
|
|
function coth(valeur){
|
|
return (Math.exp(valeur)+Math.exp(-valeur))/(Math.exp(valeur)-Math.exp(-valeur));
|
|
}
|
|
function sech(valeur){
|
|
return 1/cosh(valeur);
|
|
}
|
|
function csch(valeur){
|
|
return 1/sinh(valeur);
|
|
}
|
|
|
|
function asinh(valeur){
|
|
return Math.log(valeur+Math.sqrt(Math.pow(valeur,2)+1));
|
|
}
|
|
function acosh(valeur){
|
|
return Math.log(valeur+Math.sqrt(Math.pow(valeur,2)-1));
|
|
}
|
|
function atanh(valeur){
|
|
return Math.log((1+valeur)/(1-valeur))/2;
|
|
}
|
|
function acoth(valeur){
|
|
return Math.log((valeur+1)/(valeur-1))/2;
|
|
}
|
|
|
|
var arcsinh = asinh;
|
|
var arccosh = acosh;
|
|
var arctanh = atanh;
|
|
var arccoth = acoth;
|
|
|
|
function sqrt(valeur){
|
|
return Math.sqrt(valeur);
|
|
}
|
|
function pow(valeur1, valeur2){
|
|
return Math.pow(valeur1, valeur2);
|
|
}
|
|
function root(valeur1, valeur2){
|
|
if(valeur2%2==1 && valeur1<0){
|
|
return -Math.pow(-valeur1, (1/valeur2));
|
|
}
|
|
else{
|
|
return Math.pow(valeur1, (1/valeur2));
|
|
}
|
|
}
|
|
|
|
function exp(valeur){
|
|
return Math.exp(valeur);
|
|
}
|
|
function log(valeur){
|
|
return Math.log(valeur)/Math.log(10);
|
|
}
|
|
function ln(valeur){
|
|
return Math.log(valeur);
|
|
}
|
|
|
|
function abs(valeur){
|
|
return Math.abs(valeur);
|
|
}
|
|
function sign(valeur){
|
|
if(valeur<0){
|
|
return -1;
|
|
}
|
|
else if(valeur>0){
|
|
return 1;
|
|
}
|
|
else{
|
|
return undefined;
|
|
}
|
|
}
|
|
|
|
function round(valeur){
|
|
return Math.round(valeur);
|
|
}
|
|
function ceil(valeur){
|
|
return Math.ceil(valeur);
|
|
}
|
|
function floor(valeur){
|
|
return Math.floor(valeur);
|
|
}
|
|
function random(){
|
|
return Math.random();
|
|
}
|
|
|