#### # new AlgorithmLib()

通用算法工具集

### 方法

#### # static calAngleOf3Pnt(p1, p2, p3)

计算三点的角度（0-180之间）

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`p1` | Cesium.Cartesian3 | 顶点1
`p2` | Cesium.Cartesian3 | 顶点2
`p3` | Cesium.Cartesian3 | 顶点3

#### # static Cartesian3ArrayToDegrees(positions, resultopt)

笛卡尔世界坐标数组转经纬度degree数组

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | 笛卡尔世界坐标数组
`result` | Array.<Number> | 经纬度（含高度）度数组

返回值:

经纬度数组

类型: Array.<Number>

#### # static compute_3D_polygon_area(points)

计算 polygon 面积

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`points` | Array.<Cesium.Cartesian3> | polygon顶点集

返回值:
类型: Number

#### # static computeTileInPolygon(tile, positions)

判断tile与绘制范围是否相交

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`tile` | Array.<MapGISM3DSet> | MapGISM3DSet对象数组，详见Cesium.MapGISM3DSet
`positions` | Array.<Cesium.Cartesian3> | 范围坐标点序列

返回值:

Cesium.Intersect.OUTSIDE, Cesium.Intersect.INTERSECTING, or Cesium.Intersect.INSIDE表示完全包围、相交和在外部.false表示计算失败

类型: Cesium.Intersect | false

#### # static deepCopy(o)

深度拷贝对象

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`o` | object | 被拷贝对象

返回值:
类型: object

#### # static getCenterFromPoints(positions)

根据输入笛卡尔坐标数组，计算中心点

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | 坐标点序列

返回值:

根据坐标点序列计算出的中心点

类型: Array.<Cesium.Cartesian3>

#### # static getCenterOfCartesian3Points(points, useHeight)

计算Cartesian3数组的中心

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`points` | Array.<Cesium.Cartesian3> |
`useHeight` | Boolean | 是否使用高度

返回值:
类型: Cesium.Cartesian3

#### # static getCenterOfGravityPoint(points)

计算Cartesian3数组的重心

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`points` | Array.<Cesium.Cartesian3> |

返回值:
类型: Cesium.Cartesian3

#### # static getEastNorthUpXYZ(viewer, point, windowPosition)

计算屏幕坐标相对于地表某点垂直（或平行方向XY）的位置

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`viewer` | Number | 视图
`point` | Cesium.Cartesian3 | 地表点
`windowPosition` | Cesium.Cartesian2 | 屏幕坐标

返回值:

与经过地表点的垂直地表的平面的交点,endPositionX表示X方向(经线方向)的面的交点位置(世界坐标)，endPositionY表示Y方向(纬线方向)的面的交点位置(世界坐标)，XYZLocPosition表示在地表点坐标系下局部坐标系XYZ方向的坐标

类型: Object

#### # static getPixelsPerMeter(scene)

获取当前场景下，每米占据多少个像素值

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`scene` | Scene |

返回值:

pixel/m

类型: Number

#### # static getPointOntoLine(ellipsoid, pointA, pointB, pointP, result)

计算三维场景中，直线外一点在直线上的投影点

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`ellipsoid` | Ellipsoid | 椭球参数
`pointA` | Cesium.Cartesian3 | 直线上的点 A 经纬度
`pointB` | Cesium.Cartesian3 | 直线上的点 B 经纬度
`pointP` | Cesium.Cartesian3 | 直线外的点 P 经纬度
`result` | Cesium.Cartesian3 | 返回结果，直线上的投影点

返回值:

result 经纬度坐标

类型: Cesium.Cartesian3

#### # static getPointOntoLineByWorldPosition(pointA, pointB, pointP, result)

计算三维场景中，直线外一点在直线上的投影点

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`pointA` | Cesium.Cartesian3 | 直线上一点A，世界坐标
`pointB` | Cesium.Cartesian3 | 直线上一点B，世界坐标
`pointP` | Cesium.Cartesian3 | 直线外一点P，世界坐标
`result` | Cesium.Cartesian3 | 直线外一点，到直线的垂足点，世界坐标

返回值:

result

类型: Cesium.Cartesian3

#### # static getPointOntoPlane(ellipsoid, originPoint, normal, outPoint, result)

计算平面(此平面由一个点，与法线构成)外一点到此平面上的投影点

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`ellipsoid` | Ellipsoid | 椭球参数
`originPoint` | Cesium.Cartesian3 | 平面上的一个点，世界坐标
`normal` | Cesium.Cartesian3 | 平面的法线
`outPoint` | Cesium.Cartesian3 | 平面外一点，世界坐标
`result` | Cesium.Cartesian3 | 平面外一点在平面上的投影，世界坐标

返回值:

result 平面外一点在平面上的投影，世界坐标

类型: Cesium.Cartesian3

#### # static getRandomPointByRect(west, south, east, north, count, result)

