| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /**
- * @Author: Caven
- * @Date: 2020-05-28 10:24:38
- */
-
- export default function parabola(
- startPosition,
- endPosition,
- height = 0,
- count = 50
- ) {
- //方程 y=-(4h/L^2)*x^2+h h:顶点高度 L:横纵间距较大者
- let result = []
- height = Math.max(+height, 100)
- count = Math.max(+count, 50)
- let diffLng = Math.abs(startPosition.lng - endPosition.lng)
- let diffLat = Math.abs(startPosition.lat - endPosition.lat)
- let L = Math.max(diffLng, diffLat)
- let dlt = L / count
- if (diffLng > diffLat) {
- //base on lng
- let delLat = (endPosition.lat - startPosition.lat) / count
- if (startPosition.lng - endPosition.lng > 0) {
- dlt = -dlt
- }
- for (let i = 0; i < count; i++) {
- let h =
- height -
- (Math.pow(-0.5 * L + Math.abs(dlt) * i, 2) * 4 * height) /
- Math.pow(L, 2)
- let lng = startPosition.lng + dlt * i
- let lat = startPosition.lat + delLat * i
- result.push([lng, lat, h])
- }
- } else {
- //base on lat
- let delLng = (endPosition.lng - startPosition.lng) / count
- if (startPosition.lat - endPosition.lat > 0) {
- dlt = -dlt
- }
- for (let i = 0; i < count; i++) {
- let h =
- height -
- (Math.pow(-0.5 * L + Math.abs(dlt) * i, 2) * 4 * height) /
- Math.pow(L, 2)
- let lng = startPosition.lng + delLng * i
- let lat = startPosition.lat + dlt * i
- result.push([lng, lat, h])
- }
- }
- result.push([endPosition.lng, endPosition.lat, endPosition.alt || 0])
- return result
- }
|