import * as c from '../../../src/modules/cockpit/domain/camera.js' /** 把经度序列解缠成连续弧长(每步取最短弧增量累加)。 */ function unwrap(lons) { let acc = 0 const out = [0] for (let i = 1; i < lons.length; i += 1) { acc += c.shortestAngleDelta(lons[i - 1], lons[i]) out.push(acc) } return out } const from = { lon: 179.9, lat: 10, height: 0 } const to = { lon: -179.9, lat: 10, height: 0 } console.log('== 换中心 lerpPivot 跨 ±180 ==') const seq = [] for (let i = 0; i <= 10; i += 1) seq.push(c.lerpPivot(from, to, i / 10).lon) const arc = unwrap(seq) console.log('落点:', seq.map((v) => v.toFixed(3)).join(' → ')) console.log('弧长:', arc.map((v) => v.toFixed(3)).join(' → ')) console.log('总弧长 °:', arc[arc.length - 1].toFixed(3), '(0.2 才对;-359.8 表示绕了一圈)') console.log('单调推进:', arc.every((v, i) => i === 0 || v >= arc[i - 1] - 1e-12)) console.log('') console.log('== 阻尼 approachPivot 跨 ±180 ==') let shown = { lon: 179.99, lat: 10, height: 0 } const target = { lon: -179.99, lat: 10, height: 0 } const seq2 = [shown.lon] for (let i = 0; i < 10; i += 1) { shown = c.approachPivot(shown, target, 0.3) seq2.push(shown.lon) } const arc2 = unwrap(seq2) console.log('落点:', seq2.map((v) => v.toFixed(3)).join(' → ')) console.log('总弧长 °:', arc2[arc2.length - 1].toFixed(3), '(应 ≈ -0.02)') console.log('单调推进:', arc2.every((v, i) => i === 0 || Math.abs(v) >= Math.abs(arc2[i - 1]) - 1e-12)) console.log('') console.log('== 反方向(-179.9 → 179.9)==') const seq3 = [] for (let i = 0; i <= 10; i += 1) seq3.push(c.lerpPivot({ lon: -179.9, lat: 0 }, { lon: 179.9, lat: 0 }, i / 10).lon) const arc3 = unwrap(seq3) console.log('落点:', seq3.map((v) => v.toFixed(3)).join(' → ')) console.log('总弧长 °:', arc3[arc3.length - 1].toFixed(3), '(应 ≈ +0.2)')