跳转到内容
View in the app

A better way to browse. Learn more.

彼岸论坛

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
欢迎抵达彼岸 彼岸花开 此处谁在 -彼岸论坛

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

发表于

目前的工作内容需要开发一个类似 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 入手?还是说这个问题的复杂程度其实是我无法胜任的应该尽量改变需求?

Featured Replies

No posts to show

创建帐户或登录来提出意见

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.