docs/figures —— 论文插图
本目录的 10 张 PNG 全部进入论文:docs/paper/main.tex 用
\graphicspath{{../figures/}} 直接引用,论文不重绘、也不手抄图内任何数字。
全部插图由同一脚本生成:
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 用于把新的演练局追加归档:
uv run python scripts/archive_replay_logs.py --list # 本机有哪些局
uv run python scripts/archive_replay_logs.py <案例编码> # 追加归档