V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
WangLiCha
V2EX  ›  程序员

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

  •  
  •   WangLiCha · 127 天前 · 890 次点击
    这是一个创建于 127 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    \tan\left(x\right)
    

    又或者说进一步复杂点的对数函数,软键盘的方式输入(调用 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 入手?还是说这个问题的复杂程度其实是我无法胜任的应该尽量改变需求?

    1 条回复    2024-07-24 20:20:40 +08:00
    tinytoadd
        1
    tinytoadd  
       127 天前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1046 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 20:45 · PVG 04:45 · LAX 12:45 · JFK 15:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.