# docs/figures —— 论文插图 本目录的 10 张 PNG 全部进入论文:`docs/paper/main.tex` 用 `\graphicspath{{../figures/}}` 直接引用,论文不重绘、也不手抄图内任何数字。 全部插图由同一脚本生成: ```bash uv run python scripts/plot_paper_figures.py # 依赖 numpy 与 matplotlib ``` 数据来自 `docs/paper/data/` 下的复算结果(`practice-results.json`、 `practice-geometry.json`、正式统计快照)与第四问覆盖计划; 逐图来源见 `manifest.json`。图注为中文,并注明数据取自演练局还是正式测试。 ## 约定 - 默认配色与字体沿用 matplotlib 默认样式,不引入自定义调色板; - 图内不放标题与解释性文字,只保留坐标轴、图例与必要的元素标注,含义由图注承担; - 图例置于坐标区外,散点与角度标注按位置自动避让,保证互不重叠; - 输出 PNG(300 dpi、白底)。 ## 图清单 | 文件 | 内容 | 数据来源 | 论文位置 | | --- | --- | --- | --- | | `framework-decision-loop.png` | 观测—候选集—任务—动作的闭环决策过程 | 论文问题分析的结构 | 图 1 | | `steps-state-machine.png` | 会话状态机(未进入 / 倒计时 / 接口开放 / 关闭) | `src/mcm26b/protocol/client.py` | 图 2 | | `timing-attachment-example-105-111-194-199.png` | 附件计时示例:逐动作耗时构成与单步合计 | 题面附件 2 的计时示例 | 图 3 | | `geo-q1-geometry.png` | 问题一三幅几何:角域交会、定位区域放大(直径圆与最小包围圆)、等边三角形反例 | `practice-geometry.json`(演练局观测复算)、`examples/q1/triangle.json` | 图 4 | | `geo-q2-guaranteed-reception-disk.png` | 问题二:截断角域外接圆与安全候选盘,右侧为半径分解 | `src/mcm26b/config.py` | 图 5 | | `geo-q4-minimum-cover-31-points.png` | 问题四:31 点最小命中集分布与定向源读图约定 | `src/mcm26b/guarantee/plans/q4_mincover_v2.json` | 图 6 | | `selfbuilt-q3-search-clear-path.png` | 问题三演练局:全向源搜索与清除路径(含每次检测的位置、结果与示向度射线) | `referee-data/sessions/<问题三主局>/log.jsonl` | 图 7 | | `selfbuilt-q4-search-clear-path.png` | 问题四演练局:混合源路径(含定向源朝向、±90° 可见范围与检测点) | `referee-data/sessions/<问题四主局>/log.jsonl` | 图 8 | | `practice-virtual-time.png` | 44 局演练的总虚拟时间分布与全清局均值 | `practice-results.json` | 图 9 | | `formal-time-bars.png` | 六次正式测试的累计虚拟耗时分解 | `formal-results.csv` | 图 10 | 论文主局案例编码不写死在脚本里:`plot_paper_figures.py` 读取 `docs/paper/data/practice-macros.tex` 中的 `PractQThreeMainCase` / `PractQFourMainCase`,与正文口径同源。 ## 归档与回放 `examples/replay/` 归档了论文主局的行为日志副本,便于在没有 `referee-data/` 时仍能绘图; `scripts/archive_replay_logs.py` 用于把新的演练局追加归档: ```bash uv run python scripts/archive_replay_logs.py --list # 本机有哪些局 uv run python scripts/archive_replay_logs.py <案例编码> # 追加归档 ```