Browse Source

improve the heading math

tags/2.2.4
Caven Chen 4 years ago
parent
commit
e51ba2a7aa
1 changed files with 9 additions and 20 deletions
  1. 9
    20
      modules/math/heading.js

+ 9
- 20
modules/math/heading.js View File

import Parse from '@dc-modules/parse/Parse' import Parse from '@dc-modules/parse/Parse'


export default function heading(start, end) { export default function heading(start, end) {
let heading = 0
let startPosition = start let startPosition = start
let endPosition = end let endPosition = end

if (!(start instanceof Cesium.Cartesian3)) { if (!(start instanceof Cesium.Cartesian3)) {
startPosition = Parse.parsePosition(start) startPosition = Parse.parsePosition(start)
startPosition = Transform.transformWGS84ToCartesian(startPosition) startPosition = Transform.transformWGS84ToCartesian(startPosition)
endPosition = Transform.transformWGS84ToCartesian(endPosition) endPosition = Transform.transformWGS84ToCartesian(endPosition)
} }


let ff = Cesium.Transforms.eastNorthUpToFixedFrame(startPosition)
let v = Cesium.Cartesian3.subtract( let v = Cesium.Cartesian3.subtract(
endPosition, endPosition,
startPosition, startPosition,
new Cesium.Cartesian3() new Cesium.Cartesian3()
) )
if (v) {
Cesium.Cartesian3.normalize(v, v)
let up = Cesium.Ellipsoid.WGS84.geodeticSurfaceNormal(
startPosition,
new Cesium.Cartesian3()
)
let east = Cesium.Cartesian3.cross(
Cesium.Cartesian3.UNIT_Z,
up,
new Cesium.Cartesian3()
)
let north = Cesium.Cartesian3.cross(up, east, new Cesium.Cartesian3())
heading = Math.atan2(
Cesium.Cartesian3.dot(v, east),
Cesium.Cartesian3.dot(v, north)
)
}
return heading
let vector = Cesium.Matrix4.multiplyByPointAsVector(
Cesium.Matrix4.inverse(ff, new Cesium.Matrix4()),
v,
new Cesium.Cartesian3()
)
Cesium.Cartesian3.normalize(vector, vector)
let heading = Math.atan2(vector.y, vector.x) - Cesium.Math.PI_OVER_TWO
return Cesium.Math.TWO_PI - Cesium.Math.zeroToTwoPi(heading)
} }

Loading…
Cancel
Save