在线咨询
QQ交流群
微信公众号

Class: Mathics

THING~ Mathics

数学类


Mathics()

Methods


addVector(v1, v2) → {Array.<Number>}

坐标相加

Parameters:
Name Type Description
v1 Array.<Number>

坐标

v2 Array.<Number>

坐标

Returns:
Type
Array.<Number>
Example
THING.Math.addVector([1,2,3],[3,4,5]); // 返回值 [4,6,8]

clamp(value, min, max) → {Number}

限制 value 的值在 min 和 max 之间 如果 value 小于 min,返回 min 。如果 value 大于 max,返回 max,否则返回 value

Parameters:
Name Type Description
value Number

数值

min Number

最小值

max Number

最大值

Returns:
Type
Number
Example
console.log(THING.Math.clamp(9,1,5)) // 5
console.log(THING.Math.clamp(-1,1,5)) // 1
console.log(THING.Math.clamp(3,1,5)) // 3

crossVector(v1, v2) → {Number}

向量叉乘 叉乘得到的向量垂直于原来的两个向量 在3D空间中,常用来求两个向量所在平面的法向量

Parameters:
Name Type Description
v1 Array.<Number>

坐标

v2 Array.<Number>

坐标

Returns:
Type
Number
Example
THING.Math.crossVector([1,0,0],[0,1,0]); // 返回值 [0,0,1]

degToRad(degrees) → {Number}

角度转弧度

Parameters:
Name Type Description
degrees Number

角度

Returns:
Type
Number
Example
THING.Math.degToRad(180) // 3.141592653589793

divideVector(v, scale) → {Array.<Number>}

向量数除

Parameters:
Name Type Description
v Array.<Number>

坐标

scale Number

缩放系数

Returns:
Type
Array.<Number>
Example
THING.Math.divideVector([3,6,9],3); // 返回值 [1,2,3]

dotVector(v1, v2) → {Number}

向量点乘

Parameters:
Name Type Description
v1 Array.<Number>

坐标

v2 Array.<Number>

坐标

Returns:
Type
Number
Example
THING.Math.dotVector([1,2,3],[4,5,6]); // 返回结果 32

equalsVector(v1, v2, epsilon) → {Boolean}

坐标是否相同

Parameters:
Name Type Description
v1 Array.<Number>

坐标

v2 Array.<Number>

坐标

epsilon Number

误差范围

Returns:
Type
Boolean

fract(x) → {Number}

返回小数部分

Parameters:
Name Type Description
x Number

数值

Returns:
Type
Number

getAnglesFromLonlat(lonlat, angle) → {Array}

地球上根据经纬度和方位角得到可以使物体贴地的旋转信息

Parameters:
Name Type Description
lonlat Array

经纬度坐标 [lon, lat]

angle Number

方位角 默认 0

Returns:

旋转信息 [angleX, angleY, angleZ]

Type
Array

getArea(positions) → {Number}

获取面积(只使用 x 和 z 两个位置属性来结算)

Parameters:
Name Type Description
positions Array.<Array.<Number>>

坐标点数组列表

Returns:
Type
Number

getDirection(v1, v2) → {Array.<Number>}

获取 v2 到 v1 的方向向量

Parameters:
Name Type Description
v1 Array.<Number>

起点

v2 Array.<Number>

终点

Returns:
Type
Array.<Number>
Example
// 第一个参数为起点 第二个参数为终点
THING.Math.getDirection([1,1,1],[2,2,2]);
// 返回值[0.5773502691896258,0.5773502691896258,0.5773502691896258]

getDistance(v1, v2) → {Number}

获取两点间距离

Parameters:
Name Type Description
v1 Array.<Number>

第一个坐标点

v2 Array.<Number>

第二个坐标点

Returns:
Type
Number
Example
THING.Math.getDistance([1,1,1],[2,2,2]); // 返回值 1.7320508075688772

getLabelPosition(points, height?) → {Array.<Number>}

获取区域的最佳标签显示位置(只能以平面的方式获取,坐标的 Y 轴位置会被忽略)

Parameters:
Name Type Description
points Array.<Array.<Number>>

坐标位置列表

height? Number

标签高度, (可选参数,默认取平均高度)

Returns:

标签位置

Type
Array.<Number>

getVectorLength(v) → {Number}

获取向量长度(向量的模)

Parameters:
Name Type Description
v Array.<Number>

坐标

Returns:
Type
Number
Example
THING.Math.getVectorLength([1,1,1]);// 返回值 1.7320508075688772

getVectorLengthSquared(v) → {Number}

获取向量长度的平方

Parameters:
Name Type Description
v Array.<Number>

坐标

Returns:
Type
Number
Example
THING.Math.getVectorLengthSquared([1,1,1]);// 返回值 3

isPowerOf2(num) → {Boolean}

判断数值是否2次幂

Parameters:
Name Type Description
num Number

数值

Returns:
Type
Boolean

lerp(start, end, percent) → {Number}

线性插值

Parameters:
Name Type Description
start Number

起始值

end Number

终止值

percent Number

百分比(0~1)

Returns:
Type
Number
Example
THING.Math.lerp(2,10,0.5) // 6

lonlat2World(lonLat, length?, r?) → {Array}

经纬度转世界坐标

Parameters:
Name Type Description
lonLat Array

