| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- 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)')
|