# 更多、更逼真的物理动画:写法与检查清单 ## 原则 1. **公式驱动,不是手绘循环**:位置、角度、面积、时长全部由物理公式对时间 t 实时计算,画面上显示实时读数(日期、距离、高度角、小时数)。 2. **纯函数、seek-safe**:`draw(t)` 只依赖 t;不要在帧间累积变量(粒子用种子随机数 `mulberry32` + 解析式运动)。 3. **按真实比例,除非必须示意**:不能按比例时(如日地大小、轨道椭圆夸大)必须在画面上写"示意"。条形图必须从 0 起量。 4. **一个画面只讲一件事**,用 cue 让关键元素恰好在旁白说出对应词时出现/高亮。 5. 每个场景的"视觉真值"(`visual_truth`)写进 story.json,并在 `make_diagrams.py` 的原理 SVG 里记录公式与数值。 ## 本次用到的物理/天文模型(可直接复用) - **开普勒方程**:M=2π(d−d_peri)/T;牛顿迭代 E−e·sinE=M;ν=2·atan2(√(1+e)sin(E/2), √(1−e)cos(E/2));r=a(1−e·cosE)。e=0.0167086,近日点约 1 月 3 日,ϖ=282.9°,a=149.598e6 km。 - **太阳赤纬**:sinδ = sinε · sinλ_s,ε=23.44°。春分/夏至/秋分/冬至 ≈ 第 78/171/264/354 天。 - **太阳高度/方位**:sin(alt)=sinφ sinδ + cosφ cosδ cosH;半日弧 cosH0=−tanφ·tanδ;正午高度 = 90° − |φ−δ|。北纬 40°:夏至 73.4°、冬至 26.6°,白昼 ≈14.8 h / 9.2 h。 - **光斜射**:光束宽度固定,照射面积 = 宽度 / sin(高度角);单位面积能量 ∝ sin(高度角);40°N 夏/冬比 ≈ 2.1。 - **地轴固定指向**:地轴在黄道坐标系中恒为 N=(0, sinε, cosε),绕日一周不变;北半球倾向太阳 ⇔ N·S>0。 - **轨道视图相机**:右=+y、朝向观察者 B=(cos a,0,sin a)、上 U=B×R;a≈33°。 - **按像素 3D 地球**(core.js `globe`):对每个像素求球面法线 → 经纬度 → 双线性采样等距圆柱纹理;Lambert 明暗 + 平滑晨昏线 + 海洋高光 + 云层 + 夜景灯光 + 大气边缘光;小地球 2× 超采样。纹理由手写海岸线多边形 + 种子 3D 值噪声 fbm 程序生成(`earth_data.js`)。 - **反事实**:把倾角从 23.4° 动画插值到 0°,直射纬度范围随之 ±ε 收缩。 ## 通用物理画法(其他主题) - 力学:积分器用解析解或固定步长重算到 t(从 0 循环到 t,步数有限则可接受);显示矢量箭头(力、速度)与实时数值。 - 光学:射线用 Snell/反射公式逐条计算并画虚线流动动画;光束宽度/面积显示。 - 波/振动:y=A·sin(kx−ωt) 直接绘制,叠加用求和。 - 热/扩散:用解析解(高斯核)或预计算网格,在 t 处取值着色。 - 化学/生物微观:粒子位置 = 种子随机初值 + 解析运动;避免逐帧随机。 ## 版式规则(竖屏 1080×1920) - 安全区:标题区 y<460 留给 DOM;字幕在 y≈1540–1700;页脚 y>1740。画布主内容 y 460–1500。 - 文本芯片 `chip()`:半透明深色底 + 描边,字号 ≥ 24px;关键读数 ≥ 34px。 - 同屏文字/图形不得互相遮挡:本地原型阶段逐场景出图检查(每场景至少 3 个时间点:开头/线索点/结尾)。 - 用两个并列对比(夏 vs 冬、近 vs 远)时,用相同比例尺和相同位置布局,高亮正在被讲到的一侧。 ## 本地原型方法(云端容器) 1. 用 `test/frames.html` 载入 earth_data/core/scenes + 模拟 `CFG`(场景时长与线索为估算值,可由台词字数 ÷ 6.7 估计)。 2. playwright + Chromium(`/opt/pw-browsers/chromium`)对 `SEASONS.draw(t)` 出 PNG;`test/mont.py` 拼接成联系图。 3. gsap 在云端装不上时用 stub,仅用于视觉测试;开发机用真实 node_modules。 4. 真 TTS 后线索时间会变,注意 `fixKeys` 保护并在开发机用 snapshots 复核。 ## 质量检查清单 - [ ] 数字与 claims/visual_truth 一致(距离、角度、时长、日期) - [ ] 图上标注:示意 / 按真实比例 - [ ] 条形图从 0 起量 - [ ] 两半球/两季节对照使用同一画法 - [ ] 动画事件与旁白词对齐(cue) - [ ] 无元素遮挡标题、字幕、页脚 - [ ] 无 `ERR scene:` 红字(draw 里捕获异常时会画红色错误提示)