Files
mcm-26-b/docs/几何计算示意图册.md
T
2026-09-13 08:52:23 +08:00

209 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 几何计算示意图册
> 本册逐图给出坐标口径、关键量与图中各元素的含义。插图位于 [`figures/`](figures/),复现命令:
>
> ```bash
> uv run python scripts/make_figures.py --only geo-q1-convex-intersection-zoom,\
> geo-q1-diameter-circle-counterexample,geo-q2-guaranteed-reception-disk,\
> geo-q3-seven-point-coverage,geo-q4-minimum-cover-31-points
> ```
>
> 图中的数字由脚本现算:问题一调用生产求解器,问题三、四直接读覆盖计划与证书;
> 来源与 sha256 记在 [`figures/manifest.json`](figures/manifest.json)。
统一的坐标与符号约定:
- 世界坐标以 Ω 圆心为原点,$x$ 轴向右、$y$ 轴向上,单位**米**;
- Ω 是半径 $R=1800$ m 的圆盘;源的有效接收半径 $r_{\rm eff}\in[1000,1500]$ m;
- 示向度 $\theta$ 以 $+x$ 轴为 $0°$ 逆时针为正,误差半角 $\delta=1°$;
- 清除半径 $r_{\rm clear}=20$ m;
- "可保证清除" ⟺ 存在一点使整个候选区域落在该点 20 m 内 ⟺ $\rho\le 20$ m(充分)。
---
## 图 1 问题一:角域交会与定位区域
![问题一角域交会](figures/geo-q1-convex-intersection-zoom.png)
**左(总览)**:三个检测点(官方演练案例 `U5ZW-P9KN-TCAG-R7ST`,频道 9)
各自的**前向角域** $W_i=\{p:\angle(p-s_i)-\theta_i\in[-1°,+1°]\}$ 画成窄扇形
(2° 宽,图中放大成可见宽度);三者交集就是定位区域 $P$。检测点相距 600~900 m,
而 $P$ 的直径只有 24 m,所以左图里 $P$ 缩成一个点——这是**必须做局部放大**的原因。
**右(放大,视野 ±31.4 m)**:以最小包围圆圆心为中心:
- 浅蓝扇形 = 三个角域在放大框内的可见部分;三者**重叠成白色区域**= $P$;
- 红色实线多边形 = $P$ 的顶点边界(与左图同一个集合);
- 蓝色虚线圆 = **直径圆**,半径 $D/2=11.9984$ m,圆心是中点 $(-450.634,\ 508.944)$;
- 绿色实线圆 = **最小包围圆(MEC)**,$\rho=12.0686$ m,圆心 $(-449.977,\ 507.953)$。
**关键量(图 (c) 栏)**
| 量 | 值 | 判定 |
| --- | ---: | --- |
| 直径 $D(P)$ | 23.9967 m | 顶点对枚举(凸集上最远点必为顶点) |
| MEC 半径 $\rho$ | 12.0686 m | Welzl 算法 + 支撑点枚举对照 |
| 直径圆最大超出 $E$ | +0.6040 m | $E>0$ ⇒ **直径圆不覆盖** $P$ |
| $\rho\le20$ m | 成立 | ⇒ **存在可保证清除的点**(取 MEC 圆心) |
> 这两个结论不矛盾:题目问"直径圆能否覆盖"(答案:不能,$E>0$)
> 与"能否保证清除"(答案:能,$\rho\le20$ m)是**两个不同的问题**。
> $E$ 的定义:$E=\max_i\lVert v_i-o\rVert-D/2$,$o$ 为直径中点;
> 精确算术下最远顶点对就在圆周上,故 $E\ge0$,$E>0$ 即覆盖失败,
> 达到最大值的顶点就是可独立复核的失败证据。
---
## 图 2 问题一:直径圆不覆盖的反例
![直径圆反例](figures/geo-q1-diameter-circle-counterexample.png)
等边三角形布站($S_1(-1000,0)$、$S_2(540,-866)$、$S_3(520,901)$,示向度
$1°,121°,241°$,误差半角 $1°$)。三条 2° 宽的角域交出一个**等边三角形**
$P$:顶点 $(0,0)$、$(40,0)$、$(20,34.641)$。
- 直径 $D=40.0000$ m,最远点对是底边两端 ⇒ 直径圆圆心 $(20,0)$、半径 20 m;
- 到第三个顶点 $(20,34.641)$ 的距离是 $20\sqrt3\approx34.6410$ m > 20 m,
故**直径圆不覆盖**:$E=+14.6410$ m(图中箭头所指);
- 该反例的最小包围圆半径 $\rho=40/\sqrt3\approx23.0940$ m **> 20 m**,
属于"覆盖失败且无法保证清除"的更坏情形。
> 反例是**符合题设测向条件**的:把真实源放在三角形中心 $(20,20\sqrt3/3)$,
> 三个检测点的真实方位与读数偏差均小于 $1°$,且三个检测距离都小于 1500 m,
> 所以它不是"脱离测向模型的任意图形"。构造与证明见
> [`问题一解答.md`](问题一解答.md) 第六节。
---
## 图 3 问题二:保证接收的候选盘与安全盘
![问题二保证接收盘](figures/geo-q2-guaranteed-reception-disk.png)
**候选集**(首次观测之后可能的位置集合):
$$
K_1=\Omega\ \cap\ W(s_1,\theta_1\pm\delta)\ \cap\ B(s_1,\ 1500),
$$
即"Omega 内、首次角域内、且距离不超过最大接收半径"的三者之交。
**解析安全盘**:截断角域(扇形,半径 $R_{\max}=1500$ m、半角 $\delta=1°$)
的最小包围圆恰为 $B(c,a)$,其中 $c=s_1+a\boldsymbol u$($\boldsymbol u$ 为示向度单位向量),
$$
a=\frac{R_{\max}}{2\cos\delta}=\frac{1500}{2\cos1°}=750.1142\ \text{m}.
$$
于是对安全盘内任一点 $q$、扇形内任一点 $p$:
$$
\lVert q-p\rVert\le a+(1000-a)=1000\ \text{m}
\ \Longrightarrow\ q\ \text{必然收到源的信号},
$$
$$
\boxed{\ \text{安全盘半径}=1000-a=249.8858\ \text{m}\ }
$$
(严格非空;图中绿色实心圆,圆心 $c=(649.62,\ 375.06)$)。
第二检测点就在该盘内选,目标是**最小化最坏保守后验包围半径**,
移动与检测成本作次目标;交会角只用于同分筛选与可解释性说明。
> 图中 $a$ 与 1000 m 两个圆几乎重合是可预期的:$\delta$ 只有 $1°$,
> $a=R_{\max}/(2\cos\delta)$ 与 $R_{\max}/2$ 相差 0.0114%,
> 因此**安全盘的"安全"主要来自角域约束,而不是圆心位置**。
---
## 图 4 问题三:七点解析覆盖
![问题三七点覆盖](figures/geo-q3-seven-point-coverage.png)
**站点集**:原点 + 半径 $a$ 的六等分环,
$S(a)=\{(0,0)\}\cup\{a(\cos k\pi/3,\ \sin k\pi/3):k=0,\dots,5\}$。
**定理(`algo-3.md` §4.2)** 当 $0<a/\sqrt3\le R$ 时
$$
\max_{g\in\Omega}\min_{s\in S(a)}\lVert g-s\rVert
\le D(a):=\max\Bigl\{\frac{a}{\sqrt3},\ \sqrt{R^2+a^2-\sqrt3Ra}\Bigr\}.
$$
代入默认 $a=1159.7$ m、$R=1800$ m:
$$
D(a)=984.5391\ \text{m}<1000\ \text{m}
\quad(\text{几何余量 }15.46\ \text{m}).
$$
**图上看到的就是这个证明**:7 个半径 1000 m 的接收盘(浅绿,裁剪在 Ω 内)的
并集**完全覆盖** Ω,最坏点出现在 $(0,-1800)$(Ω 正下方边界,图中圈出),
到最近站点 $1159.7$ m(正下方环站)的距离恰为 984.54 m。
数值复核(脚本内 20 m 网格):Ω 内 25445 个采样点全部被覆盖,**缺口 0**——
解析上界与数值结果一致到小数点后 3 位。
**代价对比**:七点每轮 7 次检测即可证明"无源",49 点网格要 49 次;
巡回长度 $6a\approx6.96$ km(对照 49 点的 NN 巡回约 36.4 km)。
$a$ 的可行下界 $a_{\min}\approx1122.9558$ m(零余量),默认配置留 15 m 以上余量。
**为什么能"发现即证明"**:某频道若在**全部**站点都测得 `no_signal`,
由覆盖定理知该频道必无源(负观测只能排除该站点 1000 m 圆盘,而 $r_{\rm eff}\ge1000$ m),
于是可以安全销账;所有频道销账 ⇒ 完成证明成立 ⇒ 立即 `/exit`。
---
## 图 5 问题四:定向源的 31 点最小命中集与联合信念
![问题四最小命中集](figures/geo-q4-minimum-cover-31-points.png)
**覆盖语义变了**:定向源只向**朝向 $\pm90°$ 的前向半球**辐射,
所以"某站点附近一定收到"这件事必须同时考虑**源的位置与朝向**:
$$
\text{站点 }s\text{ 能发现源}\iff
\lVert s-\text{pos}\rVert\le r_{\rm eff}\ \wedge\
\angle\bigl(\text{heading},\ s-\text{pos}\bigr)\le90°.
$$
这个语义记作 `forward_half_disk`(图中右侧示意)。
**31 点最小命中集**(`q4_mincover_v2`,图中红点):
| 项 | 值 |
| --- | --- |
| 点数 | 31(离线贪心最小命中集,取代 49 点网格) |
| 设计参数 | $r_{\rm design}=965$ m + 前向角裕量 $5°$ |
| 运行期证书 | 15 m / 72 朝向档,325.62 万个 (位置, 朝向) 采样格,**缺口 0** |
| 最坏命中距离 | 990.051 m |
| 最近邻巡回 | 23.9 km ≈ 4776.8 s 虚拟时间 |
| 旧计划对照 | `q4_mincover_v1` 在 15 m/72 档下有 **566** 个缺口(粗采样过拟合) |
**位置 × 朝向联合信念**:负观测(`no_signal`)在问题四里**只约束朝向**——
它只能排除"朝向正对本站点"的那些朝向档,位置信息几乎不更新。
因此证据层维护网格 × 朝向档的联合分布,可见性判据必须与引擎一致
(距离 $\le r_{\rm eff}$ 且夹角 $\le90°$),并按格内角裕量保守裁剪。
当信念坍缩到有限格时启用**后备盲清**:就近到可疑格 `/clear`,
把盲清次数从 125.7 次/局压到 **4.3 次/局**。
> **本轮修复的正确性缺陷**:旧版 `no_signal` 的朝向裁剪规则反向、且漏计格内角裕量,
> 会删掉真源所在的朝向档。已修复,并由
> `tests/test_joint_belief.py` 的随机观测序列保留性测试固化。
---
## 附:把图接进论文
`docs/paper/main.tex` 目前用表格承载结论,插图按下例插入即可:
```latex
\begin{figure}[htbp]
\centering
\includegraphics[width=0.95\textwidth]{figures/geo-q1-convex-intersection-zoom.png}
\caption{问题一:角域交会得到的定位区域,以及直径圆与最小包围圆的关系。}
\label{fig:geo-q1}
\end{figure}
```
图片按 160 mm 宽排版。图内不含标题与图注,说明写在 `\caption` 与正文。