En general, si lo que quieres es representar cualquier tipo de función, la cosa está bastante complicada, porque según creo, el hecho de evaluar cadenas de texto para poder convertirlas en funciones matemáticas es bastante complicado.
En cambio, si separas el problema en distintos tipos de funciones, la cosa puede ir resolviéndose poco a poco. Por ejemplo, para el caso de funciones polinómicas, se me ocurre que podrías hacer algo así:
Código :
function creaVector(Xo:Number, Xn:Number, N:Number):Array{
var vectorX:Array = new Array();
var paso:Number = (Xn-Xo)/N;
for (var i=0;i<=N;i++){
vectorX[i] = Xo + i*paso;
}
return vectorX;
}
function evalua(vectorX:Array, pol:Array):Array{
var vectorY:Array = new Array();
var y:Number = 0;
var powX:Number = 1;
var orden:Number = pol.length-1;
var N:Number = vectorX.length-1;
for(var i=0;i<=N;i++){
for(var j=0;j<=orden;j++){
powX = Math.pow(vectorX[i],j);
y += powX*pol[orden-j];
}
vectorY[i] = y;
y = 0;
powX = 1;
}
return vectorY;
}
La función "creaVector", te crea un vector entre los puntos inicial y final con N puntos intermedios, y te devuelve el array creado. Este es el que usarás como ejeX.
Luego, la función "evalua", se encarga de en cada punto del ejeX (elementos del vectorX), calcular la potencia adecuada y multiplicarla por el coeficiente correspondiente dado en el vector "pol".
El vector "pol", es un vector que almacena los coeficientes del polinomio que deseas representar, en orden decreciente de exponente. Por ejemplo, si quieres representar y = x^2, pol sería
[1(1*x^2), 0(0*x), 0(0)], si quisieras, -x^3+3x^2-2x+4 sería [-1, 3, -2, 4], y así...
De este modo, si quisieras representar y = x^2, bastaría con hacer:
Código :
var polinomio:Array = new Array(1,0,0);
var vectorX:Array = new Array();
var vectorY:Array = new Array();
vectorX = creaVector(0,1,10);
vectorY = evalua(vectorX,polinomio);
Con lo que tendrías los pares x,y (vectorX[i],vectorY[i]) adecuados para poder representar la función. Si hay por aquí alguien familiarizado con Matlab o similares, verá que es básicamente la forma en que trabajan estos programas.
Te dejo a tí el pelearte con "lineTo", "moveTo" y demás, para luego representar los pares de puntos según te convenga.
Con respecto a otro tipo de funciones, sería cuestión de buscarle un poco las vueltas.
Espero que te sirva de algo.
Salu2