новые иконки в OpenBoard
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.
OpenBoard/resources/library/applications/GraphMe.wgt/JavaScript/PolarFunction.js

113 lines
2.4 KiB

6 years ago
function PolarFunction(txtFct){
this.setFct = function(txt){
this.fct = txt;
this.f = new Function("t", "return "+this.fct);
};
if(txtFct){
this.setFct(txtFct);
}
this.couleur = fct.couleur;
this.width = document.getElementById("inputTaille").value;
this.startAngle = 0;
this.endAngle = 2*Math.PI;
this.from = "0";
this.to = "2*pi";
this.style = document.getElementById("selectStyle").value;
this.getX = function(t){
var r = this.f(t);
return r * Math.cos(t);
};
this.getY = function(t){
var r = this.f(t);
return r * Math.sin(t);
};
this.set = function(f){
this.setFct(fct.remplacer(fct.verifier(f.fct)));
this.couleur = f.couleur;
this.width = f.width;
this.style = f.style;
this.from = f.from;
this.to = f.to;
this.startAngle = eval(fct.remplacer(fct.verifier(f.from)));
this.endAngle = eval(fct.remplacer(fct.verifier(f.to)));
return this;
};
this.get = function(){
var f = {};
f.type = "polar";
f.fct = this.fct;
f.couleur = this.couleur;
f.width = this.width;
f.style = this.style;
f.from = this.from;
f.to = this.to;
return f;
};
this.readableText = function(){
return "r(t) = " + this.fct;
};
this.setStartEnd = function(start, end){
if(start > end){
var tmp = start;
start = end;
end = start;
}
this.startAngle = start;
this.endAngle = end;
};
this.plot = function(ctx, precision, affichage){
if(this.style == "points"){
precision *= 2;
}
ctx.beginPath();
ctx.lineWidth = this.width;
ctx.strokeStyle = this.couleur;
ctx.fillStyle = this.couleur;
notDefined = true;
for(var t = this.startAngle; t <= this.endAngle; t+=precision){
var r = this.f(t);
if(!isNaN(r)){
// Transform coordinates
var x = r * Math.cos(t);
var y = r * Math.sin(t);
var pointX = (x - affichage.xGauche) * affichage.multX;
var pointY = affichage.hauteur - (y - affichage.yBas) * affichage.multY;
// Draw point
if(notDefined){
notDefined = false;
ctx.moveTo(pointX, pointY);
}
else{
if(this.style == "continu"){
ctx.lineTo(pointX, pointY);
}
else if(this.style == "points"){
ctx.beginPath();
ctx.arc(pointX, pointY, this.width, 0, 2*Math.PI, true);
ctx.fill();
}
else{
ctx.lineTo(pointX, pointY);
notDefined = true;
}
}
}
}
if(this.style != "points"){
ctx.stroke();
}
};
}