在您的示例中,您可以撥打eval()
來創建一個新的JavaScript函數,隨後繪製該函數。當然,那麼你必須提供正確的JavaScript。
第一個簡單的增強將是將digit letter
的所有組合替換爲digit*letter
。例如,用和(1+2)x
替換2x
由(1+2)*x
替代。這可以使用以下正則表達式完成。
/**
* Expand math expressions with suppressed multiplication dots.
* Examples
* 2x -> 2*x
* (2+3)(3+1) -> (2+3)*(3+1)
* Attention with exponents:
* x^2x -> x^2*x
*/
expandShortMath = function(expr) {
var re = /([\)0-9\.])\s*([\(a-zA-Z_])/g;
return expr.replace(re, '$1*$2');
};
在你的榜樣,你會使用這樣的:
eval("function f(x){ return " + expandShortMath(field.value) + ";}");
board.create('functiongraph',[function(x){ return f(x); }]);
不過,爲了安全起見,最好是避免調用eval()
。出於這個原因,JSXGraph爲數學腳本語言JessieCode提供了自己的解析器。只需簡單地給board.create('functiongraph')
提供包含函數項的字符串即可使用該解析器。但是JessieCode也需要乘法星。再次,這可以通過呼叫expandShortMath()
來解決。
var board = JXG.JSXGraph.initBoard('box',
{boundingbox: [-10, 10, 10, -10], axis:true});
board.create('functiongraph',[expandShortMath(field.value)]);
'eval'評估Javascript,'2x'是無效的Javascript。你需要你自己的解析器。 – georg 2014-12-03 10:10:32
我怎麼能這樣做?感謝您的幫助 – Hybrid 2014-12-03 10:16:31
這不是非常複雜,但你必須學習一些東西。從這裏開始:http://en.wikipedia.org/wiki/Parsing#Computer_languages – georg 2014-12-03 10:24:46