[经度,纬度]

length? Number

距离地面的高度, 默认为 0

r? Number

距离球心的半径默认为 6378000

Returns:

[x,y,z]

Type
Array

maxVector(positions) → {Array.<Number>}

获取坐标数组中各数组相同索引下的最大值

Parameters:
Name Type Description
positions Array.<Array.<Number>>

坐标数组

Returns:
Type
Array.<Number>
Example
var maxV=THING.Math.maxVector([[0,1,0],[1,2,3],[3,1,0],[1,1,1]])
console.log(maxV) // [3,2,3]

minVector(positions) → {Array.<Number>}

获取坐标数组中各数组相同索引下的最小值

Parameters:
Name Type Description
positions Array.<Array.<Number>>

坐标数组

Returns:
Type
Array.<Number>
Example
var mimV=THING.Math.minVector([[0,1,0],[1,2,3],[3,1,0],[1,1,1])
console.log(mimV) // [0,1,0]

negVector(v) → {Array.<Number>}

坐标取负

Parameters:
Name Type Description
v Array.<Number>

坐标

Returns:
Type
Array.<Number>
Example
THING.Math.negVector([1,2,3]); // 返回值[-1,-2,-3]

normalizeVector(v) → {Array.<Number>}

求单位向量

Parameters:
Name Type Description
v Array.<Number>

坐标

Returns:
Type
Array.<Number>
Example
THING.Math.normalizeVector([1,1,1]);
// 返回值 [0.5773502691896258,0.5773502691896258,0.5773502691896258]

radToDeg(radians) → {Number}

弧度转角度

Parameters:
Name Type Description
radians Number

弧度

Returns:
Type
Number
Example
THING.Math.radToDeg(Math.PI) // 180

randomColor() → {Number}

获取随机颜色

Returns:
Type
Number

randomFloat(min, max) → {Number}

获取随机浮点数值[最小值, 最大值]

Parameters:
Name Type Description
min Number

最小值

max Number

最大值

Returns:
Type
Number

randomFromArray(arr) → {*}

从数组随机挑选出任一元素

Parameters:
Name Type Description
arr Array.<*>

数组

Returns:

元素

Type
*

randomIndex(number) → {Number}

产生随机下标值 [0, number - 1]

Parameters:
Name Type Description
number Number

总数

Returns:
Type
Number

randomInt(min, max) → {Number}

获取随机整数数值[最小值, 最大值]

Parameters:
Name Type Description
min Number

最小值

max Number

最大值

Returns:
Type
Number

randomVector2(rx?, ry?) → {Array.<Number>}

随机产生坐标信息

Parameters:
Name Type Description
rx? Number

x 坐标会在[-rx, rx]之间进行随机

ry? Number

y 坐标会在[-ry, ry]之间进行随机

Returns:
Type
Array.<Number>
Example
// xyz 会在 [-10, 10] 之间随机
THING.Math.randomVector2(10, 10);
// 也可用如下的方式调用(xyz 用同一个数值)
THING.Math.randomVector2(10);

randomVector3(rx?, ry?, rz?) → {Array.<Number>}

随机产生坐标信息

Parameters:
Name Type Description
rx? Number

x 坐标会在[-rx, rx]之间进行随机

ry? Number

y 坐标会在[-ry, ry]之间进行随机

rz? Number

z 坐标会在[-rz, rz]之间进行随机

Returns:
Type
Array.<Number>
Example
// xyz 会在 [-10, 10] 之间随机
THING.Math.randomVector3(10, 10, 10);
// 也可用如下的方式调用(xyz 用同一个数值)
THING.Math.randomVector3(10);

roundUpPowerOf2(v) → {Number}

向上取数值的2次幂

Parameters:
Name Type Description
v Number

数值

Returns:
Type
Number
Example
THING.Math.roundUpPowerOf2(9) //16

scaleVector(v, scale) → {Array.<Number>}

向量数乘

Parameters:
Name Type Description
v Array.<Number>

坐标

scale Number

缩放系数

Returns:
Type
Array.<Number>
Example
THING.Math.scaleVector([1,2,3],3); // 返回值 [3,6,9]
THING.Math.scaleVector([1,2,3],-2); // 返回值 [-2,-4,-6]

subVector(v1, v2) → {Array.<Number>}

坐标相减

Parameters:
Name Type Description
v1 Array.<Number>

坐标

v2 Array.<Number>

坐标

Returns:
Type
Array.<Number>
Example
THING.Math.subVector([1,2,3],[3,4,5]); // 返回值 [-2,-2,-2]

swapArray(arr, index1, index2) → {Array}

交换数组元素位置

Parameters:
Name Type Description
arr Array

数组

index1 Number

第一个元素索引下标

index2 Number

第二个元素索引下标

Returns:
Type
Array
Example
console.log(THING.Math.swapArray([0,1,2,3],1,2)) // [0,2,1,3]

toInteger(n) → {Number}

数值取整

Parameters:
Name Type Description
n Number

数值

Returns:
Type
Number

world2Lonlat(pos, earthCenter) → {Array}

世界坐标转经纬度

Parameters:
Name Type Description
pos Array

世界坐标 [x,y,z]

earthCenter Array

默认为[0,0,0],地球的中心点

Returns:

[经度,纬度,高度]

Type
Array