@predy-js/math 0.3.0-beta.7 → 0.3.0-beta.72

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/index.js CHANGED
@@ -170,6 +170,13 @@ const temps = [0, 0, 0];
170
170
  function mat4create() {
171
171
  return new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
172
172
  }
173
+ function mat4FromArray(arrLike, index = 0) {
174
+ const ret = new Float32Array(16);
175
+ for (let i = 0; i < 16; i++) {
176
+ ret[i] = (arrLike[index + i]) || 0;
177
+ }
178
+ return ret;
179
+ }
173
180
  function mat4fromRotationTranslationScale(out, q, v, s) {
174
181
  const x = q[0];
175
182
  const y = q[1];
@@ -541,6 +548,29 @@ function mat4scale(out, a, v) {
541
548
  out[15] = a[15];
542
549
  return out;
543
550
  }
551
+ function mat4transpose(out, a) {
552
+ //transpose mat4
553
+ const a01 = a[1], a02 = a[2], a03 = a[3];
554
+ const a12 = a[6], a13 = a[7];
555
+ const a23 = a[11];
556
+ out[0] = a[0];
557
+ out[1] = a[4];
558
+ out[2] = a[8];
559
+ out[3] = a[12];
560
+ out[4] = a01;
561
+ out[5] = a[5];
562
+ out[6] = a[9];
563
+ out[7] = a[13];
564
+ out[8] = a02;
565
+ out[9] = a12;
566
+ out[10] = a[10];
567
+ out[11] = a[14];
568
+ out[12] = a03;
569
+ out[13] = a13;
570
+ out[14] = a23;
571
+ out[15] = a[15];
572
+ return out;
573
+ }
544
574
  function mat4rotate(out, a, rad, axis) {
545
575
  let x = axis[0];
546
576
  let y = axis[1];
@@ -1086,6 +1116,19 @@ function quatFromRotation(out, x, y, z) {
1086
1116
  out[3] = c1 * c2 * c3 + s1 * s2 * s3;
1087
1117
  return out;
1088
1118
  }
1119
+ function quatFromRotationXYZ(out, x, y, z) {
1120
+ const c1 = Math.cos((x * d2r) / 2);
1121
+ const c2 = Math.cos((y * d2r) / 2);
1122
+ const c3 = Math.cos((z * d2r) / 2);
1123
+ const s1 = Math.sin((x * d2r) / 2);
1124
+ const s2 = Math.sin((y * d2r) / 2);
1125
+ const s3 = Math.sin((z * d2r) / 2);
1126
+ out[0] = s1 * c2 * c3 + c1 * s2 * s3;
1127
+ out[1] = c1 * s2 * c3 - s1 * c2 * s3;
1128
+ out[2] = c1 * c2 * s3 + s1 * s2 * c3;
1129
+ out[3] = c1 * c2 * c3 - s1 * s2 * s3;
1130
+ return out;
1131
+ }
1089
1132
  function quatStar(out, quat) {
1090
1133
  const x = quat[0], y = quat[1], z = quat[2], w = quat[3];
1091
1134
  out[0] = -x;
@@ -1094,6 +1137,33 @@ function quatStar(out, quat) {
1094
1137
  out[3] = w;
1095
1138
  return out;
1096
1139
  }
1140
+ /**
1141
+ * @param {vec3} vstart
1142
+ * @param {vec3} vend
1143
+ * @returns {vec4}
1144
+ */
1145
+ function quatFromVec3s(v1, v2) {
1146
+ const cross = [
1147
+ v1[1] * v2[2] - v1[2] * v2[1],
1148
+ v1[2] * v2[0] - v1[0] * v2[2],
1149
+ v1[0] * v2[1] - v1[1] * v2[0],
1150
+ ];
1151
+ const dot = v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
1152
+ if (dot < -0.999999) {
1153
+ let orthogonalAxis = [1, 0, 0];
1154
+ if (Math.abs(v1[0]) > Math.abs(v1[2])) {
1155
+ orthogonalAxis = [0, 0, 1];
1156
+ }
1157
+ const orthogonalCross = [
1158
+ v1[1] * orthogonalAxis[2] - v1[2] * orthogonalAxis[1],
1159
+ v1[2] * orthogonalAxis[0] - v1[0] * orthogonalAxis[2],
1160
+ v1[0] * orthogonalAxis[1] - v1[1] * orthogonalAxis[0],
1161
+ ];
1162
+ return vecNormalize([orthogonalCross[0], orthogonalCross[1], orthogonalCross[2], 0]);
1163
+ }
1164
+ const w = Math.sqrt((Math.pow(v1[0], 2) + Math.pow(v1[1], 2) + Math.pow(v1[2], 2)) * (Math.pow(v2[0], 2) + Math.pow(v2[1], 2) + Math.pow(v2[2], 2))) + dot;
1165
+ return vecNormalize([cross[0], cross[1], cross[2], w]);
1166
+ }
1097
1167
 
1098
1168
  exports.NumberEpsilon = NumberEpsilon;
1099
1169
  exports.clamp = clamp;
@@ -1114,6 +1184,7 @@ exports.mat3Translate = mat3Translate;
1114
1184
  exports.mat3create = mat3create;
1115
1185
  exports.mat4Clone = mat4Clone;
1116
1186
  exports.mat4Determinate = mat4Determinate;
1187
+ exports.mat4FromArray = mat4FromArray;
1117
1188
  exports.mat4create = mat4create;
1118
1189
  exports.mat4fromRotationTranslationScale = mat4fromRotationTranslationScale;
1119
1190
  exports.mat4identity = mat4identity;
@@ -1123,9 +1194,12 @@ exports.mat4perspective = mat4perspective;
1123
1194
  exports.mat4rotate = mat4rotate;
1124
1195
  exports.mat4scale = mat4scale;
1125
1196
  exports.mat4translate = mat4translate;
1197
+ exports.mat4transpose = mat4transpose;
1126
1198
  exports.quatCreate = quatCreate;
1127
1199
  exports.quatEquals = quatEquals;
1128
1200
  exports.quatFromRotation = quatFromRotation;
1201
+ exports.quatFromRotationXYZ = quatFromRotationXYZ;
1202
+ exports.quatFromVec3s = quatFromVec3s;
1129
1203
  exports.quatMultiply = quatMultiply;
1130
1204
  exports.quatStar = quatStar;
1131
1205
  exports.rotateVec2 = rotateVec2;
package/dist/index.mjs CHANGED
@@ -166,6 +166,13 @@ const temps = [0, 0, 0];
166
166
  function mat4create() {
167
167
  return new Float32Array([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
168
168
  }
169
+ function mat4FromArray(arrLike, index = 0) {
170
+ const ret = new Float32Array(16);
171
+ for (let i = 0; i < 16; i++) {
172
+ ret[i] = (arrLike[index + i]) || 0;
173
+ }
174
+ return ret;
175
+ }
169
176
  function mat4fromRotationTranslationScale(out, q, v, s) {
170
177
  const x = q[0];
171
178
  const y = q[1];
@@ -537,6 +544,29 @@ function mat4scale(out, a, v) {
537
544
  out[15] = a[15];
538
545
  return out;
539
546
  }
547
+ function mat4transpose(out, a) {
548
+ //transpose mat4
549
+ const a01 = a[1], a02 = a[2], a03 = a[3];
550
+ const a12 = a[6], a13 = a[7];
551
+ const a23 = a[11];
552
+ out[0] = a[0];
553
+ out[1] = a[4];
554
+ out[2] = a[8];
555
+ out[3] = a[12];
556
+ out[4] = a01;
557
+ out[5] = a[5];
558
+ out[6] = a[9];
559
+ out[7] = a[13];
560
+ out[8] = a02;
561
+ out[9] = a12;
562
+ out[10] = a[10];
563
+ out[11] = a[14];
564
+ out[12] = a03;
565
+ out[13] = a13;
566
+ out[14] = a23;
567
+ out[15] = a[15];
568
+ return out;
569
+ }
540
570
  function mat4rotate(out, a, rad, axis) {
541
571
  let x = axis[0];
542
572
  let y = axis[1];
@@ -1082,6 +1112,19 @@ function quatFromRotation(out, x, y, z) {
1082
1112
  out[3] = c1 * c2 * c3 + s1 * s2 * s3;
1083
1113
  return out;
1084
1114
  }
1115
+ function quatFromRotationXYZ(out, x, y, z) {
1116
+ const c1 = Math.cos((x * d2r) / 2);
1117
+ const c2 = Math.cos((y * d2r) / 2);
1118
+ const c3 = Math.cos((z * d2r) / 2);
1119
+ const s1 = Math.sin((x * d2r) / 2);
1120
+ const s2 = Math.sin((y * d2r) / 2);
1121
+ const s3 = Math.sin((z * d2r) / 2);
1122
+ out[0] = s1 * c2 * c3 + c1 * s2 * s3;
1123
+ out[1] = c1 * s2 * c3 - s1 * c2 * s3;
1124
+ out[2] = c1 * c2 * s3 + s1 * s2 * c3;
1125
+ out[3] = c1 * c2 * c3 - s1 * s2 * s3;
1126
+ return out;
1127
+ }
1085
1128
  function quatStar(out, quat) {
1086
1129
  const x = quat[0], y = quat[1], z = quat[2], w = quat[3];
1087
1130
  out[0] = -x;
@@ -1090,5 +1133,32 @@ function quatStar(out, quat) {
1090
1133
  out[3] = w;
1091
1134
  return out;
1092
1135
  }
1136
+ /**
1137
+ * @param {vec3} vstart
1138
+ * @param {vec3} vend
1139
+ * @returns {vec4}
1140
+ */
1141
+ function quatFromVec3s(v1, v2) {
1142
+ const cross = [
1143
+ v1[1] * v2[2] - v1[2] * v2[1],
1144
+ v1[2] * v2[0] - v1[0] * v2[2],
1145
+ v1[0] * v2[1] - v1[1] * v2[0],
1146
+ ];
1147
+ const dot = v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
1148
+ if (dot < -0.999999) {
1149
+ let orthogonalAxis = [1, 0, 0];
1150
+ if (Math.abs(v1[0]) > Math.abs(v1[2])) {
1151
+ orthogonalAxis = [0, 0, 1];
1152
+ }
1153
+ const orthogonalCross = [
1154
+ v1[1] * orthogonalAxis[2] - v1[2] * orthogonalAxis[1],
1155
+ v1[2] * orthogonalAxis[0] - v1[0] * orthogonalAxis[2],
1156
+ v1[0] * orthogonalAxis[1] - v1[1] * orthogonalAxis[0],
1157
+ ];
1158
+ return vecNormalize([orthogonalCross[0], orthogonalCross[1], orthogonalCross[2], 0]);
1159
+ }
1160
+ const w = Math.sqrt((Math.pow(v1[0], 2) + Math.pow(v1[1], 2) + Math.pow(v1[2], 2)) * (Math.pow(v2[0], 2) + Math.pow(v2[1], 2) + Math.pow(v2[2], 2))) + dot;
1161
+ return vecNormalize([cross[0], cross[1], cross[2], w]);
1162
+ }
1093
1163
 
1094
- export { NumberEpsilon, clamp, ensureVec3, getMat4TR, getMat4TRS, getMat4Transform, invertMat4, isZeroVec, mat3FromQuat, mat3FromRotation, mat3FromRotationZ, mat3MulMat3, mat3NormalFromMat4, mat3Rotate, mat3Scale, mat3Translate, mat3create, mat4Clone, mat4Determinate, mat4create, mat4fromRotationTranslationScale, mat4identity, mat4invert, mat4multiply, mat4perspective, mat4rotate, mat4scale, mat4translate, quatCreate, quatEquals, quatFromRotation, quatMultiply, quatStar, rotateVec2, rotationFromMat3, transposeMat3, transposeMat4, vec2AddVec2, vec2Create, vec2MulMat3, vec2MulVec2, vec2SubVec2, vec2TransformByMat3, vec3AddVec3, vec3Create, vec3Cross, vec3MulMat3, vec3MulMat4, vec3MulNum, vec3MulVec3, vec3RotateByMat4, vec3RotateByQuat, vec3TranslateByMat4, vec4Create, vecAdd, vecAddCombine, vecAssign, vecDot, vecFill, vecMinus, vecMulCombine, vecMulScalar, vecNormalize, vecSquareDistance, vecSub };
1164
+ export { NumberEpsilon, clamp, ensureVec3, getMat4TR, getMat4TRS, getMat4Transform, invertMat4, isZeroVec, mat3FromQuat, mat3FromRotation, mat3FromRotationZ, mat3MulMat3, mat3NormalFromMat4, mat3Rotate, mat3Scale, mat3Translate, mat3create, mat4Clone, mat4Determinate, mat4FromArray, mat4create, mat4fromRotationTranslationScale, mat4identity, mat4invert, mat4multiply, mat4perspective, mat4rotate, mat4scale, mat4translate, mat4transpose, quatCreate, quatEquals, quatFromRotation, quatFromRotationXYZ, quatFromVec3s, quatMultiply, quatStar, rotateVec2, rotationFromMat3, transposeMat3, transposeMat4, vec2AddVec2, vec2Create, vec2MulMat3, vec2MulVec2, vec2SubVec2, vec2TransformByMat3, vec3AddVec3, vec3Create, vec3Cross, vec3MulMat3, vec3MulMat4, vec3MulNum, vec3MulVec3, vec3RotateByMat4, vec3RotateByQuat, vec3TranslateByMat4, vec4Create, vecAdd, vecAddCombine, vecAssign, vecDot, vecFill, vecMinus, vecMulCombine, vecMulScalar, vecNormalize, vecSquareDistance, vecSub };
package/dist/mat4.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { mat4 } from '@predy-js/render-interface';
2
2
  import type { vec3, vec4 } from '@predy-js/render-interface';
3
3
  export declare function mat4create(): mat4;
4
+ export declare function mat4FromArray(arrLike: ArrayLike<number>, index?: number): mat4;
4
5
  export declare function mat4fromRotationTranslationScale(out: mat4 | number[], q: vec4, v: vec3, s: vec3): mat4;
5
6
  export declare function invertMat4(out: mat4 | number[], a: mat4): mat4;
6
7
  export declare function mat4Determinate(a: mat4): number;
@@ -11,6 +12,7 @@ export declare function mat4Clone(out: mat4 | number[], from: mat4): mat4;
11
12
  export declare function mat4invert(out: mat4 | number[], a: mat4): mat4;
12
13
  export declare function mat4translate(out: mat4, a: mat4, v: vec3): mat4;
13
14
  export declare function mat4scale(out: mat4, a: mat4, v: vec3): mat4;
15
+ export declare function mat4transpose(out: mat4, a: mat4): mat4;
14
16
  export declare function mat4rotate(out: mat4, a: mat4, rad: number, axis: vec3): mat4;
15
17
  export declare function mat4perspective(out: number[] | mat4, fovy: number, aspect: number, near: number, far: number, reverse?: boolean): mat4;
16
18
  export declare function mat4identity(out: mat4): void;
package/dist/quat.d.ts CHANGED
@@ -1,7 +1,14 @@
1
- import type { mat3, vec4 } from '@predy-js/render-interface';
1
+ import type { mat3, vec3, vec4 } from '@predy-js/render-interface';
2
2
  export declare function quatCreate(): vec4;
3
3
  export declare function quatMultiply(out: vec4, a: vec4, b: vec4): vec4;
4
4
  export declare function mat3FromQuat(out: mat3 | number[], quat: vec4): mat3;
5
5
  export declare function quatEquals(q1: vec4, q2: vec4): boolean;
6
6
  export declare function quatFromRotation(out: vec4, x: number, y: number, z: number): vec4;
7
+ export declare function quatFromRotationXYZ(out: vec4, x: number, y: number, z: number): vec4;
7
8
  export declare function quatStar(out: vec4, quat: vec4): vec4;
9
+ /**
10
+ * @param {vec3} vstart
11
+ * @param {vec3} vend
12
+ * @returns {vec4}
13
+ */
14
+ export declare function quatFromVec3s(v1: vec3, v2: vec3): vec4;
package/dist/vec4.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  import type { vec4 } from '@predy-js/render-interface';
2
- export declare function vec4Create(v: vec4): vec4;
2
+ export declare function vec4Create(v?: vec4): vec4;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@predy-js/math",
3
- "version": "0.3.0-beta.7",
3
+ "version": "0.3.0-beta.72",
4
4
  "description": "Mars JSON Specification",
5
5
  "module": "./dist/index.mjs",
6
6
  "main": "./dist/index.js",
@@ -28,7 +28,7 @@
28
28
  "prepublishOnly": "npm run build"
29
29
  },
30
30
  "devDependencies": {
31
- "@predy-js/render-interface": "0.3.0-beta.7",
31
+ "@predy-js/render-interface": "0.3.0-beta.72",
32
32
  "@commitlint/cli": "^13.2.1",
33
33
  "@commitlint/config-conventional": "^13.2.0",
34
34
  "@rollup/plugin-commonjs": "^21.0.3",