Files
mcm-26-b/docs/figures
2026-09-13 08:52:23 +08:00
..
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00
123
2026-09-13 08:52:23 +08:00

docs/figures —— 论文插图

每张图只输出 PNG,由 scripts/make_figures.py 用 matplotlib 生成。 manifest.json 记录每张图的数据来源(路径 + sha256 前 12 位 + 行数)与生成命令。

uv run python scripts/make_figures.py                 # 全部 11 张
uv run python scripts/make_figures.py --list          # 图名
uv run python scripts/make_figures.py --only geo-q3-seven-point-coverage
uv run python scripts/make_figures.py --scale 1.5     # 整体放大(尺寸倍率)

依赖:matplotlib、Pillow、docs/paper/fonts/ 下的字体。 matplotlib 缓存写入仓库内 .mpl-cache/,不污染用户目录。

约定

  • 图内不放标题、图注与解释性文字,只保留坐标轴、图例与数据标注; 图的含义由文件名与下表承担,解释写在论文正文。
  • 配色(scripts/make_figures.py::C):深蓝 #1f4e79 主流程与协议, 砖红 #b03a2e 真值源与关键结论,墨绿 #1e7a5f 清除与通过项, 土黄 #b8860b 后备与警示,灰色只用于网格与次要文字。
  • 字体:中文宋体 SongtiSC-Regular/Bold,标题黑体 HeitiSC-Light/Medium, 数字与西文 Times New Roman,均取自 docs/paper/fonts/,与 main.tex 一致。
  • 输出为 PNG(savefig.dpi = 200,另有 --scale 倍率),按 160 mm 宽排版时 与正文同字号。

图清单

文件 内容 数据来源
flow-overall-architecture.png 总体思路:题面抽象、在线三层、四问主线、三条闭环 src/mcm26b/config.py、docs/B题建模分析与实施计划.md
steps-state-machine.png 会话状态机(IDLE / 倒计时 / OPEN / CLOSED) docs/协议规则表与状态机.md、src/mcm26b/protocol/client.py
timing-attachment-example-105-111-194-199.png 附件计时示例逐步推演 docs/协议规则表与状态机.md
timing-measured-q3-10-sources.png 实测一局的虚拟时间分解(累计曲线 + 构成) referee-data/sessions/BBM9-HZG2-77N5-NKKC/log.jsonl
geo-q1-convex-intersection-zoom.png 问题一:角域交会总览 + 定位区域放大(直径圆与 MEC) output/q1/practice/U5ZW-P9KN-TCAG-R7ST_observations.json
geo-q1-diameter-circle-counterexample.png 问题一:直径圆不覆盖的反例(等边三角形布站) examples/q1/triangle.json
geo-q2-guaranteed-reception-disk.png 问题二:候选盘、截断角域外接圆、安全盘 B(c, 1000−a) src/mcm26b/config.py、docs/algo-2.md
geo-q3-seven-point-coverage.png 问题三:七点覆盖(7 个 1000 m 接收盘的并集覆盖 Ω)与三套计划对比 src/mcm26b/planner/seven.py、docs/algo-3.md
geo-q4-minimum-cover-31-points.png 问题四:31 点最小命中集与 forward_half_disk 语义 src/mcm26b/guarantee/plans/q4_mincover_v2.json
replay-webui-q3-omnidirectional.png WebUI 回放画布复现(全向局,10 源全清) referee-data/sessions/BBM9-HZG2-77N5-NKKC/log.jsonl
replay-webui-q4-directional.png WebUI 回放画布复现(定向源局) referee-data/sessions/GM56-DFXZ-XKDM-XYV7/log.jsonl

后两张对应 WebUI 的预览功能:把回放器画布上的 Ω 与真值源、运动轨迹、 检测示向度射线、清除标记,以及右侧事件流水与底部虚拟时间轴一起导出。

数据来源与复现

  • timing-measured-*、replay-webui-* 读评测机行为日志(JSONL,含真值)。 referee-data/ 被 .gitignore 忽略,因此另归档两局到 examples/replay/; 没有评测机数据时脚本自动改读归档,图一致。

    uv run python scripts/archive_replay_logs.py --list        # 本机有哪些局
    uv run python scripts/archive_replay_logs.py <案例编码>     # 追加归档
    
  • geo-q1-convex-intersection-zoom.png 读官方演练留档 output/q1/practice/*_observations.json(同样被忽略)。文件缺失时改读 examples/q1/triangle.json 反例算例,图仍可用,只是案例不同。

  • 问题一的几何量由生产求解器 mcm26b.geometry.solve 现算; 问题三、问题四直接读覆盖计划与证书,不手抄数字。