怎么自己开发一个类似 GeoGebra 的可视化输入函数绘图工具?

13次阅读

共计 947 个字符,预计需要花费 3 分钟才能阅读完成。

目前的工作内容需要开发一个类似 GeoGebra 的可视化输入函数绘图工具,目标用户是非专业人员,需要支持完全通过鼠标操作进行可视化输入。公式可以通过 LaTeX 渲染,但是不能让用户感知到有 LaTeX 的存在。公式有可能会复杂一点,比如下面这样:

y=frac{2tanleft(xright)}{log_{2}{left|sqrt[3]{3x}right|}}

其实已经做了一部分了,基于 Web 前端开发,用了 MathQuill 库作为 LaTeX 表达式的渲染和可视化编辑;
另一方面通过 JS 函数绘图的方法也搞定了,没有使用现成的库,但是 tan(x) 这种存在间断点的函数也是能正确绘制的;
目前最大的问题还是不知道怎么把用户通过 MathQuill 的库自定义输入的 LaTeX 表达式编译成 JS 函数。比如上面的tan(x),通过软键盘的方式输入过后,实际得到的 LaTeX 字符串是:

tanleft(xright)

又或者说进一步复杂点的对数函数,软键盘的方式输入(调用 MathQuill 的实例将当前的 LaTeX 表达式设置为log_{2}{x})过后再次编辑,把 x 改成 x+1,表达式就会变成下面这样:

log_2x+1

非常头疼。

本身我没有学过计算机专业课,不过大概知道这一块算是编译原理需要解决的内容,我在做的东西应该是一个基于 LaTeX 语法的 JS 表达式引擎,但光是知道这些还是不太够。
目前的成果是,找到了一款名叫 filtrex 的 npm 库,他是基于另一个叫做 jison 的库提供了基础的 JS 表达式引擎功能,而这个 jison 是 Bison 的 JS 版本,Bison 则是一款专业的语法分析工具。
通过 GPT-4o 添加了一些我设定的语法规则,实际用起来发现只能做到正确解析我预设的函数,真正的用户输入和 MathQuill 的输出千变万化,无法一一穷举。
比如我可以做到解析 (x)^{2}, 但是把(x) 编辑成 (x+1) 过后,整个式子会变成 (x+1)^2,jison 提示“Expecting ‘LBRACE’, got ‘NUMBER’”,又无法解析了。更不要说log_2x+1 这种看起来就没法解析的 LaTeX 了。

各位 V 友有什么好的建议吗?是不是我走的方向有点错误,不应该从直接解析 LaTeX 入手?还是说这个问题的复杂程度其实是我无法胜任的应该尽量改变需求?

正文完
 0