Я хочу создать простой Java-плоттер, в котором пользователь может ввести некоторую функцию, такую как 2x + 3, в JTextField, а затем программа будет оценивать выражение в цикле for для каждого отображаемого значения x. Я уже добился того, чтобы закодировать плоттер, в котором я поместил функцию в двойное число следующим образом:
private static double f(double x){
//here i define my expression which shell be plotted
return 2.0*x+3.0;
}
Им я оцениваю это для многих значений x и так далее ...
Однако я не могувыяснить, как пользователь может ввести такое выражение в JTextField. Я уже пытался использовать ScriptEngine
String func = textField.getText();
//...
double x = 1.21;
double value = f(func, x);
private static double f(String in, double p){
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine e = m.getEngineByName("JavaScript");
//replace the var x with its value p
return Double.parseDouble(e.eval(in.replace("x",String.valueOf(p)));
//this however does not work, I dont know how to handle the Object e.eval()
}
Я могу вывести значение, но я не знаю, как извлечь из него двойное значение
System.out.println(e.eval(in.replace("x",String.valueOf(p)));
Далее яне уверен, как продлить это. Например, очень важно, чтобы пользователь вводил выражение типа 2 * x, а не 2x. Я также не знаю, как заставить exp (x) работать и так далее.
Есть ли лучший способ сделать это?
Пользователь должен иметь возможность писать такие вещи, как
- cos (x)
- exp (cos (x ^ 2))
- x ^ 2 / (2x-1.32)
и так далее ..