@lijuhong1981/cesium.utils 0.0.0-stage → 0.1.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/README.md +62 -2
- package/package.json +33 -4
- package/src/additions/Geographic.js +603 -0
- package/src/additions/GeographicTransform.js +291 -0
- package/src/additions/GeometryInstanceAttributes.js +164 -0
- package/src/additions/ModelMatrixTransforms.js +822 -0
- package/src/additions/PropertyChangedListener.js +72 -0
- package/src/additions/PropertyType.js +30 -0
- package/src/additions/StTransforms.js +266 -0
- package/src/additions/TranslationRotationScaleTransform.js +809 -0
- package/src/additions/index.js +8 -0
- package/src/index.js +4 -0
- package/src/parses/index.js +46 -0
- package/src/parses/parseAltitude.js +32 -0
- package/src/parses/parseArcType.js +26 -0
- package/src/parses/parseAttitudeToHeadingPitchRoll.js +26 -0
- package/src/parses/parseAttitudeToMatrix3.js +17 -0
- package/src/parses/parseAttitudeToQuaternion.js +21 -0
- package/src/parses/parseCartographicToCartesian.js +21 -0
- package/src/parses/parseCartographicsToPositions.js +20 -0
- package/src/parses/parseClassificationType.js +24 -0
- package/src/parses/parseClockRange.js +26 -0
- package/src/parses/parseColorBlendMode.js +26 -0
- package/src/parses/parseCornerType.js +24 -0
- package/src/parses/parseCullFace.js +28 -0
- package/src/parses/parseEulerToHeadingPitchRoll.js +21 -0
- package/src/parses/parseEulerToQuaternion.js +18 -0
- package/src/parses/parseGeographicToCartesian.js +21 -0
- package/src/parses/parseGeographicsToPositions.js +20 -0
- package/src/parses/parseHeading.js +28 -0
- package/src/parses/parseHeightReference.js +24 -0
- package/src/parses/parseHorizontalOrigin.js +26 -0
- package/src/parses/parseLabelStyle.js +26 -0
- package/src/parses/parseLatitude.js +28 -0
- package/src/parses/parseLongitude.js +28 -0
- package/src/parses/parsePitch.js +26 -0
- package/src/parses/parseRoll.js +26 -0
- package/src/parses/parseRotationToHeadingPitchRoll.js +40 -0
- package/src/parses/parseRotationToMatrix3.js +25 -0
- package/src/parses/parseRotationToQuaternion.js +27 -0
- package/src/parses/parseShadowMode.js +26 -0
- package/src/parses/parseToBoundingRectangle.js +33 -0
- package/src/parses/parseToCartesian2.js +35 -0
- package/src/parses/parseToCartesian3.js +37 -0
- package/src/parses/parseToCartesian3Array.js +21 -0
- package/src/parses/parseToCartesian4.js +39 -0
- package/src/parses/parseToCartographic.js +31 -0
- package/src/parses/parseToColor.js +33 -0
- package/src/parses/parseToDistanceDisplayCondition.js +41 -0
- package/src/parses/parseToGeographic.js +31 -0
- package/src/parses/parseToHeadingPitchRange.js +45 -0
- package/src/parses/parseToJulianDate.js +23 -0
- package/src/parses/parseToNearFarScalar.js +33 -0
- package/src/parses/parseToPlane.js +37 -0
- package/src/parses/parseToPolygonHierarchy.js +48 -0
- package/src/parses/parseToRange.js +26 -0
- package/src/parses/parseToRectangle.js +32 -0
- package/src/parses/parseToTimeInterval.js +45 -0
- package/src/parses/parseVerticalOrigin.js +28 -0
- package/src/revisions/BoundingSphere.revise.js +107 -0
- package/src/revisions/Camera.revise.js +366 -0
- package/src/revisions/Cartesian.revise.js +313 -0
- package/src/revisions/Cartographic.revise.js +443 -0
- package/src/revisions/Check.revise.js +164 -0
- package/src/revisions/Color.revise.js +271 -0
- package/src/revisions/DistanceDisplayCondition.revise.js +37 -0
- package/src/revisions/Ellipsoid.revise.js +64 -0
- package/src/revisions/Geometry.revise.js +79 -0
- package/src/revisions/Globe.revise.js +92 -0
- package/src/revisions/HeadingPitchRoll.revise.js +328 -0
- package/src/revisions/JulianDate.revise.js +28 -0
- package/src/revisions/Material.revise.js +308 -0
- package/src/revisions/Math.revise.js +98 -0
- package/src/revisions/Matrix.revise.js +578 -0
- package/src/revisions/POI.revise.js +178 -0
- package/src/revisions/Plane.revise.js +43 -0
- package/src/revisions/PolylinePipeline.revise.js +54 -0
- package/src/revisions/PostProcessStageLibrary.revise.js +1143 -0
- package/src/revisions/Primitive.revise.js +83 -0
- package/src/revisions/Property.revise.js +37 -0
- package/src/revisions/Quaternion.revise.js +66 -0
- package/src/revisions/Rectangle.revise.js +570 -0
- package/src/revisions/SceneTransforms.revise.js +82 -0
- package/src/revisions/Spherical.revise.js +35 -0
- package/src/revisions/index.js +25 -0
- package/src/utils/Scratch.js +165 -0
- package/src/utils/computeCirclePositions.js +48 -0
- package/src/utils/computeCircleRadius.js +19 -0
- package/src/utils/computeModelMatrix.js +109 -0
- package/src/utils/computeStTransform.js +57 -0
- package/src/utils/createGeometry.js +114 -0
- package/src/utils/createPointCloudGeometry.js +79 -0
- package/src/utils/getGeometryInstanceAttributes.js +43 -0
- package/src/utils/getPositionFromTarget.js +29 -0
- package/src/utils/getRenderState.js +35 -0
- package/src/utils/index.js +13 -0
- package/src/utils/isColorMaterial.js +13 -0
- package/src/utils/isTranslucent.js +13 -0
- package/src/utils/resolveModelMatrixByFixedFrame.js +30 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Math as CesiumMath, Check } from "cesium";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 扩展 Cesium 的 Math(CesiumMath)类,补充 WGS84 相关常量,
|
|
5
|
+
* 以及数值区间判断、随机数等方法。
|
|
6
|
+
* @class CesiumMath
|
|
7
|
+
* @see {@link https://cesium.com/learn/cesiumjs/ref-doc/Math.html}
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* WGS84 椭球体的平均半径,单位米。
|
|
12
|
+
* @type {number}
|
|
13
|
+
* @constant
|
|
14
|
+
* @memberof CesiumMath
|
|
15
|
+
*/
|
|
16
|
+
CesiumMath.WGS84_RADIUS = 6378137.0;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* WGS84 椭球体的赤道周长,单位米。
|
|
20
|
+
* @type {number}
|
|
21
|
+
* @constant
|
|
22
|
+
* @memberof CesiumMath
|
|
23
|
+
*/
|
|
24
|
+
CesiumMath.WGS84_CIRCUM = 2 * Math.PI * CesiumMath.WGS84_RADIUS;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* WGS84 椭球体每米对应的经度/纬度度数。
|
|
28
|
+
* @type {number}
|
|
29
|
+
* @constant
|
|
30
|
+
* @memberof CesiumMath
|
|
31
|
+
*/
|
|
32
|
+
CesiumMath.WGS84_DEGREES_PER_METERS = 360.0 / CesiumMath.WGS84_CIRCUM;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* WGS84 椭球体每度对应的米数。
|
|
36
|
+
* @type {number}
|
|
37
|
+
* @constant
|
|
38
|
+
* @memberof CesiumMath
|
|
39
|
+
*/
|
|
40
|
+
CesiumMath.WGS84_METERS_PER_DEGREES = CesiumMath.WGS84_CIRCUM / 360.0;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 判断数值是否在指定的闭区间 [min, max] 内。
|
|
44
|
+
* @param {number} value 待判断的数值。
|
|
45
|
+
* @param {number} min 区间最小值。
|
|
46
|
+
* @param {number} max 区间最大值。
|
|
47
|
+
* @returns {boolean} 若 value 在 [min, max] 内返回 true,否则返回 false。
|
|
48
|
+
* @memberof CesiumMath
|
|
49
|
+
* @static
|
|
50
|
+
*/
|
|
51
|
+
CesiumMath.between = function (value, min, max) {
|
|
52
|
+
Check.typeOf.number('value', value);
|
|
53
|
+
Check.typeOf.number('min', min);
|
|
54
|
+
Check.typeOf.number('max', max);
|
|
55
|
+
if (value < min || value > max)
|
|
56
|
+
return false;
|
|
57
|
+
return true;
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 生成 [min, max) 区间内的随机浮点数。
|
|
62
|
+
* @param {number} min 区间最小值(包含)。
|
|
63
|
+
* @param {number} max 区间最大值(不包含)。
|
|
64
|
+
* @returns {number} 随机浮点数。
|
|
65
|
+
* @memberof CesiumMath
|
|
66
|
+
* @static
|
|
67
|
+
*/
|
|
68
|
+
CesiumMath.randomNumber = function (min, max) {
|
|
69
|
+
return CesiumMath.randomBetween(min, max);
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 生成 [min, max] 区间内的随机整数。
|
|
74
|
+
* @param {number} [min=0] 区间最小值(包含)。
|
|
75
|
+
* @param {number} [max=Number.MAX_SAFE_INTEGER-1] 区间最大值(包含)。
|
|
76
|
+
* @returns {number} 随机整数。
|
|
77
|
+
* @memberof CesiumMath
|
|
78
|
+
* @static
|
|
79
|
+
*/
|
|
80
|
+
CesiumMath.randomIntegerBetween = function (min = 0, max = Number.MAX_SAFE_INTEGER - 1) {
|
|
81
|
+
const result = CesiumMath.randomBetween(min, max + 1);
|
|
82
|
+
return Math.floor(result);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* 生成 [min, max] 区间内的随机整数。
|
|
87
|
+
* @param {number} min 区间最小值(包含)。
|
|
88
|
+
* @param {number} max 区间最大值(包含)。
|
|
89
|
+
* @returns {number} 随机整数。
|
|
90
|
+
* @memberof CesiumMath
|
|
91
|
+
* @static
|
|
92
|
+
*/
|
|
93
|
+
CesiumMath.randomInteger = function (min, max) {
|
|
94
|
+
return CesiumMath.randomIntegerBetween(min, max);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
export default CesiumMath;
|
|
98
|
+
export { CesiumMath };
|
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
import { Cartesian3, HeadingPitchRoll, Matrix3, Matrix4, Quaternion, TranslationRotationScale } from "cesium";
|
|
2
|
+
import parseEulerToHeadingPitchRoll from "../parses/parseEulerToHeadingPitchRoll.js";
|
|
3
|
+
import parseEulerToQuaternion from "../parses/parseEulerToQuaternion.js";
|
|
4
|
+
import Scratch from "../utils/Scratch.js";
|
|
5
|
+
import Check from "./Check.revise.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 扩展 Cesium 的 Matrix3 类,补充列/行向量存取、旋转分量、四元数、
|
|
9
|
+
* 航向俯仰横滚角、缩放等便捷方法。
|
|
10
|
+
* @class Matrix3
|
|
11
|
+
* @see {@link https://cesium.com/learn/cesiumjs/ref-doc/Matrix3.html}
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* 扩展 Cesium 的 Matrix4 类,补充从四元数、航向俯仰横滚角、欧拉角创建矩阵,
|
|
15
|
+
* 以及旋转、平移、缩放、四元数、欧拉角等便捷方法。
|
|
16
|
+
* @class Matrix4
|
|
17
|
+
* @see {@link https://cesium.com/learn/cesiumjs/ref-doc/Matrix4.html}
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
//--Matrix3--
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 获取矩阵指定列的列向量。
|
|
24
|
+
* @param {number} index 列索引(0、1 或 2)。
|
|
25
|
+
* @param {Cartesian3} [result=new Cartesian3()] 用于存储结果的可选对象。
|
|
26
|
+
* @returns {Cartesian3} 指定列的列向量。
|
|
27
|
+
* @memberof Matrix3
|
|
28
|
+
*/
|
|
29
|
+
Matrix3.prototype.getColumn = function (index, result = new Cartesian3()) {
|
|
30
|
+
return Matrix3.getColumn(this, index, result);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* 获取矩阵指定行的行向量。
|
|
35
|
+
* @param {number} index 行索引(0、1 或 2)。
|
|
36
|
+
* @param {Cartesian3} [result=new Cartesian3()] 用于存储结果的可选对象。
|
|
37
|
+
* @returns {Cartesian3} 指定行的行向量。
|
|
38
|
+
* @memberof Matrix3
|
|
39
|
+
*/
|
|
40
|
+
Matrix3.prototype.getRow = function (index, result = new Cartesian3()) {
|
|
41
|
+
return Matrix3.getRow(this, index, result);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 设置当前矩阵的旋转分量。
|
|
46
|
+
* @param {Matrix3} rotation 旋转矩阵。
|
|
47
|
+
* @returns {Matrix3} 修改后的矩阵(this)。
|
|
48
|
+
* @memberof Matrix3
|
|
49
|
+
*/
|
|
50
|
+
Matrix3.prototype.setRotation = function (rotation) {
|
|
51
|
+
return Matrix3.setRotation(this, rotation, this);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* 获取当前矩阵的旋转分量。
|
|
56
|
+
* @param {Matrix3} [result=new Matrix3()] 用于存储结果的可选对象。
|
|
57
|
+
* @returns {Matrix3} 旋转矩阵。
|
|
58
|
+
* @memberof Matrix3
|
|
59
|
+
*/
|
|
60
|
+
Matrix3.prototype.getRotation = function (result = new Matrix3()) {
|
|
61
|
+
return Matrix3.getRotation(this, result);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* 通过四元数设置矩阵的旋转分量。
|
|
66
|
+
* @param {Matrix3} matrix 待修改的矩阵。
|
|
67
|
+
* @param {Quaternion} quaternion 旋转四元数。
|
|
68
|
+
* @param {Matrix3} [result=new Matrix3()] 用于存储结果的可选对象。
|
|
69
|
+
* @returns {Matrix3} 修改或生成后的矩阵。
|
|
70
|
+
* @memberof Matrix3
|
|
71
|
+
* @static
|
|
72
|
+
*/
|
|
73
|
+
Matrix3.setQuaternion = function (matrix, quaternion, result = new Matrix3()) {
|
|
74
|
+
Check.instanceOf('matrix', matrix, Matrix3);
|
|
75
|
+
Check.instanceOf('quaternion', quaternion, Quaternion);
|
|
76
|
+
|
|
77
|
+
const rotation = Matrix3.fromQuaternion(quaternion, Scratch.scratchRotationMatrix);
|
|
78
|
+
return Matrix3.setRotation(matrix, rotation, result);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 通过四元数设置当前矩阵的旋转分量。
|
|
83
|
+
* @param {Quaternion} quaternion 旋转四元数。
|
|
84
|
+
* @returns {Matrix3} 修改后的矩阵(this)。
|
|
85
|
+
* @memberof Matrix3
|
|
86
|
+
*/
|
|
87
|
+
Matrix3.prototype.setQuaternion = function (quaternion) {
|
|
88
|
+
return Matrix3.setQuaternion(this, quaternion, this);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* 获取矩阵旋转分量对应的四元数。
|
|
93
|
+
* @param {Matrix3} matrix 目标矩阵。
|
|
94
|
+
* @param {Quaternion} [result=new Quaternion()] 用于存储结果的可选对象。
|
|
95
|
+
* @returns {Quaternion} 旋转四元数。
|
|
96
|
+
* @memberof Matrix3
|
|
97
|
+
* @static
|
|
98
|
+
*/
|
|
99
|
+
Matrix3.getQuaternion = function (matrix, result = new Quaternion()) {
|
|
100
|
+
const rotation = Matrix3.getRotation(matrix, Scratch.scratchRotationMatrix);
|
|
101
|
+
return Quaternion.fromRotationMatrix(rotation, result);
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* 获取当前矩阵旋转分量对应的四元数。
|
|
106
|
+
* @param {Quaternion} [result] 用于存储结果的可选对象。
|
|
107
|
+
* @returns {Quaternion} 旋转四元数。
|
|
108
|
+
* @memberof Matrix3
|
|
109
|
+
*/
|
|
110
|
+
Matrix3.prototype.getQuaternion = function (result) {
|
|
111
|
+
return Matrix3.getQuaternion(this, result);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* 通过航向、俯仰、横滚(HeadingPitchRoll)设置矩阵的旋转分量。
|
|
116
|
+
* @param {Matrix3} matrix 待修改的矩阵。
|
|
117
|
+
* @param {HeadingPitchRoll} headingPitchRoll 航向俯仰横滚角。
|
|
118
|
+
* @param {Matrix3} [result=new Matrix3()] 用于存储结果的可选对象。
|
|
119
|
+
* @returns {Matrix3} 修改或生成后的矩阵。
|
|
120
|
+
* @memberof Matrix3
|
|
121
|
+
* @static
|
|
122
|
+
*/
|
|
123
|
+
Matrix3.setHeadingPitchRoll = function (matrix, headingPitchRoll, result = new Matrix3()) {
|
|
124
|
+
Check.instanceOf('matrix', matrix, Matrix3);
|
|
125
|
+
Check.instanceOf('headingPitchRoll', headingPitchRoll, HeadingPitchRoll);
|
|
126
|
+
|
|
127
|
+
const rotation = Matrix3.fromHeadingPitchRoll(headingPitchRoll, Scratch.scratchRotationMatrix);
|
|
128
|
+
return Matrix3.setRotation(matrix, rotation, result);
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* 通过航向、俯仰、横滚(HeadingPitchRoll)设置当前矩阵的旋转分量。
|
|
133
|
+
* @param {HeadingPitchRoll} headingPitchRoll 航向俯仰横滚角。
|
|
134
|
+
* @returns {Matrix3} 修改后的矩阵(this)。
|
|
135
|
+
* @memberof Matrix3
|
|
136
|
+
*/
|
|
137
|
+
Matrix3.prototype.setHeadingPitchRoll = function (headingPitchRoll) {
|
|
138
|
+
return Matrix3.setHeadingPitchRoll(this, headingPitchRoll, this);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* 获取矩阵旋转分量对应的航向、俯仰、横滚角。
|
|
143
|
+
* @param {Matrix3} matrix 目标矩阵。
|
|
144
|
+
* @param {HeadingPitchRoll} [result=new HeadingPitchRoll()] 用于存储结果的可选对象。
|
|
145
|
+
* @returns {HeadingPitchRoll} 航向俯仰横滚角。
|
|
146
|
+
* @memberof Matrix3
|
|
147
|
+
* @static
|
|
148
|
+
*/
|
|
149
|
+
Matrix3.getHeadingPitchRoll = function (matrix, result = new HeadingPitchRoll()) {
|
|
150
|
+
const rotation = Matrix3.getRotation(matrix, Scratch.scratchRotationMatrix);
|
|
151
|
+
return HeadingPitchRoll.fromRotationMatrix(rotation, result);
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* 获取当前矩阵旋转分量对应的航向、俯仰、横滚角。
|
|
156
|
+
* @param {HeadingPitchRoll} [result] 用于存储结果的可选对象。
|
|
157
|
+
* @returns {HeadingPitchRoll} 航向俯仰横滚角。
|
|
158
|
+
* @memberof Matrix3
|
|
159
|
+
*/
|
|
160
|
+
Matrix3.prototype.getHeadingPitchRoll = function (result) {
|
|
161
|
+
return Matrix3.getHeadingPitchRoll(this, result);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* 设置当前矩阵的缩放分量。
|
|
166
|
+
* @param {Cartesian3} scale 缩放比例。
|
|
167
|
+
* @returns {Matrix3} 修改后的矩阵(this)。
|
|
168
|
+
* @memberof Matrix3
|
|
169
|
+
*/
|
|
170
|
+
Matrix3.prototype.setScale = function (scale) {
|
|
171
|
+
return Matrix3.setScale(this, scale, this);
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* 获取当前矩阵的缩放分量。
|
|
176
|
+
* @param {Cartesian3} [result] 用于存储结果的可选对象。
|
|
177
|
+
* @returns {Cartesian3} 缩放比例。
|
|
178
|
+
* @memberof Matrix3
|
|
179
|
+
*/
|
|
180
|
+
Matrix3.prototype.getScale = function (result) {
|
|
181
|
+
return Matrix3.getScale(this, result);
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* 将当前矩阵转换为按列优先排列的数组。
|
|
186
|
+
* @param {Array} [result] 用于存储结果的数组。
|
|
187
|
+
* @returns {Array} 矩阵元素的数组表示。
|
|
188
|
+
* @memberof Matrix3
|
|
189
|
+
*/
|
|
190
|
+
Matrix3.prototype.toArray = function (result) {
|
|
191
|
+
return Matrix3.toArray(this, result);
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
//--Matrix4--
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* 从航向、俯仰、横滚(HeadingPitchRoll)创建一个只含旋转分量的 Matrix4。
|
|
198
|
+
* @param {HeadingPitchRoll} headingPitchRoll 航向俯仰横滚角。
|
|
199
|
+
* @param {Matrix4} [result=new Matrix4()] 用于存储结果的可选对象。
|
|
200
|
+
* @returns {Matrix4} 生成的矩阵。
|
|
201
|
+
* @memberof Matrix4
|
|
202
|
+
* @static
|
|
203
|
+
*/
|
|
204
|
+
Matrix4.fromHeadingPitchRoll = function (headingPitchRoll, result = new Matrix4()) {
|
|
205
|
+
Check.instanceOf('headingPitchRoll', headingPitchRoll, HeadingPitchRoll);
|
|
206
|
+
|
|
207
|
+
const rotation = Matrix3.fromHeadingPitchRoll(headingPitchRoll, Scratch.scratchRotationMatrix);
|
|
208
|
+
return Matrix4.fromRotationTranslation(rotation, undefined, result);
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* 从四元数创建一个只含旋转分量的 Matrix4。
|
|
213
|
+
* @param {Quaternion} quaternion 旋转四元数。
|
|
214
|
+
* @param {Matrix4} [result=new Matrix4()] 用于存储结果的可选对象。
|
|
215
|
+
* @returns {Matrix4} 生成的矩阵。
|
|
216
|
+
* @memberof Matrix4
|
|
217
|
+
* @static
|
|
218
|
+
*/
|
|
219
|
+
Matrix4.fromQuaternion = function (quaternion, result = new Matrix4()) {
|
|
220
|
+
Check.instanceOf('quaternion', quaternion, Quaternion);
|
|
221
|
+
|
|
222
|
+
const rotation = Matrix3.fromQuaternion(quaternion, Scratch.scratchRotationMatrix);
|
|
223
|
+
return Matrix4.fromRotationTranslation(rotation, undefined, result);
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* 获取矩阵指定列的列向量。
|
|
228
|
+
* @param {number} index 列索引(0、1、2 或 3)。
|
|
229
|
+
* @param {Cartesian3} [result=new Cartesian3()] 用于存储结果的可选对象。
|
|
230
|
+
* @returns {Cartesian3} 指定列的列向量。
|
|
231
|
+
* @memberof Matrix4
|
|
232
|
+
*/
|
|
233
|
+
Matrix4.prototype.getColumn = function (index, result = new Cartesian3()) {
|
|
234
|
+
return Matrix4.getColumn(this, index, result);
|
|
235
|
+
};
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* 获取矩阵指定行的行向量。
|
|
239
|
+
* @param {number} index 行索引(0、1、2 或 3)。
|
|
240
|
+
* @param {Cartesian3} [result=new Cartesian3()] 用于存储结果的可选对象。
|
|
241
|
+
* @returns {Cartesian3} 指定行的行向量。
|
|
242
|
+
* @memberof Matrix4
|
|
243
|
+
*/
|
|
244
|
+
Matrix4.prototype.getRow = function (index, result = new Cartesian3()) {
|
|
245
|
+
return Matrix4.getRow(this, index, result);
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* 设置当前矩阵的旋转分量(3x3 部分)。
|
|
250
|
+
* @param {Matrix3} rotation 旋转矩阵。
|
|
251
|
+
* @returns {Matrix4} 修改后的矩阵(this)。
|
|
252
|
+
* @memberof Matrix4
|
|
253
|
+
*/
|
|
254
|
+
Matrix4.prototype.setRotation = function (rotation) {
|
|
255
|
+
return Matrix4.setRotation(this, rotation, this);
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* 获取当前矩阵的旋转分量(3x3 部分)。
|
|
260
|
+
* @param {Matrix3} [result=new Matrix3()] 用于存储结果的可选对象。
|
|
261
|
+
* @returns {Matrix3} 旋转矩阵。
|
|
262
|
+
* @memberof Matrix4
|
|
263
|
+
*/
|
|
264
|
+
Matrix4.prototype.getRotation = function (result = new Matrix3()) {
|
|
265
|
+
return Matrix4.getRotation(this, result);
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* 设置当前矩阵的缩放分量。
|
|
270
|
+
* @param {Cartesian3} scale 缩放比例。
|
|
271
|
+
* @returns {Matrix4} 修改后的矩阵(this)。
|
|
272
|
+
* @memberof Matrix4
|
|
273
|
+
*/
|
|
274
|
+
Matrix4.prototype.setScale = function (scale) {
|
|
275
|
+
return Matrix4.setScale(this, scale, this);
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* 获取当前矩阵的缩放分量。
|
|
280
|
+
* @param {Cartesian3} [result=new Cartesian3()] 用于存储结果的可选对象。
|
|
281
|
+
* @returns {Cartesian3} 缩放比例。
|
|
282
|
+
* @memberof Matrix4
|
|
283
|
+
*/
|
|
284
|
+
Matrix4.prototype.getScale = function (result = new Cartesian3()) {
|
|
285
|
+
return Matrix4.getScale(this, result);
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* 设置当前矩阵的平移分量。
|
|
290
|
+
* @param {Cartesian3} translation 平移量。
|
|
291
|
+
* @returns {Matrix4} 修改后的矩阵(this)。
|
|
292
|
+
* @memberof Matrix4
|
|
293
|
+
*/
|
|
294
|
+
Matrix4.prototype.setTranslation = function (translation) {
|
|
295
|
+
return Matrix4.setTranslation(this, translation, this);
|
|
296
|
+
};
|
|
297
|
+
|
|
298
|
+
/**
|
|
299
|
+
* 获取当前矩阵的平移分量。
|
|
300
|
+
* @param {Cartesian3} [result=new Cartesian3()] 用于存储结果的可选对象。
|
|
301
|
+
* @returns {Cartesian3} 平移量。
|
|
302
|
+
* @memberof Matrix4
|
|
303
|
+
*/
|
|
304
|
+
Matrix4.prototype.getTranslation = function (result = new Cartesian3()) {
|
|
305
|
+
return Matrix4.getTranslation(this, result);
|
|
306
|
+
};
|
|
307
|
+
|
|
308
|
+
/**
|
|
309
|
+
* 通过四元数设置矩阵的旋转分量,保留原有的平移与缩放。
|
|
310
|
+
* @param {Matrix4} matrix 待修改的矩阵。
|
|
311
|
+
* @param {Quaternion} quaternion 旋转四元数。
|
|
312
|
+
* @param {Matrix4} [result=new Matrix4()] 用于存储结果的可选对象。
|
|
313
|
+
* @returns {Matrix4} 修改或生成后的矩阵。
|
|
314
|
+
* @memberof Matrix4
|
|
315
|
+
* @static
|
|
316
|
+
*/
|
|
317
|
+
Matrix4.setQuaternion = function (matrix, quaternion, result = new Matrix4()) {
|
|
318
|
+
Check.instanceOf('matrix', matrix, Matrix4);
|
|
319
|
+
Check.instanceOf('quaternion', quaternion, Quaternion);
|
|
320
|
+
|
|
321
|
+
const translation = Matrix4.getTranslation(matrix, Scratch.scratchTranslation);
|
|
322
|
+
const scale = Matrix4.getScale(matrix, Scratch.scratchScale3);
|
|
323
|
+
const translationRotationScale = new TranslationRotationScale(translation, quaternion, scale);
|
|
324
|
+
return Matrix4.fromTranslationRotationScale(translationRotationScale, result);
|
|
325
|
+
};
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* 通过四元数设置当前矩阵的旋转分量,保留原有的平移与缩放。
|
|
329
|
+
* @param {Quaternion} quaternion 旋转四元数。
|
|
330
|
+
* @returns {Matrix4} 修改后的矩阵(this)。
|
|
331
|
+
* @memberof Matrix4
|
|
332
|
+
*/
|
|
333
|
+
Matrix4.prototype.setQuaternion = function (quaternion) {
|
|
334
|
+
return Matrix4.setQuaternion(this, quaternion, this);
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* 获取矩阵旋转分量对应的四元数。
|
|
339
|
+
* @param {Matrix4} matrix 目标矩阵。
|
|
340
|
+
* @param {Quaternion} [result=new Quaternion()] 用于存储结果的可选对象。
|
|
341
|
+
* @returns {Quaternion} 旋转四元数。
|
|
342
|
+
* @memberof Matrix4
|
|
343
|
+
* @static
|
|
344
|
+
*/
|
|
345
|
+
Matrix4.getQuaternion = function (matrix, result = new Quaternion()) {
|
|
346
|
+
Check.instanceOf('matrix', matrix, Matrix4);
|
|
347
|
+
|
|
348
|
+
const rotation = Matrix4.getRotation(matrix, Scratch.scratchRotationMatrix);
|
|
349
|
+
return Quaternion.fromRotationMatrix(rotation, result);
|
|
350
|
+
};
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* 获取当前矩阵旋转分量对应的四元数。
|
|
354
|
+
* @param {Quaternion} [result] 用于存储结果的可选对象。
|
|
355
|
+
* @returns {Quaternion} 旋转四元数。
|
|
356
|
+
* @memberof Matrix4
|
|
357
|
+
*/
|
|
358
|
+
Matrix4.prototype.getQuaternion = function (result) {
|
|
359
|
+
return Matrix4.getQuaternion(this, result);
|
|
360
|
+
};
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* 通过航向、俯仰、横滚(HeadingPitchRoll)设置矩阵的旋转分量。
|
|
364
|
+
* @param {Matrix4} matrix 待修改的矩阵。
|
|
365
|
+
* @param {HeadingPitchRoll} headingPitchRoll 航向俯仰横滚角。
|
|
366
|
+
* @param {Matrix4} [result] 用于存储结果的可选对象。
|
|
367
|
+
* @returns {Matrix4} 修改或生成后的矩阵。
|
|
368
|
+
* @memberof Matrix4
|
|
369
|
+
* @static
|
|
370
|
+
*/
|
|
371
|
+
Matrix4.setHeadingPitchRoll = function (matrix, headingPitchRoll, result) {
|
|
372
|
+
Check.instanceOf('headingPitchRoll', headingPitchRoll, HeadingPitchRoll);
|
|
373
|
+
|
|
374
|
+
const quaternion = Quaternion.fromHeadingPitchRoll(headingPitchRoll, Scratch.scratchQuaternion);
|
|
375
|
+
return Matrix4.setQuaternion(matrix, quaternion, result);
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* 通过航向、俯仰、横滚(HeadingPitchRoll)设置当前矩阵的旋转分量。
|
|
380
|
+
* @param {HeadingPitchRoll} headingPitchRoll 航向俯仰横滚角。
|
|
381
|
+
* @returns {Matrix4} 修改后的矩阵(this)。
|
|
382
|
+
* @memberof Matrix4
|
|
383
|
+
*/
|
|
384
|
+
Matrix4.prototype.setHeadingPitchRoll = function (headingPitchRoll) {
|
|
385
|
+
return Matrix4.setHeadingPitchRoll(this, headingPitchRoll, this);
|
|
386
|
+
};
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* 获取矩阵旋转分量对应的航向、俯仰、横滚角。
|
|
390
|
+
* @param {Matrix4} matrix 目标矩阵。
|
|
391
|
+
* @param {HeadingPitchRoll} [result=new HeadingPitchRoll()] 用于存储结果的可选对象。
|
|
392
|
+
* @returns {HeadingPitchRoll} 航向俯仰横滚角。
|
|
393
|
+
* @memberof Matrix4
|
|
394
|
+
* @static
|
|
395
|
+
*/
|
|
396
|
+
Matrix4.getHeadingPitchRoll = function (matrix, result = new HeadingPitchRoll()) {
|
|
397
|
+
const quaternion = Matrix4.getQuaternion(matrix, Scratch.scratchQuaternion);
|
|
398
|
+
return HeadingPitchRoll.fromQuaternion(quaternion, result);
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* 获取当前矩阵旋转分量对应的航向、俯仰、横滚角。
|
|
403
|
+
* @param {HeadingPitchRoll} [result] 用于存储结果的可选对象。
|
|
404
|
+
* @returns {HeadingPitchRoll} 航向俯仰横滚角。
|
|
405
|
+
* @memberof Matrix4
|
|
406
|
+
*/
|
|
407
|
+
Matrix4.prototype.getHeadingPitchRoll = function (result) {
|
|
408
|
+
return Matrix4.getHeadingPitchRoll(this, result);
|
|
409
|
+
};
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* 通过欧拉角设置矩阵的旋转分量。
|
|
413
|
+
* @param {Matrix4} matrix 待修改的矩阵。
|
|
414
|
+
* @param {object} eulerAngle 欧拉角对象。
|
|
415
|
+
* @param {Matrix4} [result] 用于存储结果的可选对象。
|
|
416
|
+
* @returns {Matrix4} 修改或生成后的矩阵。
|
|
417
|
+
* @memberof Matrix4
|
|
418
|
+
* @static
|
|
419
|
+
*/
|
|
420
|
+
Matrix4.setEuler = function (matrix, eulerAngle, result) {
|
|
421
|
+
Check.typeOf.object('eulerAngle', eulerAngle);
|
|
422
|
+
|
|
423
|
+
const quaternion = parseEulerToQuaternion(eulerAngle, Scratch.scratchQuaternion);
|
|
424
|
+
return Matrix4.setQuaternion(matrix, quaternion, result);
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* 通过欧拉角设置当前矩阵的旋转分量。
|
|
429
|
+
* @param {object} eulerAngle 欧拉角对象。
|
|
430
|
+
* @returns {Matrix4} 修改后的矩阵(this)。
|
|
431
|
+
* @memberof Matrix4
|
|
432
|
+
*/
|
|
433
|
+
Matrix4.prototype.setEuler = function (eulerAngle) {
|
|
434
|
+
return Matrix4.setEuler(this, eulerAngle, this);
|
|
435
|
+
};
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* 获取矩阵旋转分量对应的欧拉角。
|
|
439
|
+
* @param {Matrix4} matrix 目标矩阵。
|
|
440
|
+
* @param {Cartesian3} [result=new Cartesian3()] 用于存储结果的可选对象。
|
|
441
|
+
* @returns {Cartesian3} 欧拉角。
|
|
442
|
+
* @memberof Matrix4
|
|
443
|
+
* @static
|
|
444
|
+
*/
|
|
445
|
+
Matrix4.getEuler = function (matrix, result = new Cartesian3()) {
|
|
446
|
+
const hpr = Matrix4.getHeadingPitchRoll(matrix, Scratch.scratchHeadingPitchRoll);
|
|
447
|
+
return hpr.toEuler(result);
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
/**
|
|
451
|
+
* 获取当前矩阵旋转分量对应的欧拉角。
|
|
452
|
+
* @param {Cartesian3} [result] 用于存储结果的可选对象。
|
|
453
|
+
* @returns {Cartesian3} 欧拉角。
|
|
454
|
+
* @memberof Matrix4
|
|
455
|
+
*/
|
|
456
|
+
Matrix4.prototype.getEuler = function (result) {
|
|
457
|
+
return Matrix4.getEuler(this, result);
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
/**
|
|
461
|
+
* Matrix4.getRotation 的别名,获取矩阵的旋转分量(Matrix3)。
|
|
462
|
+
* @type {function}
|
|
463
|
+
* @memberof Matrix4
|
|
464
|
+
* @static
|
|
465
|
+
*/
|
|
466
|
+
Matrix4.getRotationMatrix = Matrix4.getRotation;
|
|
467
|
+
|
|
468
|
+
/**
|
|
469
|
+
* 获取矩阵的平移、旋转、缩放分量并组装为 TranslationRotationScale。
|
|
470
|
+
* @param {Matrix4} matrix 目标矩阵。
|
|
471
|
+
* @param {TranslationRotationScale} [result=new TranslationRotationScale()] 用于存储结果的可选对象。
|
|
472
|
+
* @returns {TranslationRotationScale} 平移、旋转、缩放组合对象。
|
|
473
|
+
* @memberof Matrix4
|
|
474
|
+
* @static
|
|
475
|
+
*/
|
|
476
|
+
Matrix4.getTranslationRotationScale = function (matrix, result = new TranslationRotationScale()) {
|
|
477
|
+
Check.instanceOf('matrix', matrix, Matrix4);
|
|
478
|
+
|
|
479
|
+
Matrix4.getTranslation(matrix, result.translation);
|
|
480
|
+
Matrix4.getQuaternion(matrix, result.rotation);
|
|
481
|
+
Matrix4.getScale(matrix, result.scale);
|
|
482
|
+
return result;
|
|
483
|
+
};
|
|
484
|
+
|
|
485
|
+
/**
|
|
486
|
+
* 获取当前矩阵的平移、旋转、缩放分量并组装为 TranslationRotationScale。
|
|
487
|
+
* @param {TranslationRotationScale} [result] 用于存储结果的可选对象。
|
|
488
|
+
* @returns {TranslationRotationScale} 平移、旋转、缩放组合对象。
|
|
489
|
+
* @memberof Matrix4
|
|
490
|
+
*/
|
|
491
|
+
Matrix4.prototype.getTranslationRotationScale = function (result) {
|
|
492
|
+
return Matrix4.getTranslationRotationScale(this, result);
|
|
493
|
+
};
|
|
494
|
+
|
|
495
|
+
/**
|
|
496
|
+
* 将矩阵与四元数表示的旋转相乘。
|
|
497
|
+
* @param {Matrix4} matrix 原矩阵。
|
|
498
|
+
* @param {Quaternion} quaternion 旋转四元数。
|
|
499
|
+
* @param {Matrix4} [result=new Matrix4()] 用于存储结果的可选对象。
|
|
500
|
+
* @returns {Matrix4} 相乘后的矩阵。
|
|
501
|
+
* @memberof Matrix4
|
|
502
|
+
* @static
|
|
503
|
+
*/
|
|
504
|
+
Matrix4.multiplyByQuaternion = function (matrix, quaternion, result = new Matrix4()) {
|
|
505
|
+
Check.instanceOf('matrix', matrix, Matrix4);
|
|
506
|
+
Check.instanceOf('quaternion', quaternion, Quaternion);
|
|
507
|
+
|
|
508
|
+
const rotation = Matrix3.fromQuaternion(quaternion, Scratch.scratchRotationMatrix);
|
|
509
|
+
return Matrix4.multiplyByMatrix3(matrix, rotation, result);
|
|
510
|
+
};
|
|
511
|
+
|
|
512
|
+
/**
|
|
513
|
+
* 将矩阵与航向、俯仰、横滚角表示的旋转相乘。
|
|
514
|
+
* @param {Matrix4} matrix 原矩阵。
|
|
515
|
+
* @param {HeadingPitchRoll} headingPitchRoll 航向俯仰横滚角。
|
|
516
|
+
* @param {Matrix4} [result=new Matrix4()] 用于存储结果的可选对象。
|
|
517
|
+
* @returns {Matrix4} 相乘后的矩阵。
|
|
518
|
+
* @memberof Matrix4
|
|
519
|
+
* @static
|
|
520
|
+
*/
|
|
521
|
+
Matrix4.multiplyByHeadingPitchRoll = function (matrix, headingPitchRoll, result = new Matrix4()) {
|
|
522
|
+
Check.instanceOf('matrix', matrix, Matrix4);
|
|
523
|
+
Check.instanceOf('headingPitchRoll', headingPitchRoll, HeadingPitchRoll);
|
|
524
|
+
|
|
525
|
+
const rotation = Matrix3.fromHeadingPitchRoll(headingPitchRoll, Scratch.scratchRotationMatrix);
|
|
526
|
+
return Matrix4.multiplyByMatrix3(matrix, rotation, result);
|
|
527
|
+
};
|
|
528
|
+
|
|
529
|
+
/**
|
|
530
|
+
* 将矩阵与欧拉角表示的旋转相乘。
|
|
531
|
+
* @param {Matrix4} matrix 原矩阵。
|
|
532
|
+
* @param {object} eulerAngle 欧拉角对象。
|
|
533
|
+
* @param {Matrix4} [result] 用于存储结果的可选对象。
|
|
534
|
+
* @returns {Matrix4} 相乘后的矩阵。
|
|
535
|
+
* @memberof Matrix4
|
|
536
|
+
* @static
|
|
537
|
+
*/
|
|
538
|
+
Matrix4.multiplyByEuler = function (matrix, eulerAngle, result) {
|
|
539
|
+
Check.instanceOf('matrix', matrix, Matrix4);
|
|
540
|
+
Check.typeOf.object('eulerAngle', eulerAngle);
|
|
541
|
+
|
|
542
|
+
const hpr = parseEulerToHeadingPitchRoll(eulerAngle, Scratch.scratchHeadingPitchRoll);
|
|
543
|
+
return Matrix4.multiplyByHeadingPitchRoll(matrix, hpr, result);
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* 将矩阵与旋转相乘,旋转类型可为 HeadingPitchRoll、Quaternion、Matrix3 或欧拉角。
|
|
548
|
+
* @param {Matrix4} matrix 原矩阵。
|
|
549
|
+
* @param {HeadingPitchRoll|Quaternion|Matrix3|object} rotation 旋转量,支持航向俯仰横滚角、四元数、旋转矩阵或欧拉角。
|
|
550
|
+
* @param {Matrix4} [result] 用于存储结果的可选对象。
|
|
551
|
+
* @returns {Matrix4} 相乘后的矩阵。
|
|
552
|
+
* @memberof Matrix4
|
|
553
|
+
* @static
|
|
554
|
+
*/
|
|
555
|
+
Matrix4.multiplyByRotation = function (matrix, rotation, result) {
|
|
556
|
+
if (rotation instanceof HeadingPitchRoll)
|
|
557
|
+
Matrix4.multiplyByHeadingPitchRoll(matrix, rotation, result);
|
|
558
|
+
else if (rotation instanceof Quaternion)
|
|
559
|
+
Matrix4.multiplyByQuaternion(matrix, rotation, result);
|
|
560
|
+
else if (rotation instanceof Matrix3)
|
|
561
|
+
Matrix4.multiplyByMatrix3(matrix, rotation, result);
|
|
562
|
+
else
|
|
563
|
+
Matrix4.multiplyByEuler(matrix, rotation, result);
|
|
564
|
+
|
|
565
|
+
return result;
|
|
566
|
+
};
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* 将当前矩阵转换为按列优先排列的数组。
|
|
570
|
+
* @param {Array} [result] 用于存储结果的数组。
|
|
571
|
+
* @returns {Array} 矩阵元素的数组表示。
|
|
572
|
+
* @memberof Matrix4
|
|
573
|
+
*/
|
|
574
|
+
Matrix4.prototype.toArray = function (result) {
|
|
575
|
+
return Matrix4.toArray(this, result);
|
|
576
|
+
};
|
|
577
|
+
|
|
578
|
+
export { Matrix3, Matrix4 };
|