deeptwins-engine-3d 0.1.76 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/Build/DeepTwins/Image/noise.png +0 -0
- package/dist/assets/Build/DeepTwins/Workers/CustomRasterClip.worker.js +1 -2
- package/dist/assets/Build/DeepTwins/Workers/MvtVector.worker.js +1 -1
- package/dist/assets/Build/Map3d/ThirdParty/Workers/zip-web-worker.js +640 -0
- package/dist/assets/Build/Map3d/ThirdParty/wasm_splats_bg.wasm +0 -0
- package/dist/assets/Build/Map3d/ThirdParty/zip-module.wasm +0 -0
- package/dist/assets/Build/Map3d/Workers/chunk-27NG6PQR.js +456 -0
- package/dist/assets/Build/Map3d/Workers/chunk-2JVMMMWT.js +353 -0
- package/dist/assets/Build/Map3d/Workers/chunk-2Y2XYQCS.js +1481 -0
- package/dist/assets/Build/Map3d/Workers/chunk-34RF3V5G.js +220 -0
- package/dist/assets/Build/Map3d/Workers/chunk-35H7BYLJ.js +1800 -0
- package/dist/assets/Build/Map3d/Workers/chunk-57OGEF5V.js +435 -0
- package/dist/assets/Build/Map3d/Workers/chunk-5PX3DYJA.js +196 -0
- package/dist/assets/Build/Map3d/Workers/chunk-7B5XGQRN.js +171 -0
- package/dist/assets/Build/Map3d/Workers/chunk-ATLWOZFF.js +39 -0
- package/dist/assets/Build/Map3d/Workers/chunk-BMSUECTA.js +1055 -0
- package/dist/assets/Build/Map3d/Workers/chunk-C6IA4TKW.js +476 -0
- package/dist/assets/Build/Map3d/Workers/chunk-CZ44I32U.js +157 -0
- package/dist/assets/Build/Map3d/Workers/chunk-DE6UV44R.js +122 -0
- package/dist/assets/Build/Map3d/Workers/chunk-DUCCKVOG.js +834 -0
- package/dist/assets/Build/Map3d/Workers/chunk-EBJBPIYX.js +239 -0
- package/dist/assets/Build/Map3d/Workers/chunk-EYSYQ2R6.js +138 -0
- package/dist/assets/Build/Map3d/Workers/chunk-FMCAAUQI.js +368 -0
- package/dist/assets/Build/Map3d/Workers/chunk-GMYZNRRQ.js +2717 -0
- package/dist/assets/Build/Map3d/Workers/chunk-GWPNZZV4.js +781 -0
- package/dist/assets/Build/Map3d/Workers/chunk-HLP2U4KW.js +758 -0
- package/dist/assets/Build/Map3d/Workers/chunk-HSJSUPQV.js +500 -0
- package/dist/assets/Build/Map3d/Workers/chunk-I73Q3AG7.js +58 -0
- package/dist/assets/Build/Map3d/Workers/chunk-IMZ4YIMV.js +511 -0
- package/dist/assets/Build/Map3d/Workers/chunk-IZSK4DVF.js +421 -0
- package/dist/assets/Build/Map3d/Workers/chunk-JKLMRPKK.js +75 -0
- package/dist/assets/Build/Map3d/Workers/chunk-KGM345JM.js +691 -0
- package/dist/assets/Build/Map3d/Workers/chunk-L4IR5U4G.js +102 -0
- package/dist/assets/Build/Map3d/Workers/chunk-MG4EVQH2.js +44 -0
- package/dist/assets/Build/Map3d/Workers/chunk-NXWEFAZJ.js +300 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PDFAJISJ.js +59 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PHWZFJR5.js +100 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PLE7CHBE.js +101 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PN3GIZ5Q.js +163 -0
- package/dist/assets/Build/Map3d/Workers/chunk-PXL5XLHV.js +1073 -0
- package/dist/assets/Build/Map3d/Workers/chunk-QYXOF5JC.js +959 -0
- package/dist/assets/Build/Map3d/Workers/chunk-R2LIFXV3.js +115 -0
- package/dist/assets/Build/Map3d/Workers/chunk-R4W6IRJZ.js +10357 -0
- package/dist/assets/Build/Map3d/Workers/chunk-R5PZXG56.js +1258 -0
- package/dist/assets/Build/Map3d/Workers/chunk-RZQLZIUI.js +629 -0
- package/dist/assets/Build/Map3d/Workers/chunk-SIBDD6Y4.js +390 -0
- package/dist/assets/Build/Map3d/Workers/chunk-U5NN6JTQ.js +398 -0
- package/dist/assets/Build/Map3d/Workers/chunk-UA5RPPP3.js +73 -0
- package/dist/assets/Build/Map3d/Workers/chunk-UXLKFS3C.js +305 -0
- package/dist/assets/Build/Map3d/Workers/chunk-VUX4BQIM.js +37 -0
- package/dist/assets/Build/Map3d/Workers/chunk-WJDUUUJS.js +684 -0
- package/dist/assets/Build/Map3d/Workers/chunk-XBJOJHWX.js +139 -0
- package/dist/assets/Build/Map3d/Workers/chunk-XJDMTNKD.js +634 -0
- package/dist/assets/Build/Map3d/Workers/chunk-XUCXZZE5.js +963 -0
- package/dist/assets/Build/Map3d/Workers/chunk-YIKGVMJ5.js +287 -0
- package/dist/assets/Build/Map3d/Workers/chunk-YTNCIBPQ.js +262 -0
- package/dist/assets/Build/Map3d/Workers/chunk-ZMDUYETO.js +55 -0
- package/dist/assets/Build/Map3d/Workers/chunk-ZW52HXFN.js +2857 -0
- package/dist/esm/analyze/LineOfSightAnalysis.js +1 -326
- package/dist/esm/analyze/SubmergenceAnalysis.js +1 -137
- package/dist/esm/analyze/SunLightAnalysis.js +1 -91
- package/dist/esm/analyze/TerrainExcavationAnalysis.js +1 -612
- package/dist/esm/analyze/ViewshedAnalysis.js +1 -292
- package/dist/esm/cameraControl/ModelRoamHistory.js +1 -639
- package/dist/esm/cameraControl/ModelRoamRealTime.js +1 -874
- package/dist/esm/cameraControl/Roam.js +1 -418
- package/dist/esm/cameraControl/Rotate.js +1 -134
- package/dist/esm/cameraControl/RotateInPlace.js +1 -99
- package/dist/esm/constant.d.ts +90 -0
- package/dist/esm/constant.js +1 -1287
- package/dist/esm/deepTwins/index.js +1 -121
- package/dist/esm/drawCommand/index.js +1 -3
- package/dist/esm/drawCommand/viewShed/Event.js +1 -142
- package/dist/esm/drawCommand/viewShed/RectangularSensorPrimitive.js +1 -1306
- package/dist/esm/drawCommand/viewShed/ViewShadowPrimitive.js +1 -66
- package/dist/esm/drawCommand/viewShed/ViewShedAnalyserLayer.js +1 -466
- package/dist/esm/drawCommand/viewShed/ViewShedMap.js +1 -1238
- package/dist/esm/drawCommand/viewShed/config.js +1 -21
- package/dist/esm/drawCommand/volumeCloud/GeometryPrimitive.js +1 -89
- package/dist/esm/drawCommand/volumeCloud/ImprovedNoise.js +1 -112
- package/dist/esm/drawCommand/volumeCloud/VolumeClouds.js +1 -91
- package/dist/esm/drawer/algorithm.js +1 -314
- package/dist/esm/drawer/common.js +1 -965
- package/dist/esm/drawer/coordinate.js +1 -184
- package/dist/esm/drawer/index.d.ts +1 -1
- package/dist/esm/drawer/index.js +1 -688
- package/dist/esm/drawer/plotUtil.js +1 -266
- package/dist/esm/drawer/shape/Assemble.js +1 -415
- package/dist/esm/drawer/shape/AttackArrow.js +1 -442
- package/dist/esm/drawer/shape/BaseShape.js +1 -383
- package/dist/esm/drawer/shape/Bow.js +1 -375
- package/dist/esm/drawer/shape/Circle.js +1 -461
- package/dist/esm/drawer/shape/Curve.js +1 -386
- package/dist/esm/drawer/shape/DragPoint.js +1 -211
- package/dist/esm/drawer/shape/Elliptic.js +1 -491
- package/dist/esm/drawer/shape/Formation.js +1 -395
- package/dist/esm/drawer/shape/PincerArrow.js +1 -445
- package/dist/esm/drawer/shape/Point.js +1 -131
- package/dist/esm/drawer/shape/Polygon.js +1 -368
- package/dist/esm/drawer/shape/Polyline.js +1 -325
- package/dist/esm/drawer/shape/RegularPolygon.js +1 -468
- package/dist/esm/drawer/shape/RightAngleArrow.js +1 -423
- package/dist/esm/drawer/shape/Sector.js +1 -568
- package/dist/esm/drawer/shape/StraightArrow.js +1 -422
- package/dist/esm/drawer/shape/SwallowtailArrow.js +1 -438
- package/dist/esm/drawer/types.js +1 -11
- package/dist/esm/drawer/utils.js +1 -381
- package/dist/esm/global.css +22 -1
- package/dist/esm/graphicLayer/BaseEntity.js +1 -51
- package/dist/esm/graphicLayer/BaseLayer.js +1 -730
- package/dist/esm/graphicLayer/BasePointPrimitive.js +1 -45
- package/dist/esm/graphicLayer/BasePrimitive.js +1 -36
- package/dist/esm/graphicLayer/BasePrimitiveInstance.js +1 -37
- package/dist/esm/graphicLayer/BaseSource.d.ts +1 -1
- package/dist/esm/graphicLayer/BaseSource.js +1 -630
- package/dist/esm/graphicLayer/BillboardEntity.js +1 -106
- package/dist/esm/graphicLayer/BillboardPrimitive.js +1 -119
- package/dist/esm/graphicLayer/BoxEntity.js +1 -99
- package/dist/esm/graphicLayer/BoxPrimitive.js +1 -48
- package/dist/esm/graphicLayer/BoxPrimitiveInstance.js +1 -91
- package/dist/esm/graphicLayer/EllipseEntity.js +1 -110
- package/dist/esm/graphicLayer/EllipsePrimitive.js +1 -47
- package/dist/esm/graphicLayer/EllipsePrimitiveInstance.js +1 -98
- package/dist/esm/graphicLayer/EllipsoidEntity.js +1 -118
- package/dist/esm/graphicLayer/EllipsoidPrimitive.js +1 -48
- package/dist/esm/graphicLayer/EllipsoidPrimitiveInstance.js +1 -113
- package/dist/esm/graphicLayer/GraphicLayerCollection.js +1 -491
- package/dist/esm/graphicLayer/HtmlEntity.d.ts +4 -0
- package/dist/esm/graphicLayer/HtmlEntity.js +1 -189
- package/dist/esm/graphicLayer/LabelEntity.js +1 -110
- package/dist/esm/graphicLayer/LabelPrimitive.js +1 -127
- package/dist/esm/graphicLayer/ModelEntity.js +1 -122
- package/dist/esm/graphicLayer/ModelPrimitive.js +1 -59
- package/dist/esm/graphicLayer/ModelPrimitiveInstance.js +1 -86
- package/dist/esm/graphicLayer/PointEntity.js +1 -94
- package/dist/esm/graphicLayer/PointPrimitive.js +1 -107
- package/dist/esm/graphicLayer/PolygonEntity.js +1 -103
- package/dist/esm/graphicLayer/PolygonGroundPrimitive.js +1 -49
- package/dist/esm/graphicLayer/PolygonGroundPrimitiveImageMaterialInstance.js +1 -87
- package/dist/esm/graphicLayer/PolygonPrimitive.js +1 -60
- package/dist/esm/graphicLayer/PolygonPrimitiveImageMaterialInstance.js +1 -84
- package/dist/esm/graphicLayer/PolygonPrimitiveInstance.js +1 -101
- package/dist/esm/graphicLayer/PolylineEntity.js +1 -96
- package/dist/esm/graphicLayer/PolylineGroundPrimitive.js +1 -55
- package/dist/esm/graphicLayer/PolylineGroundPrimitiveInstance.js +1 -85
- package/dist/esm/graphicLayer/PolylinePrimitive.js +1 -53
- package/dist/esm/graphicLayer/PolylinePrimitiveInstance.js +1 -85
- package/dist/esm/graphicLayer/PolylineVolumeEntity.js +1 -105
- package/dist/esm/graphicLayer/PolylineVolumePrimitive.js +1 -47
- package/dist/esm/graphicLayer/PolylineVolumePrimitiveInstance.js +1 -94
- package/dist/esm/graphicLayer/WallEntity.js +1 -96
- package/dist/esm/graphicLayer/WallPrimitive.js +1 -47
- package/dist/esm/graphicLayer/WallPrimitiveInstance.js +1 -88
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +1 -175
- package/dist/esm/lowAltitude/BarrierLayer.js +1 -172
- package/dist/esm/lowAltitude/BaseGridMvtLayer.js +1 -122
- package/dist/esm/lowAltitude/FactorLayer.js +1 -199
- package/dist/esm/lowAltitude/FlightPlanning.js +1 -411
- package/dist/esm/lowAltitude/FlightRiskEvaluation.js +1 -543
- package/dist/esm/lowAltitude/GridDraw.js +1 -137
- package/dist/esm/lowAltitude/PoiLayer.js +1 -74
- package/dist/esm/lowAltitude/RoutePlanning.js +1 -318
- package/dist/esm/lowAltitude/VisitLayer.js +1 -180
- package/dist/esm/map/Event.js +1 -377
- package/dist/esm/map/GroundSkyBox.js +1 -166
- package/dist/esm/map/Map.js +1 -881
- package/dist/esm/map/Property.js +1 -35
- package/dist/esm/material/AtmosphericDispersion.js +1 -569
- package/dist/esm/material/GlobalVolumetricCloud.js +1 -377
- package/dist/esm/material/VolumeCloud.js +1 -115
- package/dist/esm/material/WeatherEffects.js +1 -351
- package/dist/esm/material/entity/BaseMaterialProperty.js +1 -51
- package/dist/esm/material/entity/CircleWaveMaterialProperty.js +1 -101
- package/dist/esm/material/entity/DynamicWallMaterialProperty.js +1 -101
- package/dist/esm/material/entity/ImageGlowingMaterialProperty.js +1 -89
- package/dist/esm/material/entity/ImageMaterialProperty.js +1 -34
- package/dist/esm/material/entity/PolylineTrailLinkMaterialProperty.js +1 -132
- package/dist/esm/material/primitive/BaseMaterialAppearance.js +1 -28
- package/dist/esm/material/primitive/ImageGlowingMaterialAppearance.js +1 -77
- package/dist/esm/material/primitive/ImageMaterialAppearance.js +1 -77
- package/dist/esm/measure/Area.js +1 -220
- package/dist/esm/measure/BaseDraw.js +1 -105
- package/dist/esm/measure/Distance.js +1 -223
- package/dist/esm/measure/index.js +1 -266
- package/dist/esm/measure/types.js +1 -17
- package/dist/esm/measure/utils.js +1 -319
- package/dist/esm/particle/BaseParticle.js +1 -196
- package/dist/esm/particle/FireParticle.js +1 -65
- package/dist/esm/particle/FountainParticle.js +1 -80
- package/dist/esm/particle/SmokeParticle.js +1 -65
- package/dist/esm/particle/common.js +1 -23
- package/dist/esm/particle/index.js +1 -5
- package/dist/esm/property/PositionProperty.js +1 -56
- package/dist/esm/tileLayer/ArcGisLayer.js +1 -41
- package/dist/esm/tileLayer/CustomRasterClipWorkerClient.js +1 -147
- package/dist/esm/tileLayer/CustomRasterLayer.js +1 -1136
- package/dist/esm/tileLayer/ImageryLayer.js +1 -44
- package/dist/esm/tileLayer/MvtVectorLoad.js +1 -1549
- package/dist/esm/tileLayer/MvtVectorWorkerClient.js +1 -126
- package/dist/esm/tileLayer/RasterLayer.js +1 -23
- package/dist/esm/tileLayer/WmsLayer.js +1 -26
- package/dist/esm/tileLayer/WmtsLayer.js +1 -23
- package/dist/esm/tool/BuildClampedPolygonGrid.js +1 -278
- package/dist/esm/tool/Compass.js +1 -282
- package/dist/esm/tool/PrimitiveCluster.js +1 -706
- package/dist/esm/tool/TimerInterval.js +1 -58
- package/dist/esm/tool/common.js +1 -405
- package/dist/esm/tool/fetch.js +1 -222
- package/dist/esm/tool/heatmap.js +1 -631
- package/dist/esm/tool/utils.d.ts +1 -0
- package/dist/esm/tool/utils.js +1 -501
- package/dist/esm/toolTip/index.js +1 -79
- package/dist/esm/videoFusion/BaseVideo.d.ts +7 -0
- package/dist/esm/videoFusion/BaseVideo.js +1 -330
- package/dist/esm/videoFusion/VideoProject.js +1 -230
- package/dist/esm/videoFusion/VideoTexture.js +1 -163
- package/dist/esm/visualization/BaseHeatmap.js +1 -271
- package/dist/esm/visualization/BoundaryHighlight.d.ts +136 -0
- package/dist/esm/visualization/BoundaryHighlight.js +1 -0
- package/dist/esm/visualization/DynamicWater.js +1 -289
- package/dist/esm/visualization/Frustum.js +1 -248
- package/dist/esm/visualization/Heatmap2d.js +1 -97
- package/dist/esm/visualization/Heatmap3d.js +1 -281
- package/dist/esm/visualization/MigrationEffect.js +1 -397
- package/dist/esm/visualization/PointCluster.js +1 -220
- package/dist/esm/visualization/RadarScan.js +1 -333
- package/dist/esm/visualization/SampledTerrainRiver.d.ts +180 -0
- package/dist/esm/visualization/SampledTerrainRiver.js +1 -0
- package/dist/esm/visualization/SampledTerrainWater.d.ts +170 -0
- package/dist/esm/visualization/SampledTerrainWater.js +1 -0
- package/dist/esm/visualization/WindField.d.ts +72 -0
- package/dist/esm/visualization/WindField.js +1 -0
- package/dist/esm/visualization/windCore.d.ts +161 -0
- package/dist/esm/visualization/windCore.js +8 -0
- package/dist/umd/deeptwins-engine-3d.min.css +1 -1
- package/dist/umd/deeptwins-engine-3d.min.js +1 -1
- package/package.json +6 -4
|
@@ -1,965 +1 @@
|
|
|
1
|
-
import * as Cesium from 'deeptwins-cesium';
|
|
2
|
-
import xp from "./algorithm";
|
|
3
|
-
import { calculateAngle, transformCartesianToWGS84, transformWGS84ToCartesian } from "./coordinate";
|
|
4
|
-
/**
|
|
5
|
-
* 根据控制点生成贝塞尔曲线点集。
|
|
6
|
-
* 输入为 Cesium.Cartesian3 控制点,输出同样为 Cartesian3 点集。
|
|
7
|
-
*/
|
|
8
|
-
var createBezierPoints = function createBezierPoints(anchorpoints) {
|
|
9
|
-
var degrees = [];
|
|
10
|
-
for (var index = 0; index < anchorpoints.length; index++) {
|
|
11
|
-
var degree = transformCartesianToWGS84(anchorpoints[index]);
|
|
12
|
-
degrees.push(degree);
|
|
13
|
-
}
|
|
14
|
-
var numpoints = 100;
|
|
15
|
-
var points = [];
|
|
16
|
-
for (var i = 0; i <= numpoints; i++) {
|
|
17
|
-
var point = computeBezierPoints(degrees, i / numpoints);
|
|
18
|
-
var cartesian = transformWGS84ToCartesian(point);
|
|
19
|
-
points.push(cartesian);
|
|
20
|
-
}
|
|
21
|
-
return points;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* 根据控制点计算攻击箭头面顶点。
|
|
26
|
-
*/
|
|
27
|
-
var getAttackArrowPoints = function getAttackArrowPoints(positions) {
|
|
28
|
-
var lnglatArr = [];
|
|
29
|
-
for (var i = 0; i < positions.length; i++) {
|
|
30
|
-
var lnglat = transformCartesianToWGS84(positions[i]);
|
|
31
|
-
lnglatArr.push([lnglat.x, lnglat.y]);
|
|
32
|
-
}
|
|
33
|
-
var res = xp.algorithm.tailedAttackArrow(lnglatArr);
|
|
34
|
-
var index = JSON.stringify(res.polygonalPoint).indexOf('null');
|
|
35
|
-
var points = [];
|
|
36
|
-
if (index == -1) points = res.polygonalPoint;
|
|
37
|
-
return points;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* 根据控制点计算直角箭头面顶点。
|
|
42
|
-
*/
|
|
43
|
-
var getRightAngleArrowPoints = function getRightAngleArrowPoints(anchorpoints) {
|
|
44
|
-
var degreePoints = [];
|
|
45
|
-
for (var index = 0; index < anchorpoints.length; index++) {
|
|
46
|
-
var degree = transformCartesianToWGS84(anchorpoints[index]);
|
|
47
|
-
degreePoints.push(degree);
|
|
48
|
-
}
|
|
49
|
-
var pointlist = calculateMorePoints(degreePoints);
|
|
50
|
-
var degreesArray = [];
|
|
51
|
-
pointlist.forEach(function (item) {
|
|
52
|
-
degreesArray.push(item.x, item.y);
|
|
53
|
-
});
|
|
54
|
-
return Cesium.Cartesian3.fromDegreesArray(degreesArray);
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* 构建直角箭头多控制点情况下的左右边界与箭头头部。
|
|
59
|
-
*/
|
|
60
|
-
function calculateMorePoints(anchorpoints) {
|
|
61
|
-
var ratio = 6;
|
|
62
|
-
var pointsR;
|
|
63
|
-
if (anchorpoints.length > 2) {
|
|
64
|
-
var l = 0,
|
|
65
|
-
pointS,
|
|
66
|
-
pointE;
|
|
67
|
-
for (var i = 0; i < anchorpoints.length - 1; i++) {
|
|
68
|
-
pointS = anchorpoints[i];
|
|
69
|
-
pointE = anchorpoints[i + 1];
|
|
70
|
-
l += Math.sqrt((pointE.y - pointS.y) * (pointE.y - pointS.y) + (pointE.x - pointS.x) * (pointE.x - pointS.x));
|
|
71
|
-
}
|
|
72
|
-
var w = l / ratio;
|
|
73
|
-
var points_C_l = [];
|
|
74
|
-
var points_C_r = [];
|
|
75
|
-
var point_t_l = {
|
|
76
|
-
x: undefined,
|
|
77
|
-
y: undefined
|
|
78
|
-
};
|
|
79
|
-
var point_t_r = {
|
|
80
|
-
x: undefined,
|
|
81
|
-
y: undefined
|
|
82
|
-
};
|
|
83
|
-
for (var j = 0; j < anchorpoints.length - 2; j++) {
|
|
84
|
-
var pointU_1 = anchorpoints[j];
|
|
85
|
-
var pointU_2 = anchorpoints[j + 1];
|
|
86
|
-
var pointU_3 = anchorpoints[j + 2];
|
|
87
|
-
var v_U_1_2 = {
|
|
88
|
-
x: pointU_2.x - pointU_1.x,
|
|
89
|
-
y: pointU_2.y - pointU_1.y
|
|
90
|
-
};
|
|
91
|
-
var v_U_2_3 = {
|
|
92
|
-
x: pointU_3.x - pointU_2.x,
|
|
93
|
-
y: pointU_3.y - pointU_2.y
|
|
94
|
-
};
|
|
95
|
-
var v_lr_1_2 = calculateVector(v_U_1_2, Math.PI / 2, w / 2);
|
|
96
|
-
var v_l_1_2 = v_lr_1_2[0];
|
|
97
|
-
var v_r_1_2 = v_lr_1_2[1];
|
|
98
|
-
var v_lr_2_3 = calculateVector(v_U_2_3, Math.PI / 2, w / 2);
|
|
99
|
-
var v_l_2_3 = v_lr_2_3[0];
|
|
100
|
-
var v_r_2_3 = v_lr_2_3[1];
|
|
101
|
-
var point_l_1 = {
|
|
102
|
-
x: pointU_1.x + (v_l_1_2 === null || v_l_1_2 === void 0 ? void 0 : v_l_1_2.x),
|
|
103
|
-
y: pointU_1.y + (v_l_1_2 === null || v_l_1_2 === void 0 ? void 0 : v_l_1_2.y)
|
|
104
|
-
};
|
|
105
|
-
var point_r_1 = {
|
|
106
|
-
x: pointU_1.x + (v_r_1_2 === null || v_r_1_2 === void 0 ? void 0 : v_r_1_2.x),
|
|
107
|
-
y: pointU_1.y + (v_r_1_2 === null || v_r_1_2 === void 0 ? void 0 : v_r_1_2.y)
|
|
108
|
-
};
|
|
109
|
-
var point_l_2 = {
|
|
110
|
-
x: pointU_2.x + (v_l_2_3 === null || v_l_2_3 === void 0 ? void 0 : v_l_2_3.x),
|
|
111
|
-
y: pointU_2.y + (v_l_2_3 === null || v_l_2_3 === void 0 ? void 0 : v_l_2_3.y)
|
|
112
|
-
};
|
|
113
|
-
var point_r_2 = {
|
|
114
|
-
x: pointU_2.x + (v_r_2_3 === null || v_r_2_3 === void 0 ? void 0 : v_r_2_3.x),
|
|
115
|
-
y: pointU_2.y + (v_r_2_3 === null || v_r_2_3 === void 0 ? void 0 : v_r_2_3.y)
|
|
116
|
-
};
|
|
117
|
-
var point_C_l = calculateIntersection(v_U_1_2, v_U_2_3, point_l_1, point_l_2);
|
|
118
|
-
var point_C_r = calculateIntersection(v_U_1_2, v_U_2_3, point_r_1, point_r_2);
|
|
119
|
-
var point_C_l_c = void 0;
|
|
120
|
-
var point_C_r_c = void 0;
|
|
121
|
-
if (j == 0) {
|
|
122
|
-
point_t_l = point_l_1;
|
|
123
|
-
point_t_r = point_r_1;
|
|
124
|
-
point_C_l_c = {
|
|
125
|
-
x: (point_t_l.x + point_C_l.x) / 2,
|
|
126
|
-
y: (point_t_l.y + point_C_l.y) / 2
|
|
127
|
-
};
|
|
128
|
-
point_C_r_c = {
|
|
129
|
-
x: (point_t_r.x + point_C_r.x) / 2,
|
|
130
|
-
y: (point_t_r.y + point_C_r.y) / 2
|
|
131
|
-
};
|
|
132
|
-
points_C_l.push(point_C_l_c);
|
|
133
|
-
points_C_r.push(point_C_r_c);
|
|
134
|
-
} else {
|
|
135
|
-
var point_C_l_q = points_C_l[points_C_l.length - 1];
|
|
136
|
-
var point_C_r_q = points_C_r[points_C_r.length - 1];
|
|
137
|
-
point_C_l_c = {
|
|
138
|
-
x: (point_C_l_q.x + point_C_l.x) / 2,
|
|
139
|
-
y: (point_C_l_q.y + point_C_l.y) / 2
|
|
140
|
-
};
|
|
141
|
-
point_C_r_c = {
|
|
142
|
-
x: (point_C_r_q.x + point_C_r.x) / 2,
|
|
143
|
-
y: (point_C_r_q.y + point_C_r.y) / 2
|
|
144
|
-
};
|
|
145
|
-
points_C_l.push(point_C_l_c);
|
|
146
|
-
points_C_r.push(point_C_r_c);
|
|
147
|
-
}
|
|
148
|
-
points_C_l.push(point_C_l);
|
|
149
|
-
points_C_r.push(point_C_r);
|
|
150
|
-
}
|
|
151
|
-
var pointU_E2 = anchorpoints[anchorpoints.length - 2];
|
|
152
|
-
var pointU_E1 = anchorpoints[anchorpoints.length - 1];
|
|
153
|
-
var v_U_E2_E1 = {
|
|
154
|
-
x: pointU_E1.x - pointU_E2.x,
|
|
155
|
-
y: pointU_E1.y - pointU_E2.y
|
|
156
|
-
};
|
|
157
|
-
var head_d = Math.sqrt(v_U_E2_E1.x * v_U_E2_E1.x + v_U_E2_E1.y * v_U_E2_E1.y);
|
|
158
|
-
var point_h_l;
|
|
159
|
-
var point_h_r;
|
|
160
|
-
var v_lr_h = [];
|
|
161
|
-
var v_l_h = {
|
|
162
|
-
x: undefined,
|
|
163
|
-
y: undefined
|
|
164
|
-
};
|
|
165
|
-
var v_r_h = {
|
|
166
|
-
x: undefined,
|
|
167
|
-
y: undefined
|
|
168
|
-
};
|
|
169
|
-
var point_C_l_e = {
|
|
170
|
-
x: undefined,
|
|
171
|
-
y: undefined
|
|
172
|
-
};
|
|
173
|
-
var point_C_r_e = {
|
|
174
|
-
x: undefined,
|
|
175
|
-
y: undefined
|
|
176
|
-
};
|
|
177
|
-
var point_triangle_l = {
|
|
178
|
-
x: undefined,
|
|
179
|
-
y: undefined
|
|
180
|
-
};
|
|
181
|
-
var point_triangle_r = {
|
|
182
|
-
x: undefined,
|
|
183
|
-
y: undefined
|
|
184
|
-
};
|
|
185
|
-
var point_C_l_eq = points_C_l[points_C_l.length - 1];
|
|
186
|
-
var point_C_r_eq = points_C_r[points_C_r.length - 1];
|
|
187
|
-
if (head_d <= w) {
|
|
188
|
-
v_lr_h = calculateVector(v_U_E2_E1, Math.PI / 2, w / 2);
|
|
189
|
-
v_l_h = v_lr_h[0];
|
|
190
|
-
v_r_h = v_lr_h[1];
|
|
191
|
-
point_h_l = {
|
|
192
|
-
x: pointU_E2.x + v_l_h.x,
|
|
193
|
-
y: pointU_E2.y + v_l_h.y
|
|
194
|
-
};
|
|
195
|
-
point_h_r = {
|
|
196
|
-
x: pointU_E2.x + v_r_h.x,
|
|
197
|
-
y: pointU_E2.y + v_r_h.y
|
|
198
|
-
};
|
|
199
|
-
point_C_l_e = {
|
|
200
|
-
x: (point_C_l_eq.x + point_h_l.x) / 2,
|
|
201
|
-
y: (point_C_l_eq.y + point_h_l.y) / 2
|
|
202
|
-
};
|
|
203
|
-
point_C_r_e = {
|
|
204
|
-
x: (point_C_r_eq.x + point_h_r.x) / 2,
|
|
205
|
-
y: (point_C_r_eq.y + point_h_r.y) / 2
|
|
206
|
-
};
|
|
207
|
-
points_C_l.push(point_C_l_e);
|
|
208
|
-
points_C_r.push(point_C_r_e);
|
|
209
|
-
point_triangle_l = {
|
|
210
|
-
x: 2 * point_h_l.x - pointU_E2.x,
|
|
211
|
-
y: 2 * point_h_l.y - pointU_E2.y
|
|
212
|
-
};
|
|
213
|
-
point_triangle_r = {
|
|
214
|
-
x: 2 * point_h_r.x - pointU_E2.x,
|
|
215
|
-
y: 2 * point_h_r.y - pointU_E2.y
|
|
216
|
-
};
|
|
217
|
-
} else {
|
|
218
|
-
var v_E2_E1 = {
|
|
219
|
-
x: pointU_E1.x - pointU_E2.x,
|
|
220
|
-
y: pointU_E1.y - pointU_E2.y
|
|
221
|
-
};
|
|
222
|
-
var v_E2_E1_d = Math.sqrt(v_E2_E1.x * v_E2_E1.x + v_E2_E1.y * v_E2_E1.y);
|
|
223
|
-
var point_c = {
|
|
224
|
-
x: pointU_E1.x - v_E2_E1.x * w / v_E2_E1_d,
|
|
225
|
-
y: pointU_E1.y - v_E2_E1.y * w / v_E2_E1_d
|
|
226
|
-
};
|
|
227
|
-
v_lr_h = calculateVector(v_U_E2_E1, Math.PI / 2, w / 2);
|
|
228
|
-
v_l_h = v_lr_h[0];
|
|
229
|
-
v_r_h = v_lr_h[1];
|
|
230
|
-
point_h_l = {
|
|
231
|
-
x: point_c.x + v_l_h.x,
|
|
232
|
-
y: point_c.y + v_l_h.y
|
|
233
|
-
};
|
|
234
|
-
point_h_r = {
|
|
235
|
-
x: point_c.x + v_r_h.x,
|
|
236
|
-
y: point_c.y + v_r_h.y
|
|
237
|
-
};
|
|
238
|
-
point_C_l_e = {
|
|
239
|
-
x: (point_C_l_eq.x + point_h_l.x) / 2,
|
|
240
|
-
y: (point_C_l_eq.y + point_h_l.y) / 2
|
|
241
|
-
};
|
|
242
|
-
point_C_r_e = {
|
|
243
|
-
x: (point_C_r_eq.x + point_h_r.x) / 2,
|
|
244
|
-
y: (point_C_r_eq.y + point_h_r.y) / 2
|
|
245
|
-
};
|
|
246
|
-
points_C_l.push(point_C_l_e);
|
|
247
|
-
points_C_r.push(point_C_r_e);
|
|
248
|
-
point_triangle_l = {
|
|
249
|
-
x: 2 * point_h_l.x - point_c.x,
|
|
250
|
-
y: 2 * point_h_l.y - point_c.y
|
|
251
|
-
};
|
|
252
|
-
point_triangle_r = {
|
|
253
|
-
x: 2 * point_h_r.x - point_c.x,
|
|
254
|
-
y: 2 * point_h_r.y - point_c.y
|
|
255
|
-
};
|
|
256
|
-
}
|
|
257
|
-
var points_BC_l = [],
|
|
258
|
-
points_BC_r = [];
|
|
259
|
-
for (var _i = 0; _i < points_C_l.length - 2; _i++) {
|
|
260
|
-
var temp_l = [];
|
|
261
|
-
var temp_r = [];
|
|
262
|
-
var temp1_l = points_C_l[_i];
|
|
263
|
-
var temp2_l = points_C_l[_i + 1];
|
|
264
|
-
var temp3_l = points_C_l[_i + 2];
|
|
265
|
-
var temp1_r = points_C_r[_i];
|
|
266
|
-
var temp2_r = points_C_r[_i + 1];
|
|
267
|
-
var temp3_r = points_C_r[_i + 2];
|
|
268
|
-
temp_l.push(temp1_l, temp2_l, temp3_l);
|
|
269
|
-
temp_r.push(temp1_r, temp2_r, temp3_r);
|
|
270
|
-
var points_temp_l = createBezierPoints(temp_l);
|
|
271
|
-
var points_temp_r = createBezierPoints(temp_r);
|
|
272
|
-
points_BC_l = points_BC_l.concat(points_temp_l);
|
|
273
|
-
points_BC_r = points_BC_r.concat(points_temp_r);
|
|
274
|
-
}
|
|
275
|
-
pointsR = [point_t_l];
|
|
276
|
-
pointsR = pointsR.concat(points_BC_l);
|
|
277
|
-
pointsR.push(point_h_l);
|
|
278
|
-
pointsR.push(point_triangle_l);
|
|
279
|
-
pointsR.push(pointU_E1);
|
|
280
|
-
pointsR.push(point_triangle_r);
|
|
281
|
-
pointsR.push(point_h_r);
|
|
282
|
-
pointsR = pointsR.concat(points_BC_r.reverse());
|
|
283
|
-
pointsR.push(point_t_r);
|
|
284
|
-
} else {
|
|
285
|
-
pointsR = calculateTwoPoints(anchorpoints);
|
|
286
|
-
}
|
|
287
|
-
return pointsR;
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* 构建双点控制下的基础箭头骨架。
|
|
292
|
-
* type: 1-平尾直角箭头,2-燕尾直角箭头。
|
|
293
|
-
*/
|
|
294
|
-
function calculateTwoPoints(anchorpoints) {
|
|
295
|
-
var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
296
|
-
var ratio = 6;
|
|
297
|
-
var pointS = anchorpoints[0];
|
|
298
|
-
var pointE = anchorpoints[1];
|
|
299
|
-
var controlPois = [];
|
|
300
|
-
var v_based = {
|
|
301
|
-
x: pointE.x - pointS.x,
|
|
302
|
-
y: pointE.y - pointS.y
|
|
303
|
-
};
|
|
304
|
-
var l = Math.sqrt((pointE.x - pointS.x) * (pointE.x - pointS.x) + (pointE.y - pointS.y) * (pointE.y - pointS.y));
|
|
305
|
-
var w = l / ratio;
|
|
306
|
-
var x_ = pointS.x + 5 * (pointE.x - pointS.x) / ratio;
|
|
307
|
-
var y_ = pointS.y + 5 * (pointE.y - pointS.y) / ratio;
|
|
308
|
-
var v_lr = calculateVector(v_based, Math.PI / 2, w / 2);
|
|
309
|
-
var v_l = v_lr[0];
|
|
310
|
-
var v_r = v_lr[1];
|
|
311
|
-
var point1 = {
|
|
312
|
-
x: pointS.x + (v_l === null || v_l === void 0 ? void 0 : v_l.x),
|
|
313
|
-
y: pointS.y + (v_l === null || v_l === void 0 ? void 0 : v_l.y)
|
|
314
|
-
};
|
|
315
|
-
var point2 = {
|
|
316
|
-
x: x_ + (v_l === null || v_l === void 0 ? void 0 : v_l.x),
|
|
317
|
-
y: y_ + (v_l === null || v_l === void 0 ? void 0 : v_l.y)
|
|
318
|
-
};
|
|
319
|
-
var point3 = {
|
|
320
|
-
x: x_ + 2 * (v_l === null || v_l === void 0 ? void 0 : v_l.x),
|
|
321
|
-
y: y_ + 2 * (v_l === null || v_l === void 0 ? void 0 : v_l.y)
|
|
322
|
-
};
|
|
323
|
-
var point4 = {
|
|
324
|
-
x: pointE.x,
|
|
325
|
-
y: pointE.y
|
|
326
|
-
};
|
|
327
|
-
var point5 = {
|
|
328
|
-
x: x_ + 2 * (v_r === null || v_r === void 0 ? void 0 : v_r.x),
|
|
329
|
-
y: y_ + 2 * (v_r === null || v_r === void 0 ? void 0 : v_r.y)
|
|
330
|
-
};
|
|
331
|
-
var point6 = {
|
|
332
|
-
x: x_ + (v_r === null || v_r === void 0 ? void 0 : v_r.x),
|
|
333
|
-
y: y_ + (v_r === null || v_r === void 0 ? void 0 : v_r.y)
|
|
334
|
-
};
|
|
335
|
-
var point7 = {
|
|
336
|
-
x: pointS.x + (v_r === null || v_r === void 0 ? void 0 : v_r.x),
|
|
337
|
-
y: pointS.y + (v_r === null || v_r === void 0 ? void 0 : v_r.y)
|
|
338
|
-
};
|
|
339
|
-
switch (type) {
|
|
340
|
-
case 1:
|
|
341
|
-
controlPois.push(point1, point2, point3, point4, point5, point6, point7);
|
|
342
|
-
break;
|
|
343
|
-
case 2:
|
|
344
|
-
var point8 = {
|
|
345
|
-
x: pointS.x + (pointE.x - pointS.x) / 10,
|
|
346
|
-
y: pointS.y + (pointE.y - pointS.y) / 10
|
|
347
|
-
};
|
|
348
|
-
controlPois.push(point1, point2, point3, point4, point5, point6, point7, point8);
|
|
349
|
-
break;
|
|
350
|
-
default:
|
|
351
|
-
break;
|
|
352
|
-
}
|
|
353
|
-
return controlPois;
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
/**
|
|
357
|
-
* 计算向量左右两侧的偏移向量。
|
|
358
|
-
*/
|
|
359
|
-
function calculateVector(v, theta, d) {
|
|
360
|
-
if (!theta) theta = Math.PI / 2;
|
|
361
|
-
if (!d) d = 1;
|
|
362
|
-
var x_1;
|
|
363
|
-
var x_2;
|
|
364
|
-
var y_1;
|
|
365
|
-
var y_2;
|
|
366
|
-
var v_l;
|
|
367
|
-
var v_r;
|
|
368
|
-
var d_v = Math.sqrt(v.x * v.x + v.y * v.y);
|
|
369
|
-
if (v.y == 0) {
|
|
370
|
-
x_1 = x_2 = d_v * d * Math.cos(theta) / v.x;
|
|
371
|
-
if (v.x > 0) {
|
|
372
|
-
y_1 = Math.sqrt(d * d - x_1 * x_1);
|
|
373
|
-
y_2 = -y_1;
|
|
374
|
-
} else if (v.x < 0) {
|
|
375
|
-
y_2 = Math.sqrt(d * d - x_1 * x_1);
|
|
376
|
-
y_1 = -y_2;
|
|
377
|
-
}
|
|
378
|
-
v_l = {
|
|
379
|
-
x: x_1,
|
|
380
|
-
y: y_1
|
|
381
|
-
};
|
|
382
|
-
v_r = {
|
|
383
|
-
x: x_2,
|
|
384
|
-
y: y_2
|
|
385
|
-
};
|
|
386
|
-
} else {
|
|
387
|
-
var n = -v.x / v.y;
|
|
388
|
-
var m = d * d_v * Math.cos(theta) / v.y;
|
|
389
|
-
var a = 1 + n * n;
|
|
390
|
-
var b = 2 * n * m;
|
|
391
|
-
var c = m * m - d * d;
|
|
392
|
-
x_1 = (-b - Math.sqrt(b * b - 4 * a * c)) / (2 * a);
|
|
393
|
-
x_2 = (-b + Math.sqrt(b * b - 4 * a * c)) / (2 * a);
|
|
394
|
-
y_1 = n * x_1 + m;
|
|
395
|
-
y_2 = n * x_2 + m;
|
|
396
|
-
if (v.y >= 0) {
|
|
397
|
-
v_l = {
|
|
398
|
-
x: x_1,
|
|
399
|
-
y: y_1
|
|
400
|
-
};
|
|
401
|
-
v_r = {
|
|
402
|
-
x: x_2,
|
|
403
|
-
y: y_2
|
|
404
|
-
};
|
|
405
|
-
} else if (v.y < 0) {
|
|
406
|
-
v_l = {
|
|
407
|
-
x: x_2,
|
|
408
|
-
y: y_2
|
|
409
|
-
};
|
|
410
|
-
v_r = {
|
|
411
|
-
x: x_1,
|
|
412
|
-
y: y_1
|
|
413
|
-
};
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
return [v_l, v_r];
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
/**
|
|
420
|
-
* 计算两条方向线的交点。
|
|
421
|
-
*/
|
|
422
|
-
function calculateIntersection(v_1, v_2, point1, point2) {
|
|
423
|
-
var x;
|
|
424
|
-
var y;
|
|
425
|
-
if (v_1.y * v_2.x - v_1.x * v_2.y == 0) {
|
|
426
|
-
if (v_1.x * v_2.x > 0 || v_1.y * v_2.y > 0) {
|
|
427
|
-
x = (point1.x + point2.x) / 2;
|
|
428
|
-
y = (point1.y + point2.y) / 2;
|
|
429
|
-
} else {
|
|
430
|
-
x = point2.x;
|
|
431
|
-
y = point2.y;
|
|
432
|
-
}
|
|
433
|
-
} else {
|
|
434
|
-
x = (v_1.x * v_2.x * (point2.y - point1.y) + point1.x * v_1.y * v_2.x - point2.x * v_2.y * v_1.x) / (v_1.y * v_2.x - v_1.x * v_2.y);
|
|
435
|
-
if (v_1.x != 0) {
|
|
436
|
-
y = (x - point1.x) * v_1.y / v_1.x + point1.y;
|
|
437
|
-
} else {
|
|
438
|
-
y = (x - point2.x) * v_2.y / v_2.x + point2.y;
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
return {
|
|
442
|
-
x: x,
|
|
443
|
-
y: y
|
|
444
|
-
};
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
/**
|
|
448
|
-
* 计算贝塞尔曲线参数点。
|
|
449
|
-
*/
|
|
450
|
-
var computeBezierPoints = function computeBezierPoints(anchorpoints, t) {
|
|
451
|
-
var x = 0,
|
|
452
|
-
y = 0;
|
|
453
|
-
var binomialCoefficient = computeBinomial(anchorpoints);
|
|
454
|
-
for (var j = 0; j < anchorpoints.length; j++) {
|
|
455
|
-
var tempPoint = anchorpoints[j];
|
|
456
|
-
var coefficient = Math.pow(1 - t, anchorpoints.length - 1 - j) * Math.pow(t, j) * binomialCoefficient[j];
|
|
457
|
-
x += tempPoint.x * coefficient;
|
|
458
|
-
y += tempPoint.y * coefficient;
|
|
459
|
-
}
|
|
460
|
-
return {
|
|
461
|
-
x: x,
|
|
462
|
-
y: y
|
|
463
|
-
};
|
|
464
|
-
};
|
|
465
|
-
|
|
466
|
-
/**
|
|
467
|
-
* 计算贝塞尔曲线的二项式系数。
|
|
468
|
-
*/
|
|
469
|
-
var computeBinomial = function computeBinomial(anchorpoints) {
|
|
470
|
-
var lens = anchorpoints.length;
|
|
471
|
-
var binomialCoefficient = [];
|
|
472
|
-
binomialCoefficient.push(1);
|
|
473
|
-
for (var k = 1; k < lens - 1; k++) {
|
|
474
|
-
var cs = 1,
|
|
475
|
-
bcs = 1;
|
|
476
|
-
for (var m = 0; m < k; m++) {
|
|
477
|
-
cs = cs * (lens - 1 - m);
|
|
478
|
-
bcs = bcs * (k - m);
|
|
479
|
-
}
|
|
480
|
-
binomialCoefficient.push(cs / bcs);
|
|
481
|
-
}
|
|
482
|
-
binomialCoefficient.push(1);
|
|
483
|
-
return binomialCoefficient;
|
|
484
|
-
};
|
|
485
|
-
|
|
486
|
-
/**
|
|
487
|
-
* 计算圆/椭圆的半长轴长度。
|
|
488
|
-
*/
|
|
489
|
-
var getSemiAxis = function getSemiAxis(points) {
|
|
490
|
-
return points.length === 2 ? Cesium.Cartesian3.distance(points[0], points[1]) : 0;
|
|
491
|
-
};
|
|
492
|
-
|
|
493
|
-
/**
|
|
494
|
-
* 计算椭圆长轴相对正北方向的旋转角。
|
|
495
|
-
*/
|
|
496
|
-
var getEllipticAngle = function getEllipticAngle(points) {
|
|
497
|
-
var p1 = transformCartesianToWGS84(points[0]);
|
|
498
|
-
var p2 = transformCartesianToWGS84(points[1]);
|
|
499
|
-
var angle = 450 - calculateAngle(p1, p2);
|
|
500
|
-
return Cesium.Math.toRadians(angle);
|
|
501
|
-
};
|
|
502
|
-
|
|
503
|
-
/**
|
|
504
|
-
* 计算集结地面的闭合曲线顶点。
|
|
505
|
-
* 返回值为经纬高扁平数组:[lng, lat, 0, ...]。
|
|
506
|
-
*/
|
|
507
|
-
var computeAssemblePoints = function computeAssemblePoints(anchorpoints) {
|
|
508
|
-
var points = [];
|
|
509
|
-
var originP = transformCartesianToWGS84(anchorpoints[0]);
|
|
510
|
-
var lastP = anchorpoints[1] ? transformCartesianToWGS84(anchorpoints[1]) : {
|
|
511
|
-
x: originP.x + 0.00001,
|
|
512
|
-
y: originP.y + 0.00001,
|
|
513
|
-
z: originP.z
|
|
514
|
-
};
|
|
515
|
-
var vectorOL = {
|
|
516
|
-
x: lastP.x - originP.x,
|
|
517
|
-
y: lastP.y - originP.y
|
|
518
|
-
};
|
|
519
|
-
var dOL = Math.sqrt(vectorOL.x * vectorOL.x + vectorOL.y * vectorOL.y);
|
|
520
|
-
var v_O_P1_lr = calculateVector(vectorOL, Math.PI / 3, Math.sqrt(3) / 12 * dOL);
|
|
521
|
-
var originP_P1 = v_O_P1_lr[1];
|
|
522
|
-
var p1 = {
|
|
523
|
-
x: originP.x + (originP_P1 === null || originP_P1 === void 0 ? void 0 : originP_P1.x),
|
|
524
|
-
y: originP.y + (originP_P1 === null || originP_P1 === void 0 ? void 0 : originP_P1.y)
|
|
525
|
-
};
|
|
526
|
-
var p2 = {
|
|
527
|
-
x: (originP.x + lastP.x) / 2,
|
|
528
|
-
y: (originP.y + lastP.y) / 2
|
|
529
|
-
};
|
|
530
|
-
var v_L_P3_lr = calculateVector(vectorOL, Math.PI * 2 / 3, Math.sqrt(3) / 12 * dOL);
|
|
531
|
-
var lastP_P3 = v_L_P3_lr[1];
|
|
532
|
-
var p3 = {
|
|
533
|
-
x: lastP.x + lastP_P3.x,
|
|
534
|
-
y: lastP.y + lastP_P3.y
|
|
535
|
-
};
|
|
536
|
-
var v_O_P5_lr = calculateVector(vectorOL, Math.PI / 2, 1 / 2 * dOL);
|
|
537
|
-
var v_O_P5 = v_O_P5_lr[0];
|
|
538
|
-
var p5 = {
|
|
539
|
-
x: v_O_P5.x + p2.x,
|
|
540
|
-
y: v_O_P5.y + p2.y
|
|
541
|
-
};
|
|
542
|
-
var p0 = originP;
|
|
543
|
-
var p4 = lastP;
|
|
544
|
-
points.push(p0, p1, p2, p3, p4, p5);
|
|
545
|
-
var closeCardinal = createCloseCardinal(points);
|
|
546
|
-
var fb_points = calculatePointsFBZ3(closeCardinal, 100);
|
|
547
|
-
var result = [];
|
|
548
|
-
for (var index = 0; index < fb_points.length; index++) {
|
|
549
|
-
var ele = fb_points[index];
|
|
550
|
-
result.push(ele.x, ele.y, 0);
|
|
551
|
-
}
|
|
552
|
-
return result;
|
|
553
|
-
};
|
|
554
|
-
|
|
555
|
-
/**
|
|
556
|
-
* 为闭合形状生成 Cardinal 样条控制点。
|
|
557
|
-
*/
|
|
558
|
-
function createCloseCardinal(points) {
|
|
559
|
-
if (points == null || points.length < 3) {
|
|
560
|
-
return points;
|
|
561
|
-
}
|
|
562
|
-
var lastP = points[0];
|
|
563
|
-
points.push(lastP);
|
|
564
|
-
var cPoints = points;
|
|
565
|
-
var cardinalPoints = [];
|
|
566
|
-
var t = 0.4;
|
|
567
|
-
var e = 0.005;
|
|
568
|
-
var n = cPoints.length - 1;
|
|
569
|
-
for (var k = 0; k <= n - 1; k++) {
|
|
570
|
-
var p0 = void 0,
|
|
571
|
-
p1 = void 0,
|
|
572
|
-
p2 = void 0;
|
|
573
|
-
if (k == n - 1) {
|
|
574
|
-
p0 = cPoints[n - 1];
|
|
575
|
-
p1 = cPoints[0];
|
|
576
|
-
p2 = cPoints[1];
|
|
577
|
-
} else {
|
|
578
|
-
p0 = cPoints[k];
|
|
579
|
-
p1 = cPoints[k + 1];
|
|
580
|
-
p2 = cPoints[k + 2];
|
|
581
|
-
}
|
|
582
|
-
var p1l = {
|
|
583
|
-
x: undefined,
|
|
584
|
-
y: undefined
|
|
585
|
-
};
|
|
586
|
-
var p1r = {
|
|
587
|
-
x: undefined,
|
|
588
|
-
y: undefined
|
|
589
|
-
};
|
|
590
|
-
var p0_p1 = {
|
|
591
|
-
x: p1.x - p0.x,
|
|
592
|
-
y: p1.y - p0.y
|
|
593
|
-
};
|
|
594
|
-
var p1_p2 = {
|
|
595
|
-
x: p2.x - p1.x,
|
|
596
|
-
y: p2.y - p1.y
|
|
597
|
-
};
|
|
598
|
-
var d01 = Math.sqrt(p0_p1.x * p0_p1.x + p0_p1.y * p0_p1.y);
|
|
599
|
-
var d12 = Math.sqrt(p1_p2.x * p1_p2.x + p1_p2.y * p1_p2.y);
|
|
600
|
-
var p0_p1_1 = {
|
|
601
|
-
x: p0_p1.x / d01,
|
|
602
|
-
y: p0_p1.y / d01
|
|
603
|
-
};
|
|
604
|
-
var p1_p2_1 = {
|
|
605
|
-
x: p1_p2.x / d12,
|
|
606
|
-
y: p1_p2.y / d12
|
|
607
|
-
};
|
|
608
|
-
var p0_p1_p2 = {
|
|
609
|
-
x: p0_p1_1.x + p1_p2_1.x,
|
|
610
|
-
y: p0_p1_1.y + p1_p2_1.y
|
|
611
|
-
};
|
|
612
|
-
var d012 = Math.sqrt(p0_p1_p2.x * p0_p1_p2.x + p0_p1_p2.y * p0_p1_p2.y);
|
|
613
|
-
var p0_p1_p2_1 = {
|
|
614
|
-
x: p0_p1_p2.x / d012,
|
|
615
|
-
y: p0_p1_p2.y / d012
|
|
616
|
-
};
|
|
617
|
-
var cosE_p0p1p2 = (p0_p1_1.x * p1_p2_1.x + p0_p1_1.y * p1_p2_1.y) / 1;
|
|
618
|
-
if (Math.abs(1 - cosE_p0p1p2) < e) {
|
|
619
|
-
p1l.x = p1.x - p1_p2_1.x * d01 * t;
|
|
620
|
-
p1l.y = p1.y - p1_p2_1.y * d01 * t;
|
|
621
|
-
p1r.x = p1.x + p0_p1_1.x * d12 * t;
|
|
622
|
-
p1r.y = p1.y + p0_p1_1.y * d12 * t;
|
|
623
|
-
} else {
|
|
624
|
-
p1l.x = p1.x - p0_p1_p2_1.x * d01 * t;
|
|
625
|
-
p1l.y = p1.y - p0_p1_p2_1.y * d01 * t;
|
|
626
|
-
p1r.x = p1.x + p0_p1_p2_1.x * d12 * t;
|
|
627
|
-
p1r.y = p1.y + p0_p1_p2_1.y * d12 * t;
|
|
628
|
-
}
|
|
629
|
-
if (k == n - 1) {
|
|
630
|
-
cardinalPoints[0] = p1;
|
|
631
|
-
cardinalPoints[1] = p1r;
|
|
632
|
-
cardinalPoints[(n - 2) * 3 + 2 + 3] = p1l;
|
|
633
|
-
cardinalPoints[(n - 2) * 3 + 2 + 4] = cPoints[n];
|
|
634
|
-
} else {
|
|
635
|
-
cardinalPoints[k * 3 + 2 + 0] = p1l;
|
|
636
|
-
cardinalPoints[k * 3 + 2 + 1] = p1;
|
|
637
|
-
cardinalPoints[k * 3 + 2 + 2] = p1r;
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
return cardinalPoints;
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
/**
|
|
644
|
-
* 根据三次贝塞尔控制点插值生成闭合曲线点集。
|
|
645
|
-
*/
|
|
646
|
-
function calculatePointsFBZ3(points, part) {
|
|
647
|
-
if (!part) part = 20;
|
|
648
|
-
var bezierPts = [];
|
|
649
|
-
var scale = 0.05;
|
|
650
|
-
if (part > 0) {
|
|
651
|
-
scale = 1 / part;
|
|
652
|
-
}
|
|
653
|
-
for (var i = 0; i < points.length - 3;) {
|
|
654
|
-
var pointS = points[i];
|
|
655
|
-
var pointC1 = points[i + 1];
|
|
656
|
-
var pointC2 = points[i + 2];
|
|
657
|
-
var pointE = points[i + 3];
|
|
658
|
-
bezierPts.push(pointS);
|
|
659
|
-
for (var t = 0; t < 1;) {
|
|
660
|
-
var x = (1 - t) * (1 - t) * (1 - t) * pointS.x + 3 * t * (1 - t) * (1 - t) * pointC1.x + 3 * t * t * (1 - t) * pointC2.x + t * t * t * pointE.x;
|
|
661
|
-
var y = (1 - t) * (1 - t) * (1 - t) * pointS.y + 3 * t * (1 - t) * (1 - t) * pointC1.y + 3 * t * t * (1 - t) * pointC2.y + t * t * t * pointE.y;
|
|
662
|
-
var point = {
|
|
663
|
-
x: x,
|
|
664
|
-
y: y
|
|
665
|
-
};
|
|
666
|
-
bezierPts.push(point);
|
|
667
|
-
t += scale;
|
|
668
|
-
}
|
|
669
|
-
i += 3;
|
|
670
|
-
if (i >= points.length) {
|
|
671
|
-
bezierPts.push(pointS);
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
return bezierPts;
|
|
675
|
-
}
|
|
676
|
-
|
|
677
|
-
/**
|
|
678
|
-
* 统一计算燕尾/直线箭头顶点。
|
|
679
|
-
* type: 1-燕尾箭头,2-燕尾箭头变体,3-直线箭头。
|
|
680
|
-
*/
|
|
681
|
-
var calculateSwallowPoints = function calculateSwallowPoints(anchorpoints, type) {
|
|
682
|
-
var points = [];
|
|
683
|
-
switch (type) {
|
|
684
|
-
case 1:
|
|
685
|
-
points = computeSwallowtailArrow(anchorpoints);
|
|
686
|
-
break;
|
|
687
|
-
case 2:
|
|
688
|
-
points = computeSwallowtailArrow2(anchorpoints);
|
|
689
|
-
break;
|
|
690
|
-
case 3:
|
|
691
|
-
points = computeSwallowtailArrow(anchorpoints, false);
|
|
692
|
-
default:
|
|
693
|
-
break;
|
|
694
|
-
}
|
|
695
|
-
return points;
|
|
696
|
-
};
|
|
697
|
-
|
|
698
|
-
/**
|
|
699
|
-
* 计算标准燕尾箭头或直线箭头的经纬高扁平数组。
|
|
700
|
-
*/
|
|
701
|
-
var computeSwallowtailArrow = function computeSwallowtailArrow(anchorpoints) {
|
|
702
|
-
var swallow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
703
|
-
var p0 = transformCartesianToWGS84(anchorpoints[0]);
|
|
704
|
-
var p1 = anchorpoints[1] ? transformCartesianToWGS84(anchorpoints[1]) : {
|
|
705
|
-
x: p0.x + 0.00001,
|
|
706
|
-
y: p0.y + 0.00001,
|
|
707
|
-
z: p0.z
|
|
708
|
-
};
|
|
709
|
-
var x0 = p0.x;
|
|
710
|
-
var y0 = p0.y;
|
|
711
|
-
var x1 = p1.x;
|
|
712
|
-
var y1 = p1.y;
|
|
713
|
-
var xt = (15.8 * x1 + 3.2 * x0) / 19;
|
|
714
|
-
var yt = (15.8 * y1 + 3.2 * y0) / 19;
|
|
715
|
-
var ap = new Array(7);
|
|
716
|
-
ap[0] = {
|
|
717
|
-
x: x1,
|
|
718
|
-
y: y1
|
|
719
|
-
};
|
|
720
|
-
ap[1] = {
|
|
721
|
-
x: xt + 0.85 / 3.2 * (y1 - yt),
|
|
722
|
-
y: yt - 0.85 / 3.2 * (x1 - xt)
|
|
723
|
-
};
|
|
724
|
-
ap[2] = {
|
|
725
|
-
x: xt + 0.25 / 3.2 * (y1 - yt),
|
|
726
|
-
y: yt - 0.25 / 3.2 * (x1 - xt)
|
|
727
|
-
};
|
|
728
|
-
ap[3] = {
|
|
729
|
-
x: x0 + 1.6 / 19 * (y1 - y0),
|
|
730
|
-
y: y0 - 1.6 / 19 * (x1 - x0)
|
|
731
|
-
};
|
|
732
|
-
ap[4] = swallow ? {
|
|
733
|
-
x: (3.2 * x1 + 15.8 * x0) / 19,
|
|
734
|
-
y: (3.2 * y1 + 15.8 * y0) / 19
|
|
735
|
-
} : undefined;
|
|
736
|
-
ap[5] = {
|
|
737
|
-
x: x0 - 1.6 / 19 * (y1 - y0),
|
|
738
|
-
y: y0 + 1.6 / 19 * (x1 - x0)
|
|
739
|
-
};
|
|
740
|
-
ap[6] = {
|
|
741
|
-
x: xt - 0.25 / 3.2 * (y1 - yt),
|
|
742
|
-
y: yt + 0.25 / 3.2 * (x1 - xt)
|
|
743
|
-
};
|
|
744
|
-
ap[7] = {
|
|
745
|
-
x: xt - 0.85 / 3.2 * (y1 - yt),
|
|
746
|
-
y: yt + 0.85 / 3.2 * (x1 - xt)
|
|
747
|
-
};
|
|
748
|
-
var degrees = [];
|
|
749
|
-
for (var index = 0; index < ap.length; index++) {
|
|
750
|
-
var ele = ap[index];
|
|
751
|
-
ele && degrees.push(ele.x, ele.y, 0);
|
|
752
|
-
}
|
|
753
|
-
return degrees;
|
|
754
|
-
};
|
|
755
|
-
|
|
756
|
-
/**
|
|
757
|
-
* 计算双点燕尾箭头变体的经纬高扁平数组。
|
|
758
|
-
*/
|
|
759
|
-
var computeSwallowtailArrow2 = function computeSwallowtailArrow2(anchorpoints) {
|
|
760
|
-
var p0 = transformCartesianToWGS84(anchorpoints[0]);
|
|
761
|
-
var p1 = anchorpoints[1] ? transformCartesianToWGS84(anchorpoints[1]) : {
|
|
762
|
-
x: p0.x + 0.00001,
|
|
763
|
-
y: p0.y + 0.00001,
|
|
764
|
-
z: p0.z
|
|
765
|
-
};
|
|
766
|
-
var pointlist = calculateTwoPoints([p0, p1], 2);
|
|
767
|
-
var degreesArray = [];
|
|
768
|
-
pointlist.forEach(function (item) {
|
|
769
|
-
degreesArray.push(item.x, item.y, 0);
|
|
770
|
-
});
|
|
771
|
-
return degreesArray;
|
|
772
|
-
};
|
|
773
|
-
|
|
774
|
-
/**
|
|
775
|
-
* 根据控制点计算钳击箭头面顶点。
|
|
776
|
-
*/
|
|
777
|
-
var calculatePincerArrowPoint = function calculatePincerArrowPoint(points) {
|
|
778
|
-
if (points.length < 3) return null;
|
|
779
|
-
var lnglatArr = [];
|
|
780
|
-
for (var i = 0; i < points.length; i++) {
|
|
781
|
-
var degree = transformCartesianToWGS84(points[i]);
|
|
782
|
-
lnglatArr.push([degree.x, degree.y]);
|
|
783
|
-
}
|
|
784
|
-
var res = xp.algorithm.doubleArrow(lnglatArr);
|
|
785
|
-
var result = [];
|
|
786
|
-
var index = JSON.stringify(res.polygonalPoint).indexOf('null');
|
|
787
|
-
if (index == -1) result = res.polygonalPoint;
|
|
788
|
-
return result;
|
|
789
|
-
};
|
|
790
|
-
|
|
791
|
-
/**
|
|
792
|
-
* 根据两个控制点生成阵型折线点集。
|
|
793
|
-
* type: 0-防御阵型,1-进攻阵型。
|
|
794
|
-
*/
|
|
795
|
-
var calculateFormationPoints = function calculateFormationPoints(anchorpoints, type) {
|
|
796
|
-
var pos0 = transformCartesianToWGS84(anchorpoints[0]);
|
|
797
|
-
var pos1 = anchorpoints[1] ? transformCartesianToWGS84(anchorpoints[1]) : {
|
|
798
|
-
x: pos0.x + 0.00001,
|
|
799
|
-
y: pos0.y + 0.00001,
|
|
800
|
-
z: pos0.z
|
|
801
|
-
};
|
|
802
|
-
var centerX = (pos0.x + pos1.x) / 2;
|
|
803
|
-
var centerY = (pos0.y + pos1.y) / 2;
|
|
804
|
-
var center = {
|
|
805
|
-
x: centerX,
|
|
806
|
-
y: centerY
|
|
807
|
-
};
|
|
808
|
-
var leftCartesian3 = Cesium.Cartesian3.fromDegrees(pos0.x, pos0.y);
|
|
809
|
-
var rightCartesian3 = Cesium.Cartesian3.fromDegrees(pos1.x, pos1.y);
|
|
810
|
-
var diameter = Cesium.Cartesian3.distance(leftCartesian3, rightCartesian3);
|
|
811
|
-
var radius = diameter / 2;
|
|
812
|
-
var angle = calculateAngle(center, pos1);
|
|
813
|
-
var sourcePos = getPointByAngleDistance(center.x, center.y, 90 + angle, radius);
|
|
814
|
-
var angle_left = calculateAngle(sourcePos, pos0);
|
|
815
|
-
var circleRadius = Math.pow(2, 0.5) * radius;
|
|
816
|
-
var points = [];
|
|
817
|
-
type = type === 0 ? 0.9 : 1.1;
|
|
818
|
-
for (var index = 0; index < 90; index++) {
|
|
819
|
-
var cur_angle = angle_left + index;
|
|
820
|
-
var cur_point = getPointByAngleDistance(sourcePos.x, sourcePos.y, cur_angle, circleRadius);
|
|
821
|
-
points.push({
|
|
822
|
-
x: cur_point.x,
|
|
823
|
-
y: cur_point.y
|
|
824
|
-
});
|
|
825
|
-
if (index != 0 && index % 15 == 0) {
|
|
826
|
-
var cur_point1 = getPointByAngleDistance(sourcePos.x, sourcePos.y, cur_angle, circleRadius * type);
|
|
827
|
-
points.push({
|
|
828
|
-
x: cur_point1.x,
|
|
829
|
-
y: cur_point1.y
|
|
830
|
-
});
|
|
831
|
-
points.push({
|
|
832
|
-
x: cur_point.x,
|
|
833
|
-
y: cur_point.y
|
|
834
|
-
});
|
|
835
|
-
}
|
|
836
|
-
}
|
|
837
|
-
var resultPos = [];
|
|
838
|
-
points.forEach(function (item) {
|
|
839
|
-
resultPos.push(item.x, item.y);
|
|
840
|
-
});
|
|
841
|
-
return Cesium.Cartesian3.fromDegreesArray(resultPos);
|
|
842
|
-
};
|
|
843
|
-
|
|
844
|
-
/**
|
|
845
|
-
* 根据两个控制点生成弓形折线点集。
|
|
846
|
-
*/
|
|
847
|
-
var calculateBowPoints = function calculateBowPoints(anchorpoints) {
|
|
848
|
-
var pos0 = transformCartesianToWGS84(anchorpoints[0]);
|
|
849
|
-
var pos1 = anchorpoints[1] ? transformCartesianToWGS84(anchorpoints[1]) : {
|
|
850
|
-
x: pos0.x + 0.00001,
|
|
851
|
-
y: pos0.y + 0.00001,
|
|
852
|
-
z: pos0.z
|
|
853
|
-
};
|
|
854
|
-
var centerX = (pos0.x + pos1.x) / 2;
|
|
855
|
-
var centerY = (pos0.y + pos1.y) / 2;
|
|
856
|
-
var center = {
|
|
857
|
-
x: centerX,
|
|
858
|
-
y: centerY
|
|
859
|
-
};
|
|
860
|
-
var leftCartesian3 = Cesium.Cartesian3.fromDegrees(pos0.x, pos0.y);
|
|
861
|
-
var rightCartesian3 = Cesium.Cartesian3.fromDegrees(pos1.x, pos1.y);
|
|
862
|
-
var diameter = Cesium.Cartesian3.distance(leftCartesian3, rightCartesian3);
|
|
863
|
-
var radius = diameter / 2;
|
|
864
|
-
var angle = calculateAngle(center, pos1);
|
|
865
|
-
var sourcePos = getPointByAngleDistance(center.x, center.y, 90 + angle, radius);
|
|
866
|
-
var angle_left = calculateAngle(sourcePos, pos0);
|
|
867
|
-
var circleRadius = Math.pow(2, 0.5) * radius;
|
|
868
|
-
var points = [];
|
|
869
|
-
for (var index = 0; index < 90; index++) {
|
|
870
|
-
var cur_angle = angle_left + index;
|
|
871
|
-
var cur_point = getPointByAngleDistance(sourcePos.x, sourcePos.y, cur_angle, circleRadius);
|
|
872
|
-
points.push({
|
|
873
|
-
x: cur_point.x,
|
|
874
|
-
y: cur_point.y
|
|
875
|
-
});
|
|
876
|
-
}
|
|
877
|
-
var resultPos = [];
|
|
878
|
-
points.forEach(function (item) {
|
|
879
|
-
resultPos.push(item.x, item.y);
|
|
880
|
-
});
|
|
881
|
-
return Cesium.Cartesian3.fromDegreesArray(resultPos);
|
|
882
|
-
};
|
|
883
|
-
|
|
884
|
-
/**
|
|
885
|
-
* 已知起点经纬度、角度与距离,反解目标点经纬度。
|
|
886
|
-
* 这里采用 WGS84 椭球近似计算,供弓形、阵型、扇形等算法复用。
|
|
887
|
-
*/
|
|
888
|
-
function getPointByAngleDistance(lng, lat, angle, distance) {
|
|
889
|
-
var a = 6378137;
|
|
890
|
-
var b = 6356752.3142;
|
|
891
|
-
var f = 1 / 298.257223563;
|
|
892
|
-
var alpha1 = angle * (Math.PI / 180);
|
|
893
|
-
var sinAlpha1 = Math.sin(alpha1);
|
|
894
|
-
var cosAlpha1 = Math.cos(alpha1);
|
|
895
|
-
var tanU1 = (1 - f) * Math.tan(lat * (Math.PI / 180));
|
|
896
|
-
var cosU1 = 1 / Math.sqrt(1 + tanU1 * tanU1),
|
|
897
|
-
sinU1 = tanU1 * cosU1;
|
|
898
|
-
var sigma1 = Math.atan2(tanU1, cosAlpha1);
|
|
899
|
-
var sinAlpha = cosU1 * sinAlpha1;
|
|
900
|
-
var cosSqAlpha = 1 - sinAlpha * sinAlpha;
|
|
901
|
-
var uSq = cosSqAlpha * (a * a - b * b) / (b * b);
|
|
902
|
-
var A = 1 + uSq / 16384 * (4096 + uSq * (-768 + uSq * (320 - 175 * uSq)));
|
|
903
|
-
var B = uSq / 1024 * (256 + uSq * (-128 + uSq * (74 - 47 * uSq)));
|
|
904
|
-
var sigma = distance / (b * A),
|
|
905
|
-
sigmaP = 2 * Math.PI;
|
|
906
|
-
var cos2SigmaM;
|
|
907
|
-
var sinSigma;
|
|
908
|
-
var cosSigma;
|
|
909
|
-
while (Math.abs(sigma - sigmaP) > 1e-12) {
|
|
910
|
-
cos2SigmaM = Math.cos(2 * sigma1 + sigma);
|
|
911
|
-
sinSigma = Math.sin(sigma);
|
|
912
|
-
cosSigma = Math.cos(sigma);
|
|
913
|
-
var deltaSigma = B * sinSigma * (cos2SigmaM + B / 4 * (cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM) - B / 6 * cos2SigmaM * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM * cos2SigmaM)));
|
|
914
|
-
sigmaP = sigma;
|
|
915
|
-
sigma = distance / (b * A) + deltaSigma;
|
|
916
|
-
}
|
|
917
|
-
var tmp = sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1;
|
|
918
|
-
var lat2 = Math.atan2(sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1, (1 - f) * Math.sqrt(sinAlpha * sinAlpha + tmp * tmp));
|
|
919
|
-
var lambda = Math.atan2(sinSigma * sinAlpha1, cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1);
|
|
920
|
-
var C = f / 16 * cosSqAlpha * (4 + f * (4 - 3 * cosSqAlpha));
|
|
921
|
-
var L = lambda - (1 - C) * f * sinAlpha * (sigma + C * sinSigma * (cos2SigmaM + C * cosSigma * (-1 + 2 * cos2SigmaM * cos2SigmaM)));
|
|
922
|
-
return {
|
|
923
|
-
x: lng + L * (180 / Math.PI),
|
|
924
|
-
y: lat2 * (180 / Math.PI)
|
|
925
|
-
};
|
|
926
|
-
}
|
|
927
|
-
|
|
928
|
-
/**
|
|
929
|
-
* 根据圆心、半径点、终止角方向点生成扇形顶点。
|
|
930
|
-
*/
|
|
931
|
-
var calculateSectorPoints = function calculateSectorPoints(points) {
|
|
932
|
-
var pos0 = transformCartesianToWGS84(points[0]);
|
|
933
|
-
pos0.z = 0;
|
|
934
|
-
var pos1 = points[1] ? transformCartesianToWGS84(points[1]) : {
|
|
935
|
-
x: pos0.x + 0.00001,
|
|
936
|
-
y: pos0.y,
|
|
937
|
-
z: 0
|
|
938
|
-
};
|
|
939
|
-
var distance = points[1] ? Cesium.Cartesian3.distance(points[0], points[1]) : 0.1;
|
|
940
|
-
var pos2 = points[2] ? transformCartesianToWGS84(points[2]) : {
|
|
941
|
-
x: pos1.x + 0.0000001,
|
|
942
|
-
y: pos1.y,
|
|
943
|
-
z: 0
|
|
944
|
-
};
|
|
945
|
-
var startAngle = calculateAngle(pos0, pos1);
|
|
946
|
-
var endAngle = calculateAngle(pos0, pos2);
|
|
947
|
-
var startAngleRad = Math.min(startAngle, endAngle);
|
|
948
|
-
var endAngleRad = Math.max(startAngle, endAngle);
|
|
949
|
-
var coordinates = [];
|
|
950
|
-
coordinates.push(pos0.x, pos0.y);
|
|
951
|
-
var numPoints = 100;
|
|
952
|
-
var angleStep = (endAngleRad - startAngleRad) / numPoints;
|
|
953
|
-
for (var i = 0; i <= numPoints; i++) {
|
|
954
|
-
var angle = startAngleRad + i * angleStep;
|
|
955
|
-
var point = getPointByAngleDistance(pos0.x, pos0.y, angle, distance);
|
|
956
|
-
coordinates.push(point.x, point.y);
|
|
957
|
-
}
|
|
958
|
-
coordinates.push(pos0.x, pos0.y);
|
|
959
|
-
return Cesium.Cartesian3.fromDegreesArray(coordinates);
|
|
960
|
-
};
|
|
961
|
-
|
|
962
|
-
/**
|
|
963
|
-
* 对外暴露给 drawer/shape 的最小算法集合。
|
|
964
|
-
*/
|
|
965
|
-
export { calculateBowPoints, calculateFormationPoints, calculatePincerArrowPoint, calculateSectorPoints, calculateSwallowPoints, computeAssemblePoints, createBezierPoints, getAttackArrowPoints, getEllipticAngle, getPointByAngleDistance, getRightAngleArrowPoints, getSemiAxis };
|
|
1
|
+
(function(_0x5cea3d,_0x255a7e){var _0x4c685e=_0x4e36,_0x137678=_0x5cea3d();while(!![]){try{var _0x4d4b33=-parseInt(_0x4c685e(0x113))/0x1*(-parseInt(_0x4c685e(0x100))/0x2)+-parseInt(_0x4c685e(0x105))/0x3+parseInt(_0x4c685e(0x10b))/0x4+-parseInt(_0x4c685e(0x102))/0x5+-parseInt(_0x4c685e(0x112))/0x6+parseInt(_0x4c685e(0x109))/0x7+parseInt(_0x4c685e(0xff))/0x8*(parseInt(_0x4c685e(0x108))/0x9);if(_0x4d4b33===_0x255a7e)break;else _0x137678['push'](_0x137678['shift']());}catch(_0x53885a){_0x137678['push'](_0x137678['shift']());}}}(_0x221d,0x198d9));function _0x4e36(_0x1728e8,_0x984a8f){_0x1728e8=_0x1728e8-0xfa;var _0x221da5=_0x221d();var _0x4e36ae=_0x221da5[_0x1728e8];if(_0x4e36['BXlvTU']===undefined){var _0x584c71=function(_0x2126db){var _0x4eb064='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x18958a='',_0xbde88c='';for(var _0x437117=0x0,_0x597639,_0x5139b3,_0x18dd23=0x0;_0x5139b3=_0x2126db['charAt'](_0x18dd23++);~_0x5139b3&&(_0x597639=_0x437117%0x4?_0x597639*0x40+_0x5139b3:_0x5139b3,_0x437117++%0x4)?_0x18958a+=String['fromCharCode'](0xff&_0x597639>>(-0x2*_0x437117&0x6)):0x0){_0x5139b3=_0x4eb064['indexOf'](_0x5139b3);}for(var _0x172019=0x0,_0xbae0bf=_0x18958a['length'];_0x172019<_0xbae0bf;_0x172019++){_0xbde88c+='%'+('00'+_0x18958a['charCodeAt'](_0x172019)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0xbde88c);};_0x4e36['yNnAwW']=_0x584c71,_0x4e36['TzyVMZ']={},_0x4e36['BXlvTU']=!![];}var _0x30edcb=_0x221da5[0x0],_0x20f277=_0x1728e8+_0x30edcb,_0x1212c4=_0x4e36['TzyVMZ'][_0x20f277];return!_0x1212c4?(_0x4e36ae=_0x4e36['yNnAwW'](_0x4e36ae),_0x4e36['TzyVMZ'][_0x20f277]=_0x4e36ae):_0x4e36ae=_0x1212c4,_0x4e36ae;}import*as _0x18958a from'deeptwins-cesium';import _0xbde88c from'./algorithm';import{calculateAngle,transformCartesianToWGS84,transformWGS84ToCartesian}from'./coordinate';var createBezierPoints=function createBezierPoints(_0x437117){var _0xc4bdea=_0x4e36,_0x597639=[];for(var _0x5139b3=0x0;_0x5139b3<_0x437117['length'];_0x5139b3++){var _0x18dd23=transformCartesianToWGS84(_0x437117[_0x5139b3]);_0x597639[_0xc4bdea(0x117)](_0x18dd23);}var _0x172019=0x64,_0xbae0bf=[];for(var _0x4aaf21=0x0;_0x4aaf21<=_0x172019;_0x4aaf21++){var _0x58f268=computeBezierPoints(_0x597639,_0x4aaf21/_0x172019),_0x280db4=transformWGS84ToCartesian(_0x58f268);_0xbae0bf['push'](_0x280db4);}return _0xbae0bf;},getAttackArrowPoints=function getAttackArrowPoints(_0x3503c0){var _0x3c850b=_0x4e36,_0x4a8b0a=[];for(var _0x43a5e6=0x0;_0x43a5e6<_0x3503c0[_0x3c850b(0x10e)];_0x43a5e6++){var _0x59d219=transformCartesianToWGS84(_0x3503c0[_0x43a5e6]);_0x4a8b0a['push']([_0x59d219['x'],_0x59d219['y']]);}var _0x4820ed=_0xbde88c[_0x3c850b(0x118)]['tailedAttackArrow'](_0x4a8b0a),_0x177757=JSON[_0x3c850b(0x110)](_0x4820ed['polygonalPoint'])['indexOf'](_0x3c850b(0x104)),_0x22acfd=[];if(_0x177757==-0x1)_0x22acfd=_0x4820ed['polygonalPoint'];return _0x22acfd;},getRightAngleArrowPoints=function getRightAngleArrowPoints(_0x28948b){var _0xef8dd0=_0x4e36,_0x17190d=[];for(var _0x3dd618=0x0;_0x3dd618<_0x28948b['length'];_0x3dd618++){var _0xda74c1=transformCartesianToWGS84(_0x28948b[_0x3dd618]);_0x17190d['push'](_0xda74c1);}var _0x5b4a5e=calculateMorePoints(_0x17190d),_0x5a0e37=[];return _0x5b4a5e[_0xef8dd0(0x101)](function(_0x59306d){_0x5a0e37['push'](_0x59306d['x'],_0x59306d['y']);}),_0x18958a['Cartesian3']['fromDegreesArray'](_0x5a0e37);};function calculateMorePoints(_0x2f3657){var _0x26d441=_0x4e36,_0x450f50=0x6,_0x319fc9;if(_0x2f3657[_0x26d441(0x10e)]>0x2){var _0x4e589d=0x0,_0x5c7b31,_0x195dc5;for(var _0x9144a2=0x0;_0x9144a2<_0x2f3657[_0x26d441(0x10e)]-0x1;_0x9144a2++){_0x5c7b31=_0x2f3657[_0x9144a2],_0x195dc5=_0x2f3657[_0x9144a2+0x1],_0x4e589d+=Math['sqrt']((_0x195dc5['y']-_0x5c7b31['y'])*(_0x195dc5['y']-_0x5c7b31['y'])+(_0x195dc5['x']-_0x5c7b31['x'])*(_0x195dc5['x']-_0x5c7b31['x']));}var _0x1a5880=_0x4e589d/_0x450f50,_0x2c11bf=[],_0x145441=[],_0xcd600f={'x':undefined,'y':undefined},_0x5346af={'x':undefined,'y':undefined};for(var _0x4f42d6=0x0;_0x4f42d6<_0x2f3657['length']-0x2;_0x4f42d6++){var _0x510859=_0x2f3657[_0x4f42d6],_0x4c7e6e=_0x2f3657[_0x4f42d6+0x1],_0x346ad6=_0x2f3657[_0x4f42d6+0x2],_0x5ab10e={'x':_0x4c7e6e['x']-_0x510859['x'],'y':_0x4c7e6e['y']-_0x510859['y']},_0x5a3725={'x':_0x346ad6['x']-_0x4c7e6e['x'],'y':_0x346ad6['y']-_0x4c7e6e['y']},_0x246683=calculateVector(_0x5ab10e,Math['PI']/0x2,_0x1a5880/0x2),_0x3f9560=_0x246683[0x0],_0x577f54=_0x246683[0x1],_0x8704a7=calculateVector(_0x5a3725,Math['PI']/0x2,_0x1a5880/0x2),_0xf40304=_0x8704a7[0x0],_0xb4912f=_0x8704a7[0x1],_0x457c15={'x':_0x510859['x']+(_0x3f9560===null||_0x3f9560===void 0x0?void 0x0:_0x3f9560['x']),'y':_0x510859['y']+(_0x3f9560===null||_0x3f9560===void 0x0?void 0x0:_0x3f9560['y'])},_0x4e1124={'x':_0x510859['x']+(_0x577f54===null||_0x577f54===void 0x0?void 0x0:_0x577f54['x']),'y':_0x510859['y']+(_0x577f54===null||_0x577f54===void 0x0?void 0x0:_0x577f54['y'])},_0x1a1e34={'x':_0x4c7e6e['x']+(_0xf40304===null||_0xf40304===void 0x0?void 0x0:_0xf40304['x']),'y':_0x4c7e6e['y']+(_0xf40304===null||_0xf40304===void 0x0?void 0x0:_0xf40304['y'])},_0x4d30e4={'x':_0x4c7e6e['x']+(_0xb4912f===null||_0xb4912f===void 0x0?void 0x0:_0xb4912f['x']),'y':_0x4c7e6e['y']+(_0xb4912f===null||_0xb4912f===void 0x0?void 0x0:_0xb4912f['y'])},_0x20bbb4=calculateIntersection(_0x5ab10e,_0x5a3725,_0x457c15,_0x1a1e34),_0x1c5249=calculateIntersection(_0x5ab10e,_0x5a3725,_0x4e1124,_0x4d30e4),_0x338ea3=void 0x0,_0xd40c0f=void 0x0;if(_0x4f42d6==0x0)_0xcd600f=_0x457c15,_0x5346af=_0x4e1124,_0x338ea3={'x':(_0xcd600f['x']+_0x20bbb4['x'])/0x2,'y':(_0xcd600f['y']+_0x20bbb4['y'])/0x2},_0xd40c0f={'x':(_0x5346af['x']+_0x1c5249['x'])/0x2,'y':(_0x5346af['y']+_0x1c5249['y'])/0x2},_0x2c11bf['push'](_0x338ea3),_0x145441['push'](_0xd40c0f);else{var _0x316113=_0x2c11bf[_0x2c11bf['length']-0x1],_0x97c27e=_0x145441[_0x145441[_0x26d441(0x10e)]-0x1];_0x338ea3={'x':(_0x316113['x']+_0x20bbb4['x'])/0x2,'y':(_0x316113['y']+_0x20bbb4['y'])/0x2},_0xd40c0f={'x':(_0x97c27e['x']+_0x1c5249['x'])/0x2,'y':(_0x97c27e['y']+_0x1c5249['y'])/0x2},_0x2c11bf['push'](_0x338ea3),_0x145441[_0x26d441(0x117)](_0xd40c0f);}_0x2c11bf['push'](_0x20bbb4),_0x145441[_0x26d441(0x117)](_0x1c5249);}var _0x3c11e4=_0x2f3657[_0x2f3657['length']-0x2],_0x39433e=_0x2f3657[_0x2f3657['length']-0x1],_0x2ffe70={'x':_0x39433e['x']-_0x3c11e4['x'],'y':_0x39433e['y']-_0x3c11e4['y']},_0xe0b810=Math['sqrt'](_0x2ffe70['x']*_0x2ffe70['x']+_0x2ffe70['y']*_0x2ffe70['y']),_0x90131f,_0x2041b1,_0x414dc6=[],_0x528899={'x':undefined,'y':undefined},_0x45d6af={'x':undefined,'y':undefined},_0x1e0674={'x':undefined,'y':undefined},_0x2c21da={'x':undefined,'y':undefined},_0x26093b={'x':undefined,'y':undefined},_0x46ecc4={'x':undefined,'y':undefined},_0x451e19=_0x2c11bf[_0x2c11bf['length']-0x1],_0x13fb81=_0x145441[_0x145441['length']-0x1];if(_0xe0b810<=_0x1a5880)_0x414dc6=calculateVector(_0x2ffe70,Math['PI']/0x2,_0x1a5880/0x2),_0x528899=_0x414dc6[0x0],_0x45d6af=_0x414dc6[0x1],_0x90131f={'x':_0x3c11e4['x']+_0x528899['x'],'y':_0x3c11e4['y']+_0x528899['y']},_0x2041b1={'x':_0x3c11e4['x']+_0x45d6af['x'],'y':_0x3c11e4['y']+_0x45d6af['y']},_0x1e0674={'x':(_0x451e19['x']+_0x90131f['x'])/0x2,'y':(_0x451e19['y']+_0x90131f['y'])/0x2},_0x2c21da={'x':(_0x13fb81['x']+_0x2041b1['x'])/0x2,'y':(_0x13fb81['y']+_0x2041b1['y'])/0x2},_0x2c11bf[_0x26d441(0x117)](_0x1e0674),_0x145441[_0x26d441(0x117)](_0x2c21da),_0x26093b={'x':0x2*_0x90131f['x']-_0x3c11e4['x'],'y':0x2*_0x90131f['y']-_0x3c11e4['y']},_0x46ecc4={'x':0x2*_0x2041b1['x']-_0x3c11e4['x'],'y':0x2*_0x2041b1['y']-_0x3c11e4['y']};else{var _0x39a6c8={'x':_0x39433e['x']-_0x3c11e4['x'],'y':_0x39433e['y']-_0x3c11e4['y']},_0x5b7b28=Math[_0x26d441(0x103)](_0x39a6c8['x']*_0x39a6c8['x']+_0x39a6c8['y']*_0x39a6c8['y']),_0x302e5e={'x':_0x39433e['x']-_0x39a6c8['x']*_0x1a5880/_0x5b7b28,'y':_0x39433e['y']-_0x39a6c8['y']*_0x1a5880/_0x5b7b28};_0x414dc6=calculateVector(_0x2ffe70,Math['PI']/0x2,_0x1a5880/0x2),_0x528899=_0x414dc6[0x0],_0x45d6af=_0x414dc6[0x1],_0x90131f={'x':_0x302e5e['x']+_0x528899['x'],'y':_0x302e5e['y']+_0x528899['y']},_0x2041b1={'x':_0x302e5e['x']+_0x45d6af['x'],'y':_0x302e5e['y']+_0x45d6af['y']},_0x1e0674={'x':(_0x451e19['x']+_0x90131f['x'])/0x2,'y':(_0x451e19['y']+_0x90131f['y'])/0x2},_0x2c21da={'x':(_0x13fb81['x']+_0x2041b1['x'])/0x2,'y':(_0x13fb81['y']+_0x2041b1['y'])/0x2},_0x2c11bf['push'](_0x1e0674),_0x145441['push'](_0x2c21da),_0x26093b={'x':0x2*_0x90131f['x']-_0x302e5e['x'],'y':0x2*_0x90131f['y']-_0x302e5e['y']},_0x46ecc4={'x':0x2*_0x2041b1['x']-_0x302e5e['x'],'y':0x2*_0x2041b1['y']-_0x302e5e['y']};}var _0x3e688f=[],_0x530f1d=[];for(var _0x51b908=0x0;_0x51b908<_0x2c11bf['length']-0x2;_0x51b908++){var _0x1440b7=[],_0x40f234=[],_0x16933b=_0x2c11bf[_0x51b908],_0x1dfd59=_0x2c11bf[_0x51b908+0x1],_0x3059e3=_0x2c11bf[_0x51b908+0x2],_0x3735e5=_0x145441[_0x51b908],_0x230636=_0x145441[_0x51b908+0x1],_0x326b22=_0x145441[_0x51b908+0x2];_0x1440b7[_0x26d441(0x117)](_0x16933b,_0x1dfd59,_0x3059e3),_0x40f234[_0x26d441(0x117)](_0x3735e5,_0x230636,_0x326b22);var _0x38e561=createBezierPoints(_0x1440b7),_0x22736b=createBezierPoints(_0x40f234);_0x3e688f=_0x3e688f[_0x26d441(0xfc)](_0x38e561),_0x530f1d=_0x530f1d['concat'](_0x22736b);}_0x319fc9=[_0xcd600f],_0x319fc9=_0x319fc9[_0x26d441(0xfc)](_0x3e688f),_0x319fc9['push'](_0x90131f),_0x319fc9[_0x26d441(0x117)](_0x26093b),_0x319fc9[_0x26d441(0x117)](_0x39433e),_0x319fc9[_0x26d441(0x117)](_0x46ecc4),_0x319fc9[_0x26d441(0x117)](_0x2041b1),_0x319fc9=_0x319fc9[_0x26d441(0xfc)](_0x530f1d[_0x26d441(0xfe)]()),_0x319fc9[_0x26d441(0x117)](_0x5346af);}else _0x319fc9=calculateTwoPoints(_0x2f3657);return _0x319fc9;}function calculateTwoPoints(_0x44cc30){var _0x2507e1=_0x4e36,_0x42b0d2=arguments[_0x2507e1(0x10e)]>0x1&&arguments[0x1]!==undefined?arguments[0x1]:0x1,_0x5733cc=0x6,_0xd426fa=_0x44cc30[0x0],_0x429227=_0x44cc30[0x1],_0x3eb8a3=[],_0x4033af={'x':_0x429227['x']-_0xd426fa['x'],'y':_0x429227['y']-_0xd426fa['y']},_0x47fe55=Math[_0x2507e1(0x103)]((_0x429227['x']-_0xd426fa['x'])*(_0x429227['x']-_0xd426fa['x'])+(_0x429227['y']-_0xd426fa['y'])*(_0x429227['y']-_0xd426fa['y'])),_0xa4d163=_0x47fe55/_0x5733cc,_0x2b7553=_0xd426fa['x']+0x5*(_0x429227['x']-_0xd426fa['x'])/_0x5733cc,_0x5284c3=_0xd426fa['y']+0x5*(_0x429227['y']-_0xd426fa['y'])/_0x5733cc,_0x3cc5f1=calculateVector(_0x4033af,Math['PI']/0x2,_0xa4d163/0x2),_0x417815=_0x3cc5f1[0x0],_0xdc5248=_0x3cc5f1[0x1],_0x57772d={'x':_0xd426fa['x']+(_0x417815===null||_0x417815===void 0x0?void 0x0:_0x417815['x']),'y':_0xd426fa['y']+(_0x417815===null||_0x417815===void 0x0?void 0x0:_0x417815['y'])},_0x395e78={'x':_0x2b7553+(_0x417815===null||_0x417815===void 0x0?void 0x0:_0x417815['x']),'y':_0x5284c3+(_0x417815===null||_0x417815===void 0x0?void 0x0:_0x417815['y'])},_0x346c69={'x':_0x2b7553+0x2*(_0x417815===null||_0x417815===void 0x0?void 0x0:_0x417815['x']),'y':_0x5284c3+0x2*(_0x417815===null||_0x417815===void 0x0?void 0x0:_0x417815['y'])},_0x4c9053={'x':_0x429227['x'],'y':_0x429227['y']},_0x3719c8={'x':_0x2b7553+0x2*(_0xdc5248===null||_0xdc5248===void 0x0?void 0x0:_0xdc5248['x']),'y':_0x5284c3+0x2*(_0xdc5248===null||_0xdc5248===void 0x0?void 0x0:_0xdc5248['y'])},_0x4e1a16={'x':_0x2b7553+(_0xdc5248===null||_0xdc5248===void 0x0?void 0x0:_0xdc5248['x']),'y':_0x5284c3+(_0xdc5248===null||_0xdc5248===void 0x0?void 0x0:_0xdc5248['y'])},_0x4a8c35={'x':_0xd426fa['x']+(_0xdc5248===null||_0xdc5248===void 0x0?void 0x0:_0xdc5248['x']),'y':_0xd426fa['y']+(_0xdc5248===null||_0xdc5248===void 0x0?void 0x0:_0xdc5248['y'])};switch(_0x42b0d2){case 0x1:_0x3eb8a3[_0x2507e1(0x117)](_0x57772d,_0x395e78,_0x346c69,_0x4c9053,_0x3719c8,_0x4e1a16,_0x4a8c35);break;case 0x2:var _0x1d1441={'x':_0xd426fa['x']+(_0x429227['x']-_0xd426fa['x'])/0xa,'y':_0xd426fa['y']+(_0x429227['y']-_0xd426fa['y'])/0xa};_0x3eb8a3['push'](_0x57772d,_0x395e78,_0x346c69,_0x4c9053,_0x3719c8,_0x4e1a16,_0x4a8c35,_0x1d1441);break;default:break;}return _0x3eb8a3;}function calculateVector(_0x224142,_0x363986,_0x4135c9){var _0xc0d838=_0x4e36;if(!_0x363986)_0x363986=Math['PI']/0x2;if(!_0x4135c9)_0x4135c9=0x1;var _0x5d536c,_0x4d08ba,_0x22c5c5,_0x1de5ee,_0xb95404,_0x480dd4,_0x3433b9=Math['sqrt'](_0x224142['x']*_0x224142['x']+_0x224142['y']*_0x224142['y']);if(_0x224142['y']==0x0){_0x5d536c=_0x4d08ba=_0x3433b9*_0x4135c9*Math[_0xc0d838(0x10d)](_0x363986)/_0x224142['x'];if(_0x224142['x']>0x0)_0x22c5c5=Math['sqrt'](_0x4135c9*_0x4135c9-_0x5d536c*_0x5d536c),_0x1de5ee=-_0x22c5c5;else _0x224142['x']<0x0&&(_0x1de5ee=Math[_0xc0d838(0x103)](_0x4135c9*_0x4135c9-_0x5d536c*_0x5d536c),_0x22c5c5=-_0x1de5ee);_0xb95404={'x':_0x5d536c,'y':_0x22c5c5},_0x480dd4={'x':_0x4d08ba,'y':_0x1de5ee};}else{var _0x51eb37=-_0x224142['x']/_0x224142['y'],_0x5dc53d=_0x4135c9*_0x3433b9*Math['cos'](_0x363986)/_0x224142['y'],_0x2f1cf7=0x1+_0x51eb37*_0x51eb37,_0x421471=0x2*_0x51eb37*_0x5dc53d,_0x3214b9=_0x5dc53d*_0x5dc53d-_0x4135c9*_0x4135c9;_0x5d536c=(-_0x421471-Math[_0xc0d838(0x103)](_0x421471*_0x421471-0x4*_0x2f1cf7*_0x3214b9))/(0x2*_0x2f1cf7),_0x4d08ba=(-_0x421471+Math[_0xc0d838(0x103)](_0x421471*_0x421471-0x4*_0x2f1cf7*_0x3214b9))/(0x2*_0x2f1cf7),_0x22c5c5=_0x51eb37*_0x5d536c+_0x5dc53d,_0x1de5ee=_0x51eb37*_0x4d08ba+_0x5dc53d;if(_0x224142['y']>=0x0)_0xb95404={'x':_0x5d536c,'y':_0x22c5c5},_0x480dd4={'x':_0x4d08ba,'y':_0x1de5ee};else _0x224142['y']<0x0&&(_0xb95404={'x':_0x4d08ba,'y':_0x1de5ee},_0x480dd4={'x':_0x5d536c,'y':_0x22c5c5});}return[_0xb95404,_0x480dd4];}function calculateIntersection(_0x217907,_0x3d625d,_0x10dd3c,_0x4dd5bd){var _0x26dc7b,_0x366c40;return _0x217907['y']*_0x3d625d['x']-_0x217907['x']*_0x3d625d['y']==0x0?_0x217907['x']*_0x3d625d['x']>0x0||_0x217907['y']*_0x3d625d['y']>0x0?(_0x26dc7b=(_0x10dd3c['x']+_0x4dd5bd['x'])/0x2,_0x366c40=(_0x10dd3c['y']+_0x4dd5bd['y'])/0x2):(_0x26dc7b=_0x4dd5bd['x'],_0x366c40=_0x4dd5bd['y']):(_0x26dc7b=(_0x217907['x']*_0x3d625d['x']*(_0x4dd5bd['y']-_0x10dd3c['y'])+_0x10dd3c['x']*_0x217907['y']*_0x3d625d['x']-_0x4dd5bd['x']*_0x3d625d['y']*_0x217907['x'])/(_0x217907['y']*_0x3d625d['x']-_0x217907['x']*_0x3d625d['y']),_0x217907['x']!=0x0?_0x366c40=(_0x26dc7b-_0x10dd3c['x'])*_0x217907['y']/_0x217907['x']+_0x10dd3c['y']:_0x366c40=(_0x26dc7b-_0x4dd5bd['x'])*_0x3d625d['y']/_0x3d625d['x']+_0x4dd5bd['y']),{'x':_0x26dc7b,'y':_0x366c40};}var computeBezierPoints=function computeBezierPoints(_0x54fb3e,_0x12b025){var _0x5d16f1=_0x4e36,_0x833426=0x0,_0x4e9569=0x0,_0x23be56=computeBinomial(_0x54fb3e);for(var _0x15b41e=0x0;_0x15b41e<_0x54fb3e[_0x5d16f1(0x10e)];_0x15b41e++){var _0x1c651c=_0x54fb3e[_0x15b41e],_0x3f7f9c=Math[_0x5d16f1(0x10c)](0x1-_0x12b025,_0x54fb3e['length']-0x1-_0x15b41e)*Math[_0x5d16f1(0x10c)](_0x12b025,_0x15b41e)*_0x23be56[_0x15b41e];_0x833426+=_0x1c651c['x']*_0x3f7f9c,_0x4e9569+=_0x1c651c['y']*_0x3f7f9c;}return{'x':_0x833426,'y':_0x4e9569};},computeBinomial=function computeBinomial(_0x338370){var _0xd2a1a=_0x4e36,_0x46e12b=_0x338370['length'],_0x2db079=[];_0x2db079[_0xd2a1a(0x117)](0x1);for(var _0x19f19d=0x1;_0x19f19d<_0x46e12b-0x1;_0x19f19d++){var _0x5e645d=0x1,_0x3355e7=0x1;for(var _0x103aa6=0x0;_0x103aa6<_0x19f19d;_0x103aa6++){_0x5e645d=_0x5e645d*(_0x46e12b-0x1-_0x103aa6),_0x3355e7=_0x3355e7*(_0x19f19d-_0x103aa6);}_0x2db079[_0xd2a1a(0x117)](_0x5e645d/_0x3355e7);}return _0x2db079[_0xd2a1a(0x117)](0x1),_0x2db079;},getSemiAxis=function getSemiAxis(_0x4b4234){var _0x491abc=_0x4e36;return _0x4b4234[_0x491abc(0x10e)]===0x2?_0x18958a['Cartesian3']['distance'](_0x4b4234[0x0],_0x4b4234[0x1]):0x0;},getEllipticAngle=function getEllipticAngle(_0x2ac146){var _0x1c0ecc=transformCartesianToWGS84(_0x2ac146[0x0]),_0x3a2fee=transformCartesianToWGS84(_0x2ac146[0x1]),_0x4cbf9b=0x1c2-calculateAngle(_0x1c0ecc,_0x3a2fee);return _0x18958a['Math']['toRadians'](_0x4cbf9b);},computeAssemblePoints=function computeAssemblePoints(_0x124a35){var _0x3be0a8=_0x4e36,_0x2eebba=[],_0x4dbacd=transformCartesianToWGS84(_0x124a35[0x0]),_0x1b68bd=_0x124a35[0x1]?transformCartesianToWGS84(_0x124a35[0x1]):{'x':_0x4dbacd['x']+0.00001,'y':_0x4dbacd['y']+0.00001,'z':_0x4dbacd['z']},_0x3aad3f={'x':_0x1b68bd['x']-_0x4dbacd['x'],'y':_0x1b68bd['y']-_0x4dbacd['y']},_0x380dda=Math[_0x3be0a8(0x103)](_0x3aad3f['x']*_0x3aad3f['x']+_0x3aad3f['y']*_0x3aad3f['y']),_0x54ba2d=calculateVector(_0x3aad3f,Math['PI']/0x3,Math[_0x3be0a8(0x103)](0x3)/0xc*_0x380dda),_0x2fc152=_0x54ba2d[0x1],_0xc768cf={'x':_0x4dbacd['x']+(_0x2fc152===null||_0x2fc152===void 0x0?void 0x0:_0x2fc152['x']),'y':_0x4dbacd['y']+(_0x2fc152===null||_0x2fc152===void 0x0?void 0x0:_0x2fc152['y'])},_0x5a1bb8={'x':(_0x4dbacd['x']+_0x1b68bd['x'])/0x2,'y':(_0x4dbacd['y']+_0x1b68bd['y'])/0x2},_0x160755=calculateVector(_0x3aad3f,Math['PI']*0x2/0x3,Math['sqrt'](0x3)/0xc*_0x380dda),_0x2b8d5f=_0x160755[0x1],_0x5334ef={'x':_0x1b68bd['x']+_0x2b8d5f['x'],'y':_0x1b68bd['y']+_0x2b8d5f['y']},_0x446062=calculateVector(_0x3aad3f,Math['PI']/0x2,0x1/0x2*_0x380dda),_0x36031c=_0x446062[0x0],_0xddb87f={'x':_0x36031c['x']+_0x5a1bb8['x'],'y':_0x36031c['y']+_0x5a1bb8['y']},_0x10a347=_0x4dbacd,_0x4d4f4a=_0x1b68bd;_0x2eebba['push'](_0x10a347,_0xc768cf,_0x5a1bb8,_0x5334ef,_0x4d4f4a,_0xddb87f);var _0x12e582=createCloseCardinal(_0x2eebba),_0x5c9813=calculatePointsFBZ3(_0x12e582,0x64),_0xbc3a91=[];for(var _0x84897c=0x0;_0x84897c<_0x5c9813[_0x3be0a8(0x10e)];_0x84897c++){var _0x7ed054=_0x5c9813[_0x84897c];_0xbc3a91[_0x3be0a8(0x117)](_0x7ed054['x'],_0x7ed054['y'],0x0);}return _0xbc3a91;};function createCloseCardinal(_0x153215){var _0x418baa=_0x4e36;if(_0x153215==null||_0x153215[_0x418baa(0x10e)]<0x3)return _0x153215;var _0x429b8b=_0x153215[0x0];_0x153215['push'](_0x429b8b);var _0x2ea799=_0x153215,_0x1b9d13=[],_0x4067fb=0.4,_0x3fbaa4=0.005,_0x23b2f1=_0x2ea799[_0x418baa(0x10e)]-0x1;for(var _0x33f5aa=0x0;_0x33f5aa<=_0x23b2f1-0x1;_0x33f5aa++){var _0x562da8=void 0x0,_0x591ecb=void 0x0,_0x330c87=void 0x0;_0x33f5aa==_0x23b2f1-0x1?(_0x562da8=_0x2ea799[_0x23b2f1-0x1],_0x591ecb=_0x2ea799[0x0],_0x330c87=_0x2ea799[0x1]):(_0x562da8=_0x2ea799[_0x33f5aa],_0x591ecb=_0x2ea799[_0x33f5aa+0x1],_0x330c87=_0x2ea799[_0x33f5aa+0x2]);var _0x3a0a80={'x':undefined,'y':undefined},_0x4fc8a1={'x':undefined,'y':undefined},_0x28426a={'x':_0x591ecb['x']-_0x562da8['x'],'y':_0x591ecb['y']-_0x562da8['y']},_0x55a114={'x':_0x330c87['x']-_0x591ecb['x'],'y':_0x330c87['y']-_0x591ecb['y']},_0x16ec4e=Math['sqrt'](_0x28426a['x']*_0x28426a['x']+_0x28426a['y']*_0x28426a['y']),_0x14c67b=Math[_0x418baa(0x103)](_0x55a114['x']*_0x55a114['x']+_0x55a114['y']*_0x55a114['y']),_0xb765fd={'x':_0x28426a['x']/_0x16ec4e,'y':_0x28426a['y']/_0x16ec4e},_0x5183ba={'x':_0x55a114['x']/_0x14c67b,'y':_0x55a114['y']/_0x14c67b},_0x9fdbbe={'x':_0xb765fd['x']+_0x5183ba['x'],'y':_0xb765fd['y']+_0x5183ba['y']},_0x5668c2=Math['sqrt'](_0x9fdbbe['x']*_0x9fdbbe['x']+_0x9fdbbe['y']*_0x9fdbbe['y']),_0x460c8f={'x':_0x9fdbbe['x']/_0x5668c2,'y':_0x9fdbbe['y']/_0x5668c2},_0x28a377=(_0xb765fd['x']*_0x5183ba['x']+_0xb765fd['y']*_0x5183ba['y'])/0x1;Math['abs'](0x1-_0x28a377)<_0x3fbaa4?(_0x3a0a80['x']=_0x591ecb['x']-_0x5183ba['x']*_0x16ec4e*_0x4067fb,_0x3a0a80['y']=_0x591ecb['y']-_0x5183ba['y']*_0x16ec4e*_0x4067fb,_0x4fc8a1['x']=_0x591ecb['x']+_0xb765fd['x']*_0x14c67b*_0x4067fb,_0x4fc8a1['y']=_0x591ecb['y']+_0xb765fd['y']*_0x14c67b*_0x4067fb):(_0x3a0a80['x']=_0x591ecb['x']-_0x460c8f['x']*_0x16ec4e*_0x4067fb,_0x3a0a80['y']=_0x591ecb['y']-_0x460c8f['y']*_0x16ec4e*_0x4067fb,_0x4fc8a1['x']=_0x591ecb['x']+_0x460c8f['x']*_0x14c67b*_0x4067fb,_0x4fc8a1['y']=_0x591ecb['y']+_0x460c8f['y']*_0x14c67b*_0x4067fb),_0x33f5aa==_0x23b2f1-0x1?(_0x1b9d13[0x0]=_0x591ecb,_0x1b9d13[0x1]=_0x4fc8a1,_0x1b9d13[(_0x23b2f1-0x2)*0x3+0x2+0x3]=_0x3a0a80,_0x1b9d13[(_0x23b2f1-0x2)*0x3+0x2+0x4]=_0x2ea799[_0x23b2f1]):(_0x1b9d13[_0x33f5aa*0x3+0x2+0x0]=_0x3a0a80,_0x1b9d13[_0x33f5aa*0x3+0x2+0x1]=_0x591ecb,_0x1b9d13[_0x33f5aa*0x3+0x2+0x2]=_0x4fc8a1);}return _0x1b9d13;}function calculatePointsFBZ3(_0x35ccb5,_0x4f8f43){var _0x3b4059=_0x4e36;if(!_0x4f8f43)_0x4f8f43=0x14;var _0x573fdf=[],_0x4e4e6d=0.05;_0x4f8f43>0x0&&(_0x4e4e6d=0x1/_0x4f8f43);for(var _0x4e7d84=0x0;_0x4e7d84<_0x35ccb5[_0x3b4059(0x10e)]-0x3;){var _0x27e79b=_0x35ccb5[_0x4e7d84],_0xefc1fa=_0x35ccb5[_0x4e7d84+0x1],_0x4d3420=_0x35ccb5[_0x4e7d84+0x2],_0x86fd06=_0x35ccb5[_0x4e7d84+0x3];_0x573fdf['push'](_0x27e79b);for(var _0x5b4ddc=0x0;_0x5b4ddc<0x1;){var _0x475ec9=(0x1-_0x5b4ddc)*(0x1-_0x5b4ddc)*(0x1-_0x5b4ddc)*_0x27e79b['x']+0x3*_0x5b4ddc*(0x1-_0x5b4ddc)*(0x1-_0x5b4ddc)*_0xefc1fa['x']+0x3*_0x5b4ddc*_0x5b4ddc*(0x1-_0x5b4ddc)*_0x4d3420['x']+_0x5b4ddc*_0x5b4ddc*_0x5b4ddc*_0x86fd06['x'],_0x3550dd=(0x1-_0x5b4ddc)*(0x1-_0x5b4ddc)*(0x1-_0x5b4ddc)*_0x27e79b['y']+0x3*_0x5b4ddc*(0x1-_0x5b4ddc)*(0x1-_0x5b4ddc)*_0xefc1fa['y']+0x3*_0x5b4ddc*_0x5b4ddc*(0x1-_0x5b4ddc)*_0x4d3420['y']+_0x5b4ddc*_0x5b4ddc*_0x5b4ddc*_0x86fd06['y'],_0x1f0f22={'x':_0x475ec9,'y':_0x3550dd};_0x573fdf[_0x3b4059(0x117)](_0x1f0f22),_0x5b4ddc+=_0x4e4e6d;}_0x4e7d84+=0x3,_0x4e7d84>=_0x35ccb5[_0x3b4059(0x10e)]&&_0x573fdf[_0x3b4059(0x117)](_0x27e79b);}return _0x573fdf;}var calculateSwallowPoints=function calculateSwallowPoints(_0xbe106c,_0x10948d){var _0x3afa89=[];switch(_0x10948d){case 0x1:_0x3afa89=computeSwallowtailArrow(_0xbe106c);break;case 0x2:_0x3afa89=computeSwallowtailArrow2(_0xbe106c);break;case 0x3:_0x3afa89=computeSwallowtailArrow(_0xbe106c,![]);default:break;}return _0x3afa89;},computeSwallowtailArrow=function computeSwallowtailArrow(_0x49b78f){var _0x1bf6bd=_0x4e36,_0x379f39=arguments['length']>0x1&&arguments[0x1]!==undefined?arguments[0x1]:!![],_0x5eb873=transformCartesianToWGS84(_0x49b78f[0x0]),_0xe422a9=_0x49b78f[0x1]?transformCartesianToWGS84(_0x49b78f[0x1]):{'x':_0x5eb873['x']+0.00001,'y':_0x5eb873['y']+0.00001,'z':_0x5eb873['z']},_0x13c515=_0x5eb873['x'],_0x220bb0=_0x5eb873['y'],_0x44567f=_0xe422a9['x'],_0x2a3828=_0xe422a9['y'],_0x39a5af=(15.8*_0x44567f+3.2*_0x13c515)/0x13,_0x4a700c=(15.8*_0x2a3828+3.2*_0x220bb0)/0x13,_0x207903=new Array(0x7);_0x207903[0x0]={'x':_0x44567f,'y':_0x2a3828},_0x207903[0x1]={'x':_0x39a5af+0.85/3.2*(_0x2a3828-_0x4a700c),'y':_0x4a700c-0.85/3.2*(_0x44567f-_0x39a5af)},_0x207903[0x2]={'x':_0x39a5af+0.25/3.2*(_0x2a3828-_0x4a700c),'y':_0x4a700c-0.25/3.2*(_0x44567f-_0x39a5af)},_0x207903[0x3]={'x':_0x13c515+1.6/0x13*(_0x2a3828-_0x220bb0),'y':_0x220bb0-1.6/0x13*(_0x44567f-_0x13c515)},_0x207903[0x4]=_0x379f39?{'x':(3.2*_0x44567f+15.8*_0x13c515)/0x13,'y':(3.2*_0x2a3828+15.8*_0x220bb0)/0x13}:undefined,_0x207903[0x5]={'x':_0x13c515-1.6/0x13*(_0x2a3828-_0x220bb0),'y':_0x220bb0+1.6/0x13*(_0x44567f-_0x13c515)},_0x207903[0x6]={'x':_0x39a5af-0.25/3.2*(_0x2a3828-_0x4a700c),'y':_0x4a700c+0.25/3.2*(_0x44567f-_0x39a5af)},_0x207903[0x7]={'x':_0x39a5af-0.85/3.2*(_0x2a3828-_0x4a700c),'y':_0x4a700c+0.85/3.2*(_0x44567f-_0x39a5af)};var _0x27d4cc=[];for(var _0x5cba24=0x0;_0x5cba24<_0x207903[_0x1bf6bd(0x10e)];_0x5cba24++){var _0x5451b2=_0x207903[_0x5cba24];_0x5451b2&&_0x27d4cc[_0x1bf6bd(0x117)](_0x5451b2['x'],_0x5451b2['y'],0x0);}return _0x27d4cc;},computeSwallowtailArrow2=function computeSwallowtailArrow2(_0x4b3e3b){var _0x295387=_0x4e36,_0x571432=transformCartesianToWGS84(_0x4b3e3b[0x0]),_0x2e9c08=_0x4b3e3b[0x1]?transformCartesianToWGS84(_0x4b3e3b[0x1]):{'x':_0x571432['x']+0.00001,'y':_0x571432['y']+0.00001,'z':_0x571432['z']},_0x45f9f9=calculateTwoPoints([_0x571432,_0x2e9c08],0x2),_0x1e9c2d=[];return _0x45f9f9[_0x295387(0x101)](function(_0x3f3cd6){_0x1e9c2d['push'](_0x3f3cd6['x'],_0x3f3cd6['y'],0x0);}),_0x1e9c2d;},calculatePincerArrowPoint=function calculatePincerArrowPoint(_0x2efa5e){var _0x303783=_0x4e36;if(_0x2efa5e[_0x303783(0x10e)]<0x3)return null;var _0x4e052c=[];for(var _0x4e3070=0x0;_0x4e3070<_0x2efa5e['length'];_0x4e3070++){var _0xb0a3a0=transformCartesianToWGS84(_0x2efa5e[_0x4e3070]);_0x4e052c[_0x303783(0x117)]([_0xb0a3a0['x'],_0xb0a3a0['y']]);}var _0x29daa0=_0xbde88c['algorithm']['doubleArrow'](_0x4e052c),_0x26b15a=[],_0x7aa2cc=JSON['stringify'](_0x29daa0['polygonalPoint'])[_0x303783(0x114)]('null');if(_0x7aa2cc==-0x1)_0x26b15a=_0x29daa0[_0x303783(0x116)];return _0x26b15a;},calculateFormationPoints=function calculateFormationPoints(_0x3392a0,_0x196575){var _0x831a8a=_0x4e36,_0x547e89=transformCartesianToWGS84(_0x3392a0[0x0]),_0x32595d=_0x3392a0[0x1]?transformCartesianToWGS84(_0x3392a0[0x1]):{'x':_0x547e89['x']+0.00001,'y':_0x547e89['y']+0.00001,'z':_0x547e89['z']},_0x50c659=(_0x547e89['x']+_0x32595d['x'])/0x2,_0xe440a8=(_0x547e89['y']+_0x32595d['y'])/0x2,_0x352c4e={'x':_0x50c659,'y':_0xe440a8},_0x3e7aca=_0x18958a['Cartesian3'][_0x831a8a(0xfd)](_0x547e89['x'],_0x547e89['y']),_0xc3d605=_0x18958a['Cartesian3'][_0x831a8a(0xfd)](_0x32595d['x'],_0x32595d['y']),_0x264a5f=_0x18958a['Cartesian3'][_0x831a8a(0x106)](_0x3e7aca,_0xc3d605),_0x5e40d3=_0x264a5f/0x2,_0x5e8cd1=calculateAngle(_0x352c4e,_0x32595d),_0x4671fd=getPointByAngleDistance(_0x352c4e['x'],_0x352c4e['y'],0x5a+_0x5e8cd1,_0x5e40d3),_0x3a37f6=calculateAngle(_0x4671fd,_0x547e89),_0xd081c3=Math[_0x831a8a(0x10c)](0x2,0.5)*_0x5e40d3,_0xfa7ddd=[];_0x196575=_0x196575===0x0?0.9:1.1;for(var _0x49e1aa=0x0;_0x49e1aa<0x5a;_0x49e1aa++){var _0xb240e1=_0x3a37f6+_0x49e1aa,_0x4057ca=getPointByAngleDistance(_0x4671fd['x'],_0x4671fd['y'],_0xb240e1,_0xd081c3);_0xfa7ddd['push']({'x':_0x4057ca['x'],'y':_0x4057ca['y']});if(_0x49e1aa!=0x0&&_0x49e1aa%0xf==0x0){var _0x258b72=getPointByAngleDistance(_0x4671fd['x'],_0x4671fd['y'],_0xb240e1,_0xd081c3*_0x196575);_0xfa7ddd['push']({'x':_0x258b72['x'],'y':_0x258b72['y']}),_0xfa7ddd['push']({'x':_0x4057ca['x'],'y':_0x4057ca['y']});}}var _0xa84ea1=[];return _0xfa7ddd[_0x831a8a(0x101)](function(_0x44e3cd){_0xa84ea1['push'](_0x44e3cd['x'],_0x44e3cd['y']);}),_0x18958a[_0x831a8a(0x107)]['fromDegreesArray'](_0xa84ea1);},calculateBowPoints=function calculateBowPoints(_0x2e7cb5){var _0x4a0a7e=_0x4e36,_0x13d085=transformCartesianToWGS84(_0x2e7cb5[0x0]),_0x196427=_0x2e7cb5[0x1]?transformCartesianToWGS84(_0x2e7cb5[0x1]):{'x':_0x13d085['x']+0.00001,'y':_0x13d085['y']+0.00001,'z':_0x13d085['z']},_0x4f1aba=(_0x13d085['x']+_0x196427['x'])/0x2,_0x3a626d=(_0x13d085['y']+_0x196427['y'])/0x2,_0x2badd5={'x':_0x4f1aba,'y':_0x3a626d},_0x3e32ab=_0x18958a['Cartesian3'][_0x4a0a7e(0xfd)](_0x13d085['x'],_0x13d085['y']),_0x6dffca=_0x18958a[_0x4a0a7e(0x107)][_0x4a0a7e(0xfd)](_0x196427['x'],_0x196427['y']),_0x52eccb=_0x18958a[_0x4a0a7e(0x107)][_0x4a0a7e(0x106)](_0x3e32ab,_0x6dffca),_0x286aac=_0x52eccb/0x2,_0x40af24=calculateAngle(_0x2badd5,_0x196427),_0x9b58bc=getPointByAngleDistance(_0x2badd5['x'],_0x2badd5['y'],0x5a+_0x40af24,_0x286aac),_0x42e8b3=calculateAngle(_0x9b58bc,_0x13d085),_0x390a6d=Math['pow'](0x2,0.5)*_0x286aac,_0x2ebdf0=[];for(var _0x3e3704=0x0;_0x3e3704<0x5a;_0x3e3704++){var _0x294e12=_0x42e8b3+_0x3e3704,_0x140ebf=getPointByAngleDistance(_0x9b58bc['x'],_0x9b58bc['y'],_0x294e12,_0x390a6d);_0x2ebdf0['push']({'x':_0x140ebf['x'],'y':_0x140ebf['y']});}var _0x51a4b8=[];return _0x2ebdf0['forEach'](function(_0x5d563c){var _0xc9671b=_0x4a0a7e;_0x51a4b8[_0xc9671b(0x117)](_0x5d563c['x'],_0x5d563c['y']);}),_0x18958a['Cartesian3'][_0x4a0a7e(0xfa)](_0x51a4b8);};function getPointByAngleDistance(_0x53318a,_0x5687d2,_0x1a2379,_0x34874f){var _0x339144=_0x4e36,_0x2305c9=0x615299,_0x2b845f=6356752.3142,_0x1a3cab=0x1/298.257223563,_0x5935be=_0x1a2379*(Math['PI']/0xb4),_0x31ea7b=Math['sin'](_0x5935be),_0x5c26db=Math[_0x339144(0x10d)](_0x5935be),_0x34edd3=(0x1-_0x1a3cab)*Math['tan'](_0x5687d2*(Math['PI']/0xb4)),_0x5cadbf=0x1/Math['sqrt'](0x1+_0x34edd3*_0x34edd3),_0x39023a=_0x34edd3*_0x5cadbf,_0x51ee4c=Math[_0x339144(0xfb)](_0x34edd3,_0x5c26db),_0xe2508=_0x5cadbf*_0x31ea7b,_0x4e5b32=0x1-_0xe2508*_0xe2508,_0x5df83b=_0x4e5b32*(_0x2305c9*_0x2305c9-_0x2b845f*_0x2b845f)/(_0x2b845f*_0x2b845f),_0x12988f=0x1+_0x5df83b/0x4000*(0x1000+_0x5df83b*(-0x300+_0x5df83b*(0x140-0xaf*_0x5df83b))),_0xcdf76b=_0x5df83b/0x400*(0x100+_0x5df83b*(-0x80+_0x5df83b*(0x4a-0x2f*_0x5df83b))),_0x422178=_0x34874f/(_0x2b845f*_0x12988f),_0x18b61c=0x2*Math['PI'],_0x2031ed,_0x1a5622,_0x448eb9;while(Math[_0x339144(0x115)](_0x422178-_0x18b61c)>1e-12){_0x2031ed=Math[_0x339144(0x10d)](0x2*_0x51ee4c+_0x422178),_0x1a5622=Math[_0x339144(0x111)](_0x422178),_0x448eb9=Math[_0x339144(0x10d)](_0x422178);var _0x5228a5=_0xcdf76b*_0x1a5622*(_0x2031ed+_0xcdf76b/0x4*(_0x448eb9*(-0x1+0x2*_0x2031ed*_0x2031ed)-_0xcdf76b/0x6*_0x2031ed*(-0x3+0x4*_0x1a5622*_0x1a5622)*(-0x3+0x4*_0x2031ed*_0x2031ed)));_0x18b61c=_0x422178,_0x422178=_0x34874f/(_0x2b845f*_0x12988f)+_0x5228a5;}var _0x5ba9af=_0x39023a*_0x1a5622-_0x5cadbf*_0x448eb9*_0x5c26db,_0x4a4d8f=Math[_0x339144(0xfb)](_0x39023a*_0x448eb9+_0x5cadbf*_0x1a5622*_0x5c26db,(0x1-_0x1a3cab)*Math['sqrt'](_0xe2508*_0xe2508+_0x5ba9af*_0x5ba9af)),_0x5c3f24=Math[_0x339144(0xfb)](_0x1a5622*_0x31ea7b,_0x5cadbf*_0x448eb9-_0x39023a*_0x1a5622*_0x5c26db),_0x3c006b=_0x1a3cab/0x10*_0x4e5b32*(0x4+_0x1a3cab*(0x4-0x3*_0x4e5b32)),_0x57e668=_0x5c3f24-(0x1-_0x3c006b)*_0x1a3cab*_0xe2508*(_0x422178+_0x3c006b*_0x1a5622*(_0x2031ed+_0x3c006b*_0x448eb9*(-0x1+0x2*_0x2031ed*_0x2031ed)));return{'x':_0x53318a+_0x57e668*(0xb4/Math['PI']),'y':_0x4a4d8f*(0xb4/Math['PI'])};}var calculateSectorPoints=function calculateSectorPoints(_0x44b8c1){var _0xa0f316=_0x4e36,_0x2a4ca3=transformCartesianToWGS84(_0x44b8c1[0x0]);_0x2a4ca3['z']=0x0;var _0x67828f=_0x44b8c1[0x1]?transformCartesianToWGS84(_0x44b8c1[0x1]):{'x':_0x2a4ca3['x']+0.00001,'y':_0x2a4ca3['y'],'z':0x0},_0x594672=_0x44b8c1[0x1]?_0x18958a[_0xa0f316(0x107)][_0xa0f316(0x106)](_0x44b8c1[0x0],_0x44b8c1[0x1]):0.1,_0x2c3ecd=_0x44b8c1[0x2]?transformCartesianToWGS84(_0x44b8c1[0x2]):{'x':_0x67828f['x']+1e-7,'y':_0x67828f['y'],'z':0x0},_0x2a779c=calculateAngle(_0x2a4ca3,_0x67828f),_0x4e3abf=calculateAngle(_0x2a4ca3,_0x2c3ecd),_0xa89dda=Math[_0xa0f316(0x10f)](_0x2a779c,_0x4e3abf),_0x3e0fb1=Math[_0xa0f316(0x10a)](_0x2a779c,_0x4e3abf),_0x2b75b5=[];_0x2b75b5[_0xa0f316(0x117)](_0x2a4ca3['x'],_0x2a4ca3['y']);var _0x3ccabc=0x64,_0x583d06=(_0x3e0fb1-_0xa89dda)/_0x3ccabc;for(var _0x5e63ff=0x0;_0x5e63ff<=_0x3ccabc;_0x5e63ff++){var _0x1d13ce=_0xa89dda+_0x5e63ff*_0x583d06,_0x222dfb=getPointByAngleDistance(_0x2a4ca3['x'],_0x2a4ca3['y'],_0x1d13ce,_0x594672);_0x2b75b5[_0xa0f316(0x117)](_0x222dfb['x'],_0x222dfb['y']);}return _0x2b75b5[_0xa0f316(0x117)](_0x2a4ca3['x'],_0x2a4ca3['y']),_0x18958a['Cartesian3']['fromDegreesArray'](_0x2b75b5);};export{calculateBowPoints,calculateFormationPoints,calculatePincerArrowPoint,calculateSectorPoints,calculateSwallowPoints,computeAssemblePoints,createBezierPoints,getAttackArrowPoints,getEllipticAngle,getPointByAngleDistance,getRightAngleArrowPoints,getSemiAxis};function _0x221d(){var _0x53bb94=['nJjgBvbxsKK','zM9YrwfJAa','oti2nty1CvPezwPK','C3fYDa','BNvSBa','mZG1mZG5A2jfAhzz','zgLZDgfUy2u','q2fYDgvZAwfUmW','nJC1r1vjCgfT','ndmXoda5sKnhqxPn','Bwf4','odi5oduYyvH1D2Dm','Cg93','y29Z','BgvUz3rO','BwLU','C3rYAw5NAwz5','C2LU','mtG2mtC0qurTsun5','mJa0nuHTs0nVqW','Aw5KzxHpzG','ywjZ','Cg9SEwDVBMfSug9PBNq','ChvZAa','ywXNB3jPDgHT','zNjVBurLz3jLzxnbCNjHEq','yxrHBJi','y29Uy2f0','zNjVBurLz3jLzxm','CMv2zxjZzq','mti0nZjwvLHREvq'];_0x221d=function(){return _0x53bb94;};return _0x221d();}
|