# Zhicalc **Repository Path**: DFFSDSDRTSGRWG/Zhicalc ## Basic Information - **Project Name**: Zhicalc - **Description**: No description available - **Primary Language**: JavaScript - **License**: GPL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-10-26 - **Last Updated**: 2026-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 更新日志 · 枳计算器 GraphCalc > 本文件记录所有值得用户与开发者知晓的变更。 > 版本号遵循语义化(主.次.修订),对应 `manifest.json` 的 `versionName`; > 每次发布 `versionCode` 递增。格式参考 [Keep a Changelog]。 > > 包名:`com.math.tianry.graphcalc` | 目标平台:Xiaomi Watch S3(466×466,Vela OS / Vela JS) --- ## [1.1.0] - 2026-10-25 > RPK:`com.math.tianry.graphcalc.debug.1.1.0.rpk`(54,206 B) > 定位:**补债 + 加功能** —— 修复早期遗留的可见缺陷,补上多语言与设置页,解决拖动卡顿。 ### 新增 - **多语言**:中文 / English / Ελληνικά / 跟随系统,运行时切换、偏好持久化、 系统语言变更自动刷新(`common/i18n.js` + `src/i18n/{zh,en,el}.json`,56 键一致)。 - **设置页**:语言切换 + 关于入口,当前语言高亮(`pages/settings`)。 - **游标读数扩展**:轻点曲线显示 `x / y / y' / S` —— `y'` 为导数(中心差分,步长 0.5px),`S` 为 0 到游标的定积分(辛普森 24 段); 区间内有一点不可求即显示 `--`,不给错值。 - **零点标记**:可见区内曲线跨 x 轴处自动标红点(最多 6 个),状态栏显示「零点 N」。 - **键盘第二页**:标题栏 `2/2` 翻页,放出 8 个此前打不出来的函数: `asin acos atan lg floor ceil round sign`。 ### 修复 1. **拖动超过 60px 图象边缘露空白** —— 位移无上限而图元只画到外扩边界; 改为"折叠":累计位移过大时把偏移并入视口。 2. **曲线屏幕中途断掉** —— 笔触池画满即丢弃剩余路径;改为按弧长自适应间距, 宁可点稀,绝不断线。 3. **8 个函数不可达** —— 引擎支持但键盘打不出来(Vela 无文本输入);已上第二页。 4. **关于页宣传了不存在的功能** —— "x 范围/定义域自定义"从未实现,已删除。 5. **表达式错误永远不可见** —— 失败后 `updateStatus()` 同 tick 覆盖错误文案; 现在仅成功时刷新,并把具体原因带给用户(`括号不匹配` / `未知符号 abc` / `非法字符 @`)。 6. **拖动画面撕裂** —— 折叠时图元补偿符号写反(`-dx` 应为 `+dx`), 网格与曲线朝相反方向撕开,真机剧烈抖动;已修正并加单测锁定。 7. **"线成点"** —— 每采样段预留一点导致可见区间距被拉到 17.7px(点宽仅 7px); 改为按累计弧长布点 + 可见区优先分配。 8. **关于页超出圆屏** —— 末行落在圆外不可见;已收缩边距压进圆内。 ### 性能 真机反馈「拖动卡」,归因:拖动本身只花 1 次 setStyle/帧,为修复 #1 引入的 "每 40px 全量重绘"才是退化来源。重构后(离线测算,真机以实测为准): | 指标 | 改前 | 改后 | |---|---|---| | 一次全屏拖动的全量重绘 | 9 次 | **1 次** | | 折叠需改的笔触节点 | 140 个 | **0**(整层偏移) | | 折叠时其余图元 | 271 个 | 91 个 | | 零点定位 evalRPN | ≈100 次 | **0**(线性插值) | | 样式更新总量 | ~2070 | **~410** | 外扩边距 `M` 60 → 140(一次拖动只折叠 1~2 次)。降载旋钮:`M` → `COLS` → `CAP_PEN` → `PEN_STEP`。 曲线密度实测(COLS=90, M=140, 30px/单位):`sin x`/直线/`x²/10` ≈ 4px 连续; `sin 3x` 6.6px 连续;`sin 8x` 13.9px 与 tan 渐近线 57.7px 断续(采样分辨率限制,已知问题)。 ### 内部重构 - 引擎独立为 `src/common/engine.js`,抛结构化错误码(`empty`/`badNumber`/ `unknownSymbol`/`illegalChar`/`unbalanced`)+ `detail`,文案由页面按语言翻译。 - 绘图工具独立为 `src/common/plot.js`(`walkPens` / `shiftLeft` / `shiftTop` / `shiftBoth`)。 - 新增离线单测 `tools/*.test.mjs` 共 **35 条**,`npm test` 一键跑: 一元负号优先级、`^` 右结合、隐式乘法、折叠平移符号不变量、笔触不断线、 可见区点密度、四份语言包键集与占位符一致。 - 模板文案改为数据绑定 `{{L.xxx}}`(函数调用不随语言重渲染)。 ### 升级注意 1. `manifest.json` **必须同时声明 `system.storage` 与 `system.configuration`**, 少一个则 `npm run build` 挂在 `afterCompile: missing feature` 且不报文件名。 2. **`versionCode` 从 1 递增到 2**(只改 `versionName` 会被覆盖安装判为非升级)。 3. 主界面第 5 键由「关于」改为「设置」,关于页改从设置页进入。 4. 多语言不再走平台 `$t`(`@system.configuration` 无 setter,改不了平台语言)。 语言偏好存 `@system.storage` 的 `gc.lang`,空串 = 跟随系统。 5. 新增路由 `pages/settings`,已登记于 `router.pages`。 ### 已知问题 - 桌面图标名不随语言变化(平台无应用名本地化机制)。 - `b ≥ 8` 高频曲线断续(超采样分辨率,提高 `COLS` 可改善)。 - 拖动中新露出的边缘点较稀(外扩区步长 3×,仅拖动途中可见)。 - `pages/detail` 为遗留脚手架死页面;`src/manifest C.json` 会被误打进 RPK(586 B)。 - 多屏变体 `pages/index C/`、`pages/index(Redmi watch)/` 未纳入本轮改动。 - `npm run release` 需 `sign/` 证书目录,当前缺失(调试构建不受影响)。 - 无真机自动化测试,本轮改动均待人工点测(验收清单见发布说明)。 --- ## [1.0.0] - 2026-10-24 初版发布。 ### 新增 - 直角坐标绘图 `y = f(x)` 与参数方程绘图 `x = X(t), y = Y(t)` (参数模式可画隐式/反函数曲线,如 `y = x^y` → `x = t^(1/t), y = t`)。 - 表达式引擎:词法分析 → 调度场(Shunting-Yard)→ RPN 求值; 变量 `x t a b c`、常量 `pi e`、16 个函数、隐式乘法、一元负号、科学计数法。 - 14 个函数预设,左右滑动切换;屏幕键盘自定义表达式(35 键,不依赖系统输入法)。 - 视口交互:拖动平移、+/− 缩放、轻点取值游标、a/b/c 参数步进(「切换」循环选择)。 - 关于页;加载过渡动画;x / y 双表达式并列编辑(点哪行输入哪行)。 - 纯 DOM 矢量渲染(零 canvas、零 transform),圆点笔触曲线;全 ES5 语法。 --- [Keep a Changelog]: https://keepachangelog.com/zh-CN/1.1.0/