真实地图基底
data/map/basemaps.json 记录每个子关卡的底图与「图鉴归一化坐标 → 图片像素」的变换; 图片随包分放在 data/map/maps/*.webp。
坐标与变换
图鉴坐标是每单位独立的归一化空间:原点在底图取景框西北角,y 向下(向南)增大。首版变换是 纯比例映射,不含平移、旋转与镜像:
text
u = x · W v = y · H因此 transform.matrix 恒为 [W, 0, 0, 0, H, 0],coordinate_y_axis 为 down。 不同子关卡的 [0,1] 空间互不相通,不存在全局地图坐标。
变换不是拟合出来的:gameflow 的 MapData 自带西北/东南两个标记摆件,Campsite 又同时带 归一化坐标与世界摆件,两侧配对求解得到零残差映射。
覆盖
- 42 个单位有底图,每个单位恰好一张,没有“一图多单位”;
- 291 条带位置条目中 277 条(95.2%)落在底图不透明区域;
- 未覆盖的单位(如克劳馥庄园、多数挑战古墓与特殊区域)保持散点;
- 14 条落在透明留白的条目,坐标本身没有错,界面用虚线外环标出。
状态与精度
| 状态 | 条件 |
|---|---|
unverified | 三个误差字段必须为 null |
approximate | 中位误差 ≤ 2% 图片对角线 |
calibrated | 中位 ≤ 0.5% 且 P95 ≤ 1% 图片对角线 |
当前 42 条中 7 条为 calibrated(241、243、318、682、2287、2306、4026,共覆盖 212 条 带位置条目),其余 35 条为 approximate——变换同样是解析恒等映射,只是条目数不足以做统计验证。
图片
- 随包分发;42 张 WebP,约 48 MB;
- 开发期由 Vite 中间件映射到
/basemaps/maps/*,构建期作为 asset 输出; - 设置
BASEMAP_IMAGE_ROOT可临时改用其它目录; - 目录不存在时前端拿不到图片地址,自动回退散点。
校验
powershell
cd apps/desktop
pnpm contract:images # 存在性、字节数、SHA-256、WebP 实际尺寸
pnpm contract:check # schema + 真实数据集 + 夹具来源
底图来自 spriters-resource 的三份投稿,作者 vi7ual(2025-12-18 提交,投稿 502127 / 502132 / 502133)。站点声明素材供个人项目与非商业用途;本项目按非商业方式随包分发,版权仍归原权利人。
完整说明见 data/map/README.md。