# check **Repository Path**: jsy96/check ## Basic Information - **Project Name**: check - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-20 - **Last Updated**: 2026-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 509simu · 相机仿真参数工具集 ## 更新记录 - **2026-08-28** `pushbroom.html` 更名 `line.html`(v1.0.260828-1)+ `test_pushbroom.cjs` 更名 `test_line.cjs`:工具名「线阵推扫相机参数计算」→「线阵相机参数计算」(title/h1、参数 TXT 文件头注释同步去「推扫」);文件内 pushbroom 字样全部改 line——默认输出文件名 pushbroom.coef → line.coef、参数 TXT 下载名前缀 pushbroom_params_ → line_params_、localStorage 键 pushbroom_coef_state → line_coef_state(浏览器里旧自动保存的输入一次失效,重新输入即可);index.html 入口链接/卡片标题同步并升版 v1.0.260828-1。wiskbroom.html、frame.html 保持不动;`node test_line.cjs` 8 个用例全部通过。 - **2026-08-26** `frame.html` v1.0.260826-6:像素→视线映射**实质性修正定稿**(老金更正):**行号(height,向下)增大 → tanX 增大(+p/f,行号与 tanX 同向下);列号(width,向右)增大 → tanY 减小(−p/f,tanY 向左为正)**,即 tanX = x₀/f + (p/f)·行号、tanY = y₀/f − (p/f)·列号——系数槽位改为 **lookAngleX c₂ = +p/f(行号项)、lookAngleY c₁ = −p/f(列号项)**(v-4/v-5 的「列号→tanX +、行号→tanY +」口径作废)。连锁修正:片 footprint = 沿轨 H·p × 垂轨 W·p;**探元 (0,0) 在该片焦面左上角**(tanX 最小=顶、tanY 最大=左),图像视图(列右/行下)与焦面视图方向一致;虚拟整帧 lookAngleY c₀ = **max** y₀/f(列 0 = 帧左缘)、width = ⌈Δy/p⌉+W(垂轨)、height = ⌈Δx/p⌉+H(沿轨);gf4b 实例的线性项槽位(c₁(X)/c₂(Y) 均 +p/f)系其实例相机自身口径,与本工具设计口径不同(文件语法一致),文档已如实注明。理想 2×2 拼接(行向搭接 2138、列向 2072)仍精确重现实例尺寸 22504×22438。默认 W/H 对调为 5120×2048(保持默认参数全绿)。test_frame.cjs Cases A/B/C/E/F/I 断言按新口径重写(79 项断言全部通过)。 - **2026-08-26** `frame.html` v1.0.260826-5:坐标系口径统一——**相机焦平面坐标**(原点在光轴中心,x 沿飞行方向向下为正、y 垂轨向左为正)与**图像传感器像素坐标**(原点在图像左上角,width 列号向右、height 行号向下)正式命名并全文统一;示意图左上角新增方向标注(↓ 沿轨 x / ← 垂轨 y)。75 项断言全部通过。(该版的行/列→tan 映射方向已在 v1.0.260826-6 更正。) - **2026-08-26** `frame.html` v1.0.260826-4:焦面示意图坐标轴口径**修正定稿**——图中垂直轴为 x(width 方向,lookAngleX)**向下为正**、水平轴为 y(height 方向,lookAngleY)**向左为正**(与线阵 pushbroom 同族的焦面/视线口径;v1.0.260826-2 曾把图旋转成图像口径,系对「width 向右为正」的误读);各片**探元 (0,0) 在该片右上角**(width 序号向下增大、height 序号向左增大);「x(width 方向)向右为正、y(height 方向)向下为正」为**数据/图像口径**,与焦面视图相差 90°(由 lookAngle 正斜率 c₁ = c₂ = p/f 关联),已在示意图说明与底部「格式与口径说明」注明。多项式模型与 .coef 输出完全不变(纯示意调整)。test_frame.cjs Case I 方向断言同步(第 1 片在最上最右、24 片分两列、片竖跨 W·p·k < 横跨 H·p·k),75 项断言全部通过。 - **2026-08-26** `frame.html` v1.0.260826-3 + `pushbroom.html` v1.0.260826-1:删除左栏「输出文件名」**重复且未接线的死输入框**(`in_fname` 在两页 HTML 中存在但 JS 零接线——改它无任何效果,frame 系仿 pushbroom 结构时继承的历史遗留)——输出文件名唯一入口为右栏 .coef 卡片保存按钮旁的输入框(保存下载 / 参数 TXT / localStorage 均读它),为其加「文件名」标签与占位提示;其余行为不变。test_frame.cjs / test_pushbroom.cjs 全部通过。 - **2026-08-26** `frame.html` v1.0.260826-2:焦面布置示意图改为**固定高度容器内的交互视图**,不再随卡片宽度整体拉伸(此前竖长布置会被放大 3 倍以上导致字体巨大、溢出内容被裁剪)——支持**滚轮缩放(以光标为中心)/ 拖动平移 / 右上角 +−适配按钮**,缩放百分比实时显示,文字与线宽反向缩放保持屏幕恒定大小,窗口尺寸变化自动重绘。(该版同时把图轴误改为图像口径,已在 v1.0.260826-4 修正。)test_frame.cjs 新增 Case I(stub DOM 装载 core+DOM 脚本冒烟),9 个用例全部通过。 - **2026-08-26** 新增 `frame.html` v1.0.260826-1(**面阵相机参数计算**,与线阵 pushbroom 对应的 Type=Frame 版本)+ `test_frame.cjs`(8 用例全部通过):① CCD 原点自文本文件读取(kjg.txt 格式:`ccd\tx\ty` 表头 + `片号 x y` 行,TAB/空格/逗号分隔,缺片号列自动编号,mm/μm 单位可选),sensorCount = 原点行数;② lookAngle 为**二元 3 次多项式**(CamPoly=3,每行 10 系数,项序 1,x,y,x²,xy,y²,x³,x²y,xy²,y³),理想模型 lookAngleX c0=x0/f、c1=p/f,lookAngleY c0=y0/f、c2=p/f,其余精确 0;③ 每块含 height 行,输出格式参照 gf4b-VIS.coef(系数 %.18e **双空格**分隔、angleBiasR %.18f 定点)。虚拟整帧块 = 焦面外接框(c0 = 各片原点最小值,已用实例验证两轴严格相等;理想 2×2 拼接搭接 2072×2138 重现实例 22504×22438)。校验:GSD 恒等式、片间 2D 搭接、x/y 投影覆盖间隙、边缘离轴角 ≤ 地平线角、B>1 共用原点提示;焦面布置示意两轴真实比例;TXT 存档含 oN 原点行。index.html 新增入口卡片并升版 v1.0.260826-1(相机参数工具 × 3)。 - **2026-08-26** `wiskbroom.html` v1.0.260826-13:不漏扫判据对比右端改用**球面口径**——沿迹视场角 Ω∥(= L/f)先经球面换算求出**地心张角 Δλ∥ = 2·φ(Ω∥/2)**(星下点居中),**× 地球半径 R(预填 6371 km)得沿迹球面距离**,与**摆扫距离(T×卫星相对地表速度 v_g)**对比大小;原平面近似 D∥ = H·Ω∥ = H·L/f 降为对照量(参数注明"平面近似")。沿迹组新增推导参数「沿迹地心张角 Δλ∥」「沿迹球面距离 = R×Δλ∥」,参考量条带重叠率改用球面口径,约束名/detail/公式说明/分组副标题同步。test_core.cjs Case B/H 断言说明更新并新增球面推导链断言(典型参数:Ω∥ = 0.1024 rad → Δλ∥ = 0.4609° → 球面距离 51.25 km vs 平面 51.2 km),9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-12:时序约束去提示——「摆扫周期 ≥ 成像时长」在 T > T成像(存在往返时间)时由 ⚠ info 提示改为 ✓ ok(T = T成像 + T往返 是正常摆扫时序,有回扫时间不再黄标;仅 T < T成像 的真时序矛盾报红),detail 显示成像 + 往返分解。test_core.cjs Case H 增加回归断言,9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-11:不漏扫判据速度口径定稿——「每次摆扫距离不漏扫」中的 v 明确为**卫星相对地表速度(星下点地速 v_g = v·R/a)**,不再是惯性系轨道速度 v(判据由 T·v ≤ D∥ 改为 T·v_g ≤ D∥,更准确);约束名、参考量、公式说明同步。Case B/H 断言数值更新(v_g·T),9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-10:去重——删除与「每次摆扫距离不漏扫(T·v ≤ D∥)」判据相同、仅速度取值不同的「条带间不漏扫(v_g·T ≤ D∥)」(两者对比对象均为 D∥,保留老金定稿的卫星速度口径),物理约束由 5 条减为 4 条;参考量「摆扫周期内卫星飞行距离 = v_g·T」改为「每次摆扫距离 = T×卫星速度」。test_core.cjs Case B 改验证每次摆扫距离判据(T=8 s 触发)、Case H 改为判据通过侧边界用例(T=6.5 s ok),9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-9:**摆扫方向瞬时视场角定义定稿 = atan(M·p⊥/f)**(整阵列一次成像的瞬时视场,M 为穿迹探测器个数、W = M·p⊥),约束② 按此计算(等价于瞬时地面覆盖 D⊥ > 帧间距离 Δθ×H 的覆盖口径);参考量新增「摆扫方向瞬时视场角 = atan(M·p⊥/f)」,原「摆扫方向分辨率 GSD⊥」更名回「星下点 GSD(穿迹,单像元)」避免术语混淆(瞬时视场角 = 阵列口径,单像元 IFOV = p⊥/f 另列)。9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-8:帧间判据改为角度口径——约束② 更名「**摆扫方向瞬时视场角 > 帧间角度**」(IFOV⊥ = p⊥/f 直接与 Δθ 对比,等价于原地面距离版 IFOV⊥×H > Δθ×H;地面折合值作补充显示,且不再依赖 H 参与判据);参考量「摆扫方向帧间距离折合像元数」简化为「帧间步进折合像元数(Δθ / IFOV⊥)」。test_core.cjs Case F 匹配新名称(IFOV⊥ = 10 μrad < Δθ = 0.6° 触发),9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-7:沿迹组「摆扫周期T」下新增参数「**一个摆扫周期内成像时长 T成像**」(= N_f×t_f 推导,也可由 T − T往返 反推;T 亦可由 T成像 + T往返 组合反推,恒等式参与互检);原「参考量」中的成像时长行移除(升为参数后在推导汇总/输入栏展示)。test_core.cjs Case C/I 增加 T成像 断言,9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-6:参数名精确化——沿迹组参数「摆扫周期 T」改为「摆扫周期T」(无空格;「卫星飞行时长 = 」前缀已于 v1.0.260826-3 移除,页面文案/公式说明同步统一写法)。 - **2026-08-26** `wiskbroom.html` v1.0.260826-5:帧间判据术语定稿——**摆扫方向分辨率 = IFOV⊥×H(= H·p⊥/f),摆扫方向帧间距离 = Δθ×H;分辨率 > 帧间距离才无漏缝**,约束② 更名「帧间无漏缝(摆扫方向分辨率 ≥ 帧间距离)」,bad 分支明确报「帧间漏缝(欠采样)」;参考量「星下点 GSD(穿迹)」更名「摆扫方向分辨率 GSD⊥ = IFOV⊥×H」,「帧间步进折合像元数」同步更名「摆扫方向帧间距离折合像元数」。test_core.cjs Case F 匹配新名称,9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-4:不漏扫判据定稿——**T×速度 < 沿轨方向视场大小对应的地面距离 D∥(= H·Ω∥ = H·L/f)**,① 地速口径(v_g·T ≤ D∥)/ ⑤ 卫星速度口径(T·v ≤ D∥)两条约束同步回改(上一版把对比右端误扩为 v·T成像 + D∥);该判据为保守充分条件(隐含往返期间推进 < D∥)。T = T成像 + T往返 的周期口径、参数与 noCheck 机制保持不变。test_core.cjs Case B/H 触发值回改(T=8 s / 7 s),9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-3:摆扫周期口径修正——T = 成像时长 T成像(N_f×t_f)+ 往返时间 T往返(回扫,不成像);参数「卫星飞行时长 = 摆扫周期 T」更名「摆扫周期 T」,新增参数 T往返(= T − N_f·t_f 推导,也可作为输入由 T = N_f·t_f + T往返 反推 T);「T = N_f·t_f(连续摆扫)」标记为假设型公式(noCheck)不再参与恒等式互检,避免输入带往返时间的 T 报假矛盾。test_core.cjs:Case C 增加 T往返=0 断言,新增 Case I(T往返 反推 T),共 9 个用例全部通过。 - **2026-08-26** `wiskbroom.html` v1.0.260826-2:物理约束第 ② 项由「帧间不漏扫(s ≤ D⊥)」改为「帧间步进 ≤ 摆扫方向地面分辨率(H·Δθ ≤ GSD⊥)」——帧间角度 Δθ 对应地面步进与穿迹单像元 GSD(H·p⊥/f)对比,超过即帧间欠采样报警,不再检测帧间漏扫;参考量「帧间重叠率(穿迹)」同步改为「帧间步进折合像元数(H·Δθ / GSD⊥)」。test_core.cjs 基准夹具镜转速改为 4e-4 rad/s(Δθ 步进 4 m = 0.8 像元 ≤ GSD⊥ 5 m),Case F 改验证欠采样报警(8 个用例全部通过)。 - **2026-08-26** `wiskbroom.html` v1.0.260826-1:物理约束第 ⑤ 项由「摆扫边缘帧间不漏扫(球面)」(边缘球面步进 vs 边缘球面瞬时覆盖)改为「每次摆扫距离不漏扫(T·v ≤ D∥)」——每次摆扫距离 = 摆扫周期 T × 卫星轨道速度,与沿迹地面覆盖 D∥ 对比(较地速口径 v_g·T 更保守);边缘球面步进/瞬时覆盖仍保留在「参考量」中。test_core.cjs 新增 Case H(8 个用例,全部通过)。 单文件网页工具(双击用浏览器打开即用,无任何依赖)+ Node 自测脚本: | 文件 | 说明 | |---|---| | `index.html` | 主页「爱玩的老人」(v1.0.260828-1,视觉美化版:极光渐变背景、玻璃吸顶栏、渐变图标卡片与悬停/入场动效):上半部分「本站工具与游戏」依次链接 line.html / frame.html / wiskbroom.html / game.html(一起小学在最右侧),下半部分「有趣的声音」链接 bigdog.leige.site / music.leige.site | | `wiskbroom.html` | 面阵相机卫星摆扫 · 参数一致性校验(v1.0.260826-12) | | `line.html` | 线阵相机参数计算(v1.0.260828-1) | | `frame.html` | 面阵相机参数计算(v1.0.260826-6) | | `test_core.cjs` | wiskbroom.html 核心计算自测 | | `test_line.cjs` | line.html 核心计算自测(含用 taijing304_MSS.coef 复现几何模型) | | `test_frame.cjs` | frame.html 核心计算自测(含用 gf4b-VIS.coef 解析复现几何模型) | | `taijing304_MSS.coef` | 线阵相机安装系数实例文件(4 波段 × 3 片 × 3072 探元),线阵工具(line.html)的输出格式参照 | | `gf4b-VIS.coef` | 面阵相机安装系数实例文件(Type=Frame,2×2 拼接 4 片 12288×12288 + 虚拟整帧 22504×22438),面阵工具的输出格式参照 | | `kjg.txt` | 面阵 CCD 焦面原点实例文件(24 片,TAB 分隔 `ccd/x/y`,mm),面阵工具的原点输入格式 | | `game.html` | 独立娱乐页面(v1.0.260820-1) | 全站所有页面页脚均悬挂备案号「鄂ICP备2025092414号-4」,链接至工信部备案系统。 --- ## 部署(阿里云 ECS · Ubuntu 24.04) 全站为纯静态文件,由 nginx 托管,站点根目录 `/var/www/html/`,公网地址 `http://101.132.36.207/`。更新页面后把对应文件重新上传覆盖即可(如 `scp index.html root@:/var/www/html/`)。 --- ## 工具一:面阵相机卫星摆扫 · 参数一致性校验(wiskbroom.html) 对摆扫(whisk-broom)成像模式的面阵相机卫星做粗略几何/时序计算:输入焦距、轨道、探测器、帧频、摆扫等参数,工具自动推导缺失量、并对所有冗余给出方式做**矛盾检测**(含漏扫判据)。 **使用**:左栏按组输入(全局/轨道、沿迹、穿迹),留空的参数自动由公式推导(推导值显示在输入框下方);右栏实时输出推导汇总、恒等式一致性校验、物理约束(帧间无漏缝、每次摆扫距离不漏扫、时序、地平线)、参考量。容差(默认 2%)可调;输入自动保存到浏览器 localStorage;「保存/读取参数 TXT」为参数存档(UTF-8 带 BOM,行格式 `参数ID = 数值 [单位]`,`#` 后为注释)。 **口径**:内部统一 SI 单位;45° 扫描镜 2:1(视线角速度 = 2×镜转速);总摆扫角 Θ = N_f×Δθ;摆扫周期 **T = 成像时长 T成像(N_f×t_f)+ 往返时间 T往返**(回扫,不成像,可输入反推;T往返 > 0 属正常时序,不提示);帧间判据 `摆扫方向瞬时视场角 > 帧间角度 Δθ`(瞬时视场角 = atan(M·p⊥/f),整阵列一次成像的瞬时视场;等价于瞬时地面覆盖 D⊥ > 帧间距离 Δθ×H,大于才无漏缝,反之报帧间漏缝/欠扫描);不漏扫判据 `摆扫距离(T×v_g)≤ 沿迹球面距离`(v_g 为卫星相对地表速度 = 星下点地速 = v·R/a;沿迹球面距离 = 沿迹视场角 Ω∥ = L/f 先求**地心张角 Δλ∥ = 2·φ(Ω∥/2)**(星下点居中),**× 地球半径 R(预填 6371 km)**;平面近似 D∥ = H·L/f 仅作对照);地心角/幅宽/沿迹球面距离用球面换算,其余为星下点平面近似。公式细节见页面底部「公式与口径说明」。 **自测**:`node test_core.cjs`(9 个用例:推导链闭环、漏扫触发、矛盾报警、每次摆扫距离判据、T往返反推 T、TXT 往返等)。 --- ## 工具二:线阵相机参数计算(line.html) 输入线阵相机参数,实时计算并**生成/保存 `taijing304_MSS.coef` 格式的安装系数文件**到本地。 ### 输入参数 - **探测器/格式**:波段数 B、每波段 CCD 片数 N、每片探元数 W、拼接重叠像元数 ovl(默认 0)、多项式阶数 nCamPoly(默认 5 → 每行 6 个系数)、文件块顺序(片优先/波段优先)、虚拟片 X 取法、输出文件名; - **轨道/光学**:焦距 f、探元尺寸 p、轨道高度 H、GSD——恒等式 `GSD = p·H/f`(星下点平面近似),任留空一项自动推导;地球半径 R(预填 6371 km,供地平线角校验); - **CCD 排列(沿轨方向 X)**:各波段均有沿轨**基偏移**(按"焦面距离 d(tanX = d/f)"或"离轴角 α(tanX = tanα)"输入,可切换、自动换算,支持 d₁+Δd 等间距快速填充 + 每波段单独修改): - **共线排列**:tanX(片i, 波段b) = 波段 b 基偏移; - **交错排列**:tanX(片i, 波段b) = 波段 b 基偏移 + 奇/偶片沿轨交错分量(奇、偶分量各一值,各波段共用)。 ### 输出与校验 - 右栏实时 **.coef 文件预览**(即文件字节内容)与「保存 .coef 文件」按钮; - 推导汇总:像元角步长 p/f、虚拟片宽、全视场角、幅宽(= 虚拟片宽×GSD)、边缘离轴角/边缘穿轨采样等; - 一致性校验:GSD 恒等式(超容差报红)、ovl 范围、奇偶错开/波段错开、边缘离轴角 ≤ 地平线角等; - **焦面布置示意图**:各片 CCD 在焦面上的位置关系(x 沿轨向下为正、y 垂轨向左为正,探元 0 在各片左端;垂轨真实比例、沿轨行间距示意),按波段着色,悬停显示数值; - 布置明细:各波段 tanX/离轴角/沿轨地面基线(配准用,交错排列含奇/偶片总 tanX),各片 det0/末探元 tanY 与垂轨角范围; - 输入自动保存 localStorage;「保存/读取参数 TXT」参数存档(同工具一风格,元参数行 `layout / offsetMode / blockOrder / tolerance / filename`,`dbN` 为第 N 波段偏移)。 ### .coef 文件格式(与 taijing304_MSS.coef 一致) ASCII、**CRLF 换行、无 BOM**、末尾单个换行;系数 C 风格 `%.18e`(指数至少两位,如 `e-02`);`angleBias*` 三行 `%.18f` 定点。 ``` nCamPoly=5 多项式阶数(每行系数个数 = 阶数+1) bandCount=4 波段数 B sensorCount=3 每波段 CCD 片数 N angleBiasRoll=0.000... 零偏置(%.18f) angleBiasPitch / angleBiasYaw 同上 angleBiasR:1.0e+00 ... 3×3 行优先单位阵(9 个 %.18e,冒号后无空格) 随后 1 + N×B 个探元块,每块 3 行: width= 9166 探元数("width=" 后有一个空格) lookAngleX: c0 c1 … 沿轨方向 tan 多项式(自变量为 0 基探元序号 j) lookAngleY: c0 c1 … 垂轨方向 tan 多项式("lookAngleY:" 后有一个空格) ``` - 系数含义:多项式取值 (tanX, tanY) 使 **`(tanX, tanY, 1)` 为相机坐标系探元视线矢量**; - **块顺序(片优先)**:虚拟片 → 第 1 片的第 1…B 波段 → 第 2 片的第 1…B 波段 → …(与需求说明及实例文件一致;也可切换为波段优先); - **虚拟片(第 0 块)**:沿轨最前(图上最上方)那组 CCD 拼接得到的虚拟 CCD,width = N·W−(N−1)·ovl;lookAngleX 默认取**全局最小**(与 taijing304_MSS.coef 实例一致):共线 = tanX 最小的波段,交错 = 最小基偏移 + 较小交错分量;备选「片内最大→片间最小」= 最大基偏移 + 较小分量; - **几何模型**(已用实例文件数值复现,最大相对偏差 1.4e-16):像元角步长 s = p/f;整线关于主点垂轨居中,半跨度 = 虚拟片宽×s/2;第 i 片 lookAngleY 常数项 = 半跨度 − (i−1)·(W−ovl)·s、一次项 = −s;lookAngleX 常数项 = tan(波段/奇偶片沿轨离轴角)、高次项为 0; - 实例文件参数(反推):p/f = 3.995861429234007983e-06、ovl = 25 像元、虚拟片宽 9166。 ### 自测 ``` node test_line.cjs ``` 8 个用例:实例文件几何复现(13 块全部系数)、片/波段块顺序、垂轨布置居中、GSD 闭包与矛盾报警、交错排列、非法参数拦截、%.18e/%.18f 与 CRLF 字节格式、参数 TXT 往返(含角度单位、BOM、dbN 行)。 --- ## 工具三:面阵相机参数计算(frame.html) 输入面阵(Frame)相机参数,实时计算并**生成/保存 `gf4b-VIS.coef` 格式的安装系数文件**到本地。与线阵(工具二)对应的面阵版本,三点差异:① 文件头多 `Type=Frame`、每块多一行 `height=`;② lookAngle 为**二元 3 次多项式**(`CamPoly=3`,每行 10 系数,项序 1, x, y, x², xy, y², x³, x²y, xy², y³);③ 每片 CCD 的焦面原点 (x₀, y₀) 自文本文件读取(kjg.txt 格式),sensorCount = 原点行数。 ### 输入参数 - **CCD 原点(相机焦平面坐标)**:读取 kjg.txt 格式文本文件或直接粘贴编辑——首行 `ccd\tx\ty` 表头(可省略)+ 每行 `片号 x y`(TAB/空格/逗号/分号分隔),`#` 与 `//` 为注释,缺片号列按行序自动编号;x/y 为**相机焦平面坐标**(原点在光轴中心:x 沿飞行方向向下为正、y 垂轨向左为正);坐标单位 mm/μm 可选;片序 = 文件行序;页面预填 kjg.txt 全部 24 片原点; - **探测器/格式**:波段数 B(各波段共用原点,B>1 时提示)、每片探元数 W×H、文件块顺序(片优先/波段优先)、输出文件名;CamPoly 固定 3; - **轨道/光学**:焦距 f、探元尺寸 p、轨道高度 H、GSD——恒等式 `GSD = p·H/f`(星下点平面近似)任留空一项自动推导;地球半径 R(预填 6371 km,供地平线角校验)。 ### 几何模型(定稿口径) - 映射(定稿):**行号(height,向下)增大 → tanX 增大(+p/f,行号与 tanX 同向下);列号(width,向右)增大 → tanY 减小(−p/f,tanY 向左为正)**,即 tanX = x₀ᵢ/f + (p/f)·行号、tanY = y₀ᵢ/f − (p/f)·列号;第 i 片 `lookAngleX`:c₀ = x₀ᵢ/f(焦面原点切角)、**c₂ = +p/f(行号项)**,`lookAngleY`:c₀ = y₀ᵢ/f、**c₁ = −p/f(列号项)**,其余精确 0(gf4b 实例线性项位于 c₁(X)/c₂(Y) 且均 +5.517241379310344e-07、高次项为标定噪声——该槽位/符号系实例相机自身口径,与本工具设计口径不同,文件语法一致); - **虚拟整帧(第 0 块)**:焦面外接框——width = ⌈(max y₀ − min y₀)/p⌉ + W(垂轨、列向)、height = ⌈(max x₀ − min x₀)/p⌉ + H(沿轨、行向);lookAngleX c₀ = min x₀/f(行 0 = 帧顶),lookAngleY c₀ = **max y₀/f**(列 0 = 帧左缘、tanY 左正)且一次项 −p/f;2×2 拼接对应维 = 2×12288−ovl(实例 22504 = 2×12288−2072、22438 = 2×12288−2138,行向/列向设计搭接 2138/2072 像元,理想输入精确重现实例尺寸;实测片位姿偏差使外接框比设计格网大一二十至三十五像元,属正常)。 ### 输出与校验 - 右栏实时 **.coef 文件预览**(即文件字节内容)与「保存 .coef 文件」按钮; - 推导汇总:像元角步长 p/f、单片物理尺寸、虚拟整帧尺寸、焦面外接框与中心偏移、X/Y/对角视场角、星下点 GSD、幅宽×幅高、边缘离轴角等; - 一致性校验:GSD 恒等式(超容差报红)、**片间 2D 搭接**(footprint = 沿轨 H·p × 垂轨 W·p,相交对数与最大搭接像元)、**沿轨/垂轨投影覆盖间隙**(区间并集,存在间隙提示;不排除棋盘形 2D 空洞)、边缘离轴角 ≤ 地平线角、B>1 共用原点提示; - **焦面布置示意图**(相机焦平面坐标,原点在光轴中心):垂直轴 x 沿飞行方向**向下为正**(lookAngleX = x/f)、水平轴 y 垂轨方向**向左为正**(lookAngleY = y/f),**两轴真实比例**,左上角方向标注 ↓ 沿轨 / ← 垂轨;映射:行号↑ → tanX↑(向下)、列号↑ → tanY↓(向右),各片**探元 (0,0) 在该片左上角**(片横跨 = 垂轨 W·p、竖跨 = 沿轨 H·p,图像视图与焦面视图方向一致);虚线框为虚拟整帧外接框,悬停显示焦面原点与 tan 范围;固定高度容器内**滚轮缩放(以光标为中心)/ 拖动平移 / +−适配按钮**,缩放百分比实时显示,文字大小不随缩放变化; - 布置明细:各片 ccd 号、原点、tanX/tanY 范围、最远角点离轴角; - 输入自动保存 localStorage;「保存/读取参数 TXT」参数存档(原点以 `oN = x y` 行保存,`originUnit` 定单位,`Horb` 为轨道高度)。 ### .coef 文件格式(与 gf4b-VIS.coef 一致) ASCII、**CRLF 换行、无 BOM**、末尾单个换行;系数 C 风格 `%.18e` 以**两个空格**分隔(线阵 taijing 文件为单空格);`angleBias*` 三行 `%.18f` 定点,`angleBiasR` 为 %.18f 定点、3×3 行组间两空格(实例 [0][2] 为 −0 属标定噪声,工具生成 +0)。 ``` Type=Frame 帧式相机标识 CamPoly=3 二元 3 次多项式(每行 10 系数) bandCount=1 波段数 B sensorCount=4 每波段 CCD 片数 N(= 原点行数) angleBiasRoll=0.000... 零偏置(%.18f) angleBiasPitch / angleBiasYaw 同上 angleBiasR:1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 3×3 行优先单位阵(%.18f,冒号后无空格) 随后 1 + N×B 个探元块,每块 4 行: width= 22504 图像列数("width=" 后有一个空格) height= 22438 图像行数("height=" 后有一个空格) lookAngleX: c0 c1 … c9 tanX(x,y),c1 为 x 一次项("lookAngleX:" 后有一个空格) lookAngleY: c0 c1 … c9 tanY(x,y),c2 为 y 一次项 ``` - 系数含义:多项式取值 (tanX, tanY) 使 **`(tanX, tanY, 1)` 为相机坐标系探元视线矢量**;自变量为 0 基**像素坐标**——x = width 列号 0…W−1(向右)、y = height 行号 0…H−1(向下),像素原点在图像左上角;映射 c₂(X) = +p/f(行号→tanX 同向下)、c₁(Y) = −p/f(列号向右、tanY 左正),探元 (0,0) 在片焦面**左上角**;块顺序默认片优先(虚拟整帧 → 第 1 片各波段 → 第 2 片各波段 → …),可切波段优先。 ### 自测 ``` node test_frame.cjs ``` 8+1 个用例:gf4b 实例解析(头字段/块结构/虚拟块 c0=min/尺寸搭接 2072×2138 分解/双空格字节格式)、理想 2×2 拼接重现实例尺寸 22504×22438、实例片 c0 反推原点重生成逐位复原、kjg.txt 解析与鲁棒性(单位换算/缺片号列/逗号分号/重复片号/BOM)、块顺序与二元多项式语义、字节级 golden 逐字节比对、校验触发(GSD/搭接/间隙/地平线/原点缺失/非法参数)、参数 TXT 往返(含 oN 原点行与 μm 单位)、stub DOM 装载页面脚本的渲染与缩放控件冒烟。