计算矩形范围内的随机点

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`west` | Number | 西向经度数
`south` | Number | 南向纬度数
`east` | Number | 东向经度数
`north` | Number | 北向纬度数
`count` | Number | 需要的随机点数
`result` | Array.<Object> |

返回值:

result 返回随机点数集合

类型: Array.<Object>

#### # static getRect3DPointsByLine(direct, p1, p2, result)

根据两点，确定一个平行于视窗的矩形

顶点顺序为： 0---3 | \ | 1---2

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`direct` | Cesium.Cartesian3 | 朝向,使用时一般用相机朝右的朝向
`p1` | Cesium.Cartesian3 | 起始点，世界坐标
`p2` | Cesium.Cartesian3 | 绘制结束点，世界坐标
`result` | Array | undefined | 返回值，矩形的4个顶点

返回值:

result

类型: Array.<Cesium.Cartesian3>

#### # static getSquarePointsByLine(p1, p2, result)

通过两点确定一个正方形

顶点顺序为： 0---3 | \ | 1---2

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`p1` | Cesium.Cartesian3 | 起始点, 值类型为世界坐标
`p2` | Cesium.Cartesian3 | 结束点, 值类型为世界坐标
`result` | Array | 返回值

返回值:

result 正方形四个顶点, 值类型为世界坐标

类型: Array.<Cesium.Cartesian3>

#### # static getTransform(longitude, latitude, height)

计算矩阵

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`longitude` | Number | 角度制经度
`latitude` | Number | 角度制纬度
`height` | Number | 高程

返回值:
类型: Cesium.Matrix4

#### # static isConvex(points)

计算是否为凸多边形

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`points` | Array.<Cesium.Cartesian3> | 点坐标

返回值:

result 0：数量小于2；-1：凹多边形；1：凸多边形；

类型: Number

#### # static linearInterpolate(positions, step)

线性插值（二维坐标）

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`positions` | Array.<Cesium.Cartesian2> | 坐标点序列
`step` | Number | 步长

返回值:

插值后的坐标点序列

类型: Array.<Cesium.Cartesian2>

#### # static linearInterpolate3D(positions, step)

线性插值(三维坐标)

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | 坐标点序列
`step` | Number | 步长

返回值:

插值后的坐标点序列

类型: Array.<Cesium.Cartesian3>

#### # static mergeLayersBoundingSphere(layers)

获取 M3D 缓存图层组合并后的包围球

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`layers` | Array.<MapGISM3DSet> | MapGISM3DSet对象数组，详见Cesium.MapGISM3DSet

返回值:

boundingSphere 包围球

类型: Cesium.BoundingSphere

#### # static pickFromRay(scene, viewPosition, options)

射线求交

#### 参数:

名称 | 类型 | 默认值 | 描述
--- | --- | --- | ---
`scene` | Scene |  |
`viewPosition` | Cesium.Cartesian3 |  |
`options` | options |  |
`direction` | Cesium.Cartesian3 |  | 方向向量，传入该参数时后续方向参数无效
`heading` | Number | 0 | 方位角
`pitch` | Number | 0 | 俯仰角
`distance` | Number |  | 传入该值，则射线求交无结果时返回方向上该距离的点

返回值:

返回射线物体相交的第一个交点坐标，没有交点则返回undefined

类型: Cesium.Cartesian3 | undefined

#### # static pointIsInPolygon(positions, point)

点是否在范围内(多边形)

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`positions` | Array.<Cesium.Cartographic> | 多边形坐标点序列
`point` | Cesium.Cartographic | 点

返回值:

true在范围内，false不在范围内。

类型: Boolean

#### # static polygonInterpolate(positions, step)

区域插值(多边形)

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | 坐标点序列
`step` | Number | 步长

返回值:

插值后的坐标点序列

类型: Array.<Cesium.Cartesian3>

#### # static randomNum(minNum, maxNum)

获取区间范围内的随机数

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`minNum` | Number | 区间最小值
`maxNum` | Number | 区间最大值

返回值:

result 在范围[minNum, maxNum]内的随机数

类型: Number

#### # static setZValueByTerrain(TerrainProvider, level, positions)

根据地形设置二维坐标的高程值

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`TerrainProvider` | CesiumTerrainProvider | 地形
`level` | Number | 以地形的级数为基准
`positions` | Array.<Cesium.Cartesian2> | 需设置高程的二维坐标点序列

返回值:

设置成功后的回调

类型: function

#### # static simplifyLine(positions)

化简抽稀(用于折线路绘制)

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`positions` | Array.<Cesium.Cartesian3> | 坐标点序列

返回值:

抽稀后的坐标点序列

类型: Array.<Cesium.Cartesian3>

#### # static sphericalPolygonAreaMeters(points)

计算球面 投影面积方法

#### 参数:

名称 | 类型 | 描述
--- | --- | ---
`points` | Array.<Cesium.Cartesian3> | polygon顶点集

返回值:
类型: Number