@woosh/meep-engine 2.110.8 → 2.110.10
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/build/bundle-worker-terrain.js +1 -1
- package/build/meep.cjs +116 -107
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +116 -107
- package/editor/tools/v2/TransformControls.js +11 -6
- package/package.json +2 -1
- package/src/core/UUID.d.ts +3 -0
- package/src/core/UUID.d.ts.map +1 -1
- package/src/core/UUID.js +9 -7
- package/src/core/collection/array/arraySetDiff.d.ts.map +1 -1
- package/src/core/collection/array/arraySetDiff.js +0 -1
- package/src/core/collection/array/binarySearchHighIndex.d.ts.map +1 -1
- package/src/core/collection/array/binarySearchHighIndex.js +7 -1
- package/src/core/collection/array/computeHashArray.d.ts.map +1 -1
- package/src/core/collection/array/computeHashArray.js +3 -2
- package/src/core/collection/array/fastArrayEquals.d.ts +1 -0
- package/src/core/collection/array/fastArrayEquals.d.ts.map +1 -1
- package/src/core/collection/array/fastArrayEquals.js +1 -0
- package/src/core/collection/array/isArrayEqual.d.ts.map +1 -1
- package/src/core/collection/array/isArrayEqual.js +9 -12
- package/src/core/collection/array/isArrayEqual.spec.d.ts +2 -0
- package/src/core/collection/array/isArrayEqual.spec.d.ts.map +1 -0
- package/src/core/collection/array/isArrayEqual.spec.js +25 -0
- package/src/core/collection/array/typed/is_typed_array_equals.d.ts.map +1 -1
- package/src/core/collection/array/typed/is_typed_array_equals.js +1 -0
- package/src/core/function/makeSequenceLoop.d.ts.map +1 -0
- package/src/core/geom/2d/aabb/AABB2.d.ts.map +1 -1
- package/src/core/geom/2d/aabb/AABB2.js +27 -1
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/AbstractShape3D.js +14 -0
- package/src/core/geom/3d/shape/PointShape3D.d.ts +9 -0
- package/src/core/geom/3d/shape/PointShape3D.d.ts.map +1 -0
- package/src/core/geom/3d/shape/PointShape3D.js +14 -0
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +26 -8
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +33 -4
- package/src/core/geom/3d/shape/UnitCubeShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitCubeShape3D.js +13 -6
- package/src/core/geom/3d/shape/UnitSphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnitSphereShape3D.js +10 -0
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts +15 -8
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/TetrahedralMesh.js +33 -9
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.d.ts +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/delaunay/compute_delaunay_tetrahedral_mesh.js +7 -7
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.d.ts +2 -0
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.js +61 -0
- package/src/core/geom/3d/tetrahedra/get_tetrahedron_volume.d.ts +9 -0
- package/src/core/geom/3d/tetrahedra/get_tetrahedron_volume.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/get_tetrahedron_volume.js +18 -0
- package/src/core/geom/3d/tetrahedra/is_tetrahedron_degenerate.d.ts +9 -0
- package/src/core/geom/3d/tetrahedra/is_tetrahedron_degenerate.d.ts.map +1 -0
- package/src/core/geom/3d/tetrahedra/is_tetrahedron_degenerate.js +21 -0
- package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts +2 -10
- package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.d.ts.map +1 -1
- package/src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.js +3 -40
- package/src/core/geom/3d/v3_compute_triangle_normal.js +1 -1
- package/src/core/geom/3d/v3_negate_array.d.ts +9 -0
- package/src/core/geom/3d/v3_negate_array.d.ts.map +1 -0
- package/src/core/geom/3d/v3_negate_array.js +16 -0
- package/src/core/geom/Quaternion.d.ts.map +1 -1
- package/src/core/geom/Quaternion.js +30 -77
- package/src/core/geom/Vector3.d.ts +4 -0
- package/src/core/geom/Vector3.js +4 -4
- package/src/core/geom/mat3/m3_cm_invert.d.ts +7 -0
- package/src/core/geom/mat3/m3_cm_invert.d.ts.map +1 -0
- package/src/core/geom/mat3/m3_cm_invert.js +45 -0
- package/src/core/geom/vec2/v2_matrix3_cm_multiply.d.ts +10 -0
- package/src/core/geom/vec2/v2_matrix3_cm_multiply.d.ts.map +1 -0
- package/src/core/geom/vec2/v2_matrix3_cm_multiply.js +20 -0
- package/src/core/geom/vec2/v2_matrix3_rm_multiply.d.ts +10 -0
- package/src/core/geom/vec2/v2_matrix3_rm_multiply.d.ts.map +1 -0
- package/src/core/geom/vec2/v2_matrix3_rm_multiply.js +21 -0
- package/src/core/geom/vec3/v3_cross_array.d.ts +11 -0
- package/src/core/geom/vec3/v3_cross_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_cross_array.js +31 -0
- package/src/core/geom/vec3/v3_displace_in_direction.js +3 -2
- package/src/core/geom/vec3/v3_displace_in_direction_array.d.ts +12 -0
- package/src/core/geom/vec3/v3_displace_in_direction_array.d.ts.map +1 -0
- package/src/core/geom/vec3/v3_displace_in_direction_array.js +22 -0
- package/src/core/geom/vec3/v3_dot_array_array.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_dot_array_array.js +4 -1
- package/src/core/geom/vec3/v3_normalize_array.d.ts +3 -3
- package/src/core/geom/vec3/v3_normalize_array.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_normalize_array.js +3 -3
- package/src/core/math/copysign.d.ts +1 -1
- package/src/core/math/copysign.js +1 -1
- package/src/core/math/epsilonEquals.d.ts.map +1 -1
- package/src/core/math/epsilonEquals.js +3 -2
- package/src/core/math/linalg/README.md +1 -1
- package/src/core/math/random/randomGaussian.spec.js +1 -1
- package/src/core/math/spline/spline_hermite3.d.ts +1 -1
- package/src/core/math/spline/spline_hermite3.js +3 -2
- package/src/core/math/spline/spline_hermite3_to_bezier.d.ts +12 -0
- package/src/core/math/spline/spline_hermite3_to_bezier.d.ts.map +1 -0
- package/src/core/math/spline/spline_hermite3_to_bezier.js +24 -0
- package/src/core/process/delay.d.ts +6 -1
- package/src/core/process/delay.d.ts.map +1 -1
- package/src/core/process/delay.js +6 -1
- package/src/core/process/undo/Mark.d.ts +5 -5
- package/src/core/process/undo/Mark.d.ts.map +1 -1
- package/src/core/process/undo/Mark.js +6 -5
- package/src/core/process/worker/WorkerBuilder.d.ts +13 -2
- package/src/core/process/worker/WorkerBuilder.d.ts.map +1 -1
- package/src/core/process/worker/WorkerBuilder.js +8 -0
- package/src/core/process/worker/WorkerProxy.d.ts +16 -6
- package/src/core/process/worker/WorkerProxy.d.ts.map +1 -1
- package/src/core/process/worker/WorkerProxy.js +24 -5
- package/src/engine/EngineHarness.d.ts +7 -1
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +12 -1
- package/src/engine/animation/clip/AnimationTrack.d.ts.map +1 -1
- package/src/engine/animation/clip/AnimationTrack.js +4 -1
- package/src/engine/animation/clip/bind_property_writer.d.ts +2 -2
- package/src/engine/animation/clip/bind_property_writer.d.ts.map +1 -1
- package/src/engine/animation/clip/bind_property_writer.js +22 -13
- package/src/engine/animation/clip/curve_from_track_data.d.ts.map +1 -1
- package/src/engine/animation/clip/curve_from_track_data.js +9 -1
- package/src/engine/animation/clip/ecd_bind_animation_curve.d.ts.map +1 -1
- package/src/engine/animation/clip/ecd_bind_animation_curve.js +6 -5
- package/src/engine/animation/curve/AnimationCurve.d.ts +32 -0
- package/src/engine/animation/curve/AnimationCurve.d.ts.map +1 -1
- package/src/engine/animation/curve/AnimationCurve.js +94 -19
- package/src/engine/animation/curve/AnimationCurve.spec.js +67 -0
- package/src/engine/animation/curve/Keyframe.d.ts +24 -3
- package/src/engine/animation/curve/Keyframe.d.ts.map +1 -1
- package/src/engine/animation/curve/Keyframe.js +49 -3
- package/src/engine/animation/curve/Keyframe.spec.js +11 -0
- package/src/engine/animation/curve/animation_curve_compute_aabb.d.ts +7 -0
- package/src/engine/animation/curve/animation_curve_compute_aabb.d.ts.map +1 -0
- package/src/engine/animation/curve/{compute_curve_aabb.js → animation_curve_compute_aabb.js} +1 -1
- package/src/engine/animation/curve/animation_curve_optimize.d.ts +8 -0
- package/src/engine/animation/curve/animation_curve_optimize.d.ts.map +1 -0
- package/src/engine/animation/curve/animation_curve_optimize.js +89 -0
- package/src/engine/animation/curve/animation_curve_optimize.spec.d.ts +2 -0
- package/src/engine/animation/curve/animation_curve_optimize.spec.d.ts.map +1 -0
- package/src/engine/animation/curve/animation_curve_optimize.spec.js +50 -0
- package/src/engine/animation/curve/draw/build_curve_editor.d.ts.map +1 -1
- package/src/engine/animation/curve/draw/build_curve_editor.js +17 -11
- package/src/engine/animation/curve/evaluate_two_key_curve.d.ts +9 -0
- package/src/engine/animation/curve/evaluate_two_key_curve.d.ts.map +1 -0
- package/src/engine/animation/curve/evaluate_two_key_curve.js +23 -0
- package/src/engine/animation/curve/prototypeGLTF.js +14 -14
- package/src/engine/animation/curve/view/AnimationCurveView.d.ts +47 -0
- package/src/engine/animation/curve/view/AnimationCurveView.d.ts.map +1 -0
- package/src/engine/animation/curve/view/AnimationCurveView.js +343 -0
- package/src/engine/animation/curve/view/prototype.d.ts +2 -0
- package/src/engine/animation/curve/view/prototype.d.ts.map +1 -0
- package/src/engine/animation/curve/view/prototype.js +86 -0
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts +6 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
- package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +11 -6
- package/src/engine/ecs/guid/{GUID.d.ts → UUID.d.ts} +27 -15
- package/src/engine/ecs/guid/UUID.d.ts.map +1 -0
- package/src/engine/ecs/guid/{GUID.js → UUID.js} +52 -17
- package/src/engine/ecs/guid/UUID.spec.d.ts +2 -0
- package/src/engine/ecs/guid/UUID.spec.d.ts.map +1 -0
- package/src/engine/ecs/guid/{GUID.spec.js → UUID.spec.js} +25 -12
- package/src/engine/ecs/guid/UUIDSerializationAdapter.d.ts +18 -0
- package/src/engine/ecs/guid/UUIDSerializationAdapter.d.ts.map +1 -0
- package/src/engine/ecs/guid/{GUIDSerializationAdapter.js → UUIDSerializationAdapter.js} +5 -5
- package/src/engine/ecs/guid/UUIDSerializationAdapter.spec.d.ts +2 -0
- package/src/engine/ecs/guid/UUIDSerializationAdapter.spec.d.ts.map +1 -0
- package/src/engine/ecs/guid/{GUIDSerializationAdapter.spec.js → UUIDSerializationAdapter.spec.js} +5 -5
- package/src/engine/ecs/ik/InverseKinematics.js +3 -3
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.d.ts.map +1 -1
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +1 -140
- package/src/engine/input/ecs/systems/InputControllerSystem.js +1 -1
- package/src/engine/intelligence/blackboard/BlackboardDynamicStorageAdapter.d.ts +1 -1
- package/src/engine/intelligence/blackboard/BlackboardDynamicStorageAdapter.js +4 -4
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts +13 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.d.ts.map +1 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.js +395 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.d.ts +2 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.d.ts.map +1 -0
- package/src/engine/physics/gjk/expanding_polytope_algorithm.spec.js +46 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.d.ts +18 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.js +277 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.d.ts +2 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik3d_solve_primitive.spec.js +43 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts +12 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/fabrik/fabrik_solve.js +100 -0
- package/src/engine/physics/inverse_kinematics/fabrik/prototype.d.ts +2 -0
- package/src/engine/physics/inverse_kinematics/fabrik/prototype.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/fabrik/prototype.js +112 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts +16 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.d.ts.map +1 -0
- package/src/engine/physics/inverse_kinematics/two_joint_ik.js +127 -0
- package/src/view/elements/DropDownSelectionView.js +2 -2
- package/src/view/elements/tiles2d/Tile.d.ts +1 -1
- package/src/view/elements/tiles2d/Tile.d.ts.map +1 -1
- package/src/view/elements/tiles2d/Tile.js +3 -3
- package/src/core/math/makeSequenceLoop.d.ts.map +0 -1
- package/src/engine/animation/curve/compute_curve_aabb.d.ts +0 -7
- package/src/engine/animation/curve/compute_curve_aabb.d.ts.map +0 -1
- package/src/engine/ecs/guid/GUID.d.ts.map +0 -1
- package/src/engine/ecs/guid/GUID.spec.d.ts +0 -2
- package/src/engine/ecs/guid/GUID.spec.d.ts.map +0 -1
- package/src/engine/ecs/guid/GUIDSerializationAdapter.d.ts +0 -18
- package/src/engine/ecs/guid/GUIDSerializationAdapter.d.ts.map +0 -1
- package/src/engine/ecs/guid/GUIDSerializationAdapter.spec.d.ts +0 -2
- package/src/engine/ecs/guid/GUIDSerializationAdapter.spec.d.ts.map +0 -1
- /package/src/core/{math → function}/makeSequenceLoop.d.ts +0 -0
- /package/src/core/{math → function}/makeSequenceLoop.js +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
//
|
|
2
2
|
|
|
3
|
+
import { assert } from "../../../../assert.js";
|
|
4
|
+
import { BitSet } from "../../../../binary/BitSet.js";
|
|
3
5
|
import { compute_bounding_simplex_3d } from "../compute_bounding_simplex_3d.js";
|
|
4
6
|
import { TetrahedralMesh } from "../TetrahedralMesh.js";
|
|
7
|
+
import { Cavity } from "./Cavity.js";
|
|
8
|
+
import { fill_in_a_cavity } from "./fill_in_a_cavity.js";
|
|
9
|
+
import { tetrahedral_mesh_compute_cavity } from "./tetrahedral_mesh_compute_cavity.js";
|
|
5
10
|
import {
|
|
6
11
|
tetrahedral_mesh_walk_towards_containing_tetrahedron
|
|
7
12
|
} from "./tetrahedral_mesh_walk_towards_containing_tetrahedron.js";
|
|
8
|
-
import { Cavity } from "./Cavity.js";
|
|
9
|
-
import { tetrahedral_mesh_compute_cavity } from "./tetrahedral_mesh_compute_cavity.js";
|
|
10
|
-
import { fill_in_a_cavity } from "./fill_in_a_cavity.js";
|
|
11
|
-
import { BitSet } from "../../../../binary/BitSet.js";
|
|
12
|
-
import { assert } from "../../../../assert.js";
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -18,7 +18,7 @@ import { assert } from "../../../../assert.js";
|
|
|
18
18
|
* @param {TetrahedralMesh} mesh
|
|
19
19
|
* @param {number[]} input serialized set of 3d points (x,y,z)
|
|
20
20
|
* @param {number} [n] number of points in the input
|
|
21
|
-
* @returns {boolean}
|
|
21
|
+
* @returns {boolean} whether mesh was created or not. Returns false on failure
|
|
22
22
|
*/
|
|
23
23
|
export function compute_delaunay_tetrahedral_mesh(mesh, input, n = input.length / 3) {
|
|
24
24
|
assert.notNull(mesh, 'mesh');
|
|
@@ -43,7 +43,7 @@ export function compute_delaunay_tetrahedral_mesh(mesh, input, n = input.length
|
|
|
43
43
|
|
|
44
44
|
// start with a fairly low capacity for best-case scenario, rely on internal resizing after that
|
|
45
45
|
|
|
46
|
-
mesh.
|
|
46
|
+
mesh.ensureCapacity(n + 1);
|
|
47
47
|
|
|
48
48
|
const CAVITY = new Cavity();
|
|
49
49
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tetrahedral_mesh_build_from_grid.spec.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/tetrahedra/delaunay/tetrahedral_mesh_build_from_grid.spec.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { AABB3 } from "../../aabb/AABB3.js";
|
|
2
|
+
import { get_tetrahedron_volume } from "../get_tetrahedron_volume.js";
|
|
3
|
+
import { TetrahedralMesh } from "../TetrahedralMesh.js";
|
|
4
|
+
import { validate_tetrahedral_mesh } from "../validate_tetrahedral_mesh.js";
|
|
5
|
+
import { tetrahedral_mesh_build_from_grid } from "./tetrahedral_mesh_build_from_grid.js";
|
|
6
|
+
|
|
7
|
+
test("Single cube", () => {
|
|
8
|
+
|
|
9
|
+
const mesh = new TetrahedralMesh();
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @type {number[]}
|
|
14
|
+
*/
|
|
15
|
+
const points = [];
|
|
16
|
+
|
|
17
|
+
tetrahedral_mesh_build_from_grid(
|
|
18
|
+
mesh,
|
|
19
|
+
points,
|
|
20
|
+
new AABB3(0, 0, 0, 1, 1, 1),
|
|
21
|
+
2, 2, 2
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
// number of points
|
|
25
|
+
expect(points.length).toBe(8 * 3);
|
|
26
|
+
|
|
27
|
+
expect(mesh.count).toBeGreaterThanOrEqual(5);
|
|
28
|
+
expect(mesh.count).toBeLessThanOrEqual(6);
|
|
29
|
+
|
|
30
|
+
// mesh should only reference created points
|
|
31
|
+
const tetrahedrons = mesh.getLive();
|
|
32
|
+
|
|
33
|
+
for (let i = 0; i < tetrahedrons.length; i++) {
|
|
34
|
+
const tet_index = tetrahedrons[i];
|
|
35
|
+
|
|
36
|
+
for (let vertex_index = 0; vertex_index < 4; vertex_index++) {
|
|
37
|
+
|
|
38
|
+
const vert = mesh.getVertexIndex(tet_index, vertex_index);
|
|
39
|
+
|
|
40
|
+
expect(vert).toBeGreaterThanOrEqual(0);
|
|
41
|
+
expect(vert).toBeLessThan(8);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// tetrahedrons should have positive volume
|
|
45
|
+
const volume = get_tetrahedron_volume(mesh, points, tet_index);
|
|
46
|
+
|
|
47
|
+
expect(volume).toBeGreaterThan(0);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// do full validation
|
|
51
|
+
const problems = [];
|
|
52
|
+
|
|
53
|
+
const is_valid = validate_tetrahedral_mesh(mesh, points, (problem) => problems.push(problem));
|
|
54
|
+
|
|
55
|
+
if (!is_valid) {
|
|
56
|
+
console.error(problems.join('\n'));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
expect(is_valid).toBe(true);
|
|
60
|
+
|
|
61
|
+
});
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {TetrahedralMesh} mesh
|
|
4
|
+
* @param {ArrayLike<number>|number[]} points
|
|
5
|
+
* @param {number} tet_index
|
|
6
|
+
* @return {number}
|
|
7
|
+
*/
|
|
8
|
+
export function get_tetrahedron_volume(mesh: TetrahedralMesh, points: ArrayLike<number> | number[], tet_index: number): number;
|
|
9
|
+
//# sourceMappingURL=get_tetrahedron_volume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_tetrahedron_volume.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/get_tetrahedron_volume.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,sEAJW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,aAC1B,MAAM,GACL,MAAM,CAUjB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { tetrahedron_compute_signed_volume } from "./tetrahedron_compute_signed_volume.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @param {TetrahedralMesh} mesh
|
|
6
|
+
* @param {ArrayLike<number>|number[]} points
|
|
7
|
+
* @param {number} tet_index
|
|
8
|
+
* @return {number}
|
|
9
|
+
*/
|
|
10
|
+
export function get_tetrahedron_volume(mesh, points, tet_index) {
|
|
11
|
+
|
|
12
|
+
const a = mesh.getVertexIndex(tet_index, 0);
|
|
13
|
+
const b = mesh.getVertexIndex(tet_index, 1);
|
|
14
|
+
const c = mesh.getVertexIndex(tet_index, 2);
|
|
15
|
+
const d = mesh.getVertexIndex(tet_index, 3);
|
|
16
|
+
|
|
17
|
+
return tetrahedron_compute_signed_volume(points, a, b, c, d);
|
|
18
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vertices must be unique inside a single tetrahedron, that is - no repetitions are allowed
|
|
3
|
+
* If vertices are repeated - volume will be 0 and tetrahedron will be degenerate
|
|
4
|
+
* @param {TetrahedralMesh} mesh
|
|
5
|
+
* @param {number} tet
|
|
6
|
+
* @returns {boolean}
|
|
7
|
+
*/
|
|
8
|
+
export function is_tetrahedron_degenerate(mesh: TetrahedralMesh, tet: number): boolean;
|
|
9
|
+
//# sourceMappingURL=is_tetrahedron_degenerate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is_tetrahedron_degenerate.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/is_tetrahedron_degenerate.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,sEAHW,MAAM,GACJ,OAAO,CAenB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vertices must be unique inside a single tetrahedron, that is - no repetitions are allowed
|
|
3
|
+
* If vertices are repeated - volume will be 0 and tetrahedron will be degenerate
|
|
4
|
+
* @param {TetrahedralMesh} mesh
|
|
5
|
+
* @param {number} tet
|
|
6
|
+
* @returns {boolean}
|
|
7
|
+
*/
|
|
8
|
+
export function is_tetrahedron_degenerate(mesh, tet) {
|
|
9
|
+
|
|
10
|
+
for (let i0 = 0; i0 < 4; i0++) {
|
|
11
|
+
const v0 = mesh.getVertexIndex(tet, i0);
|
|
12
|
+
for (let i1 = i0 + 1; i1 < 4; i1++) {
|
|
13
|
+
if (v0 === mesh.getVertexIndex(tet, i1)) {
|
|
14
|
+
// identical vertices
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
*
|
|
3
|
-
* @param {TetrahedralMesh} mesh
|
|
4
|
-
* @param {ArrayLike<number>|number[]} points
|
|
5
|
-
* @param {number} tet
|
|
6
|
-
* @return {number}
|
|
7
|
-
*/
|
|
8
|
-
export function get_tetrahedron_volume(mesh: TetrahedralMesh, points: ArrayLike<number> | number[], tet: number): number;
|
|
9
1
|
/**
|
|
10
2
|
*
|
|
11
3
|
* @param {TetrahedralMesh} mesh
|
|
@@ -25,10 +17,10 @@ export function validate_tetrahedron_neighbourhood(mesh: TetrahedralMesh, tet: n
|
|
|
25
17
|
/**
|
|
26
18
|
*
|
|
27
19
|
* @param {TetrahedralMesh} mesh
|
|
28
|
-
* @param {ArrayLike<number
|
|
20
|
+
* @param {ArrayLike<number>|number[]|Float32Array} points
|
|
29
21
|
* @param {function(problem:string):*} [consumer]
|
|
30
22
|
* @returns {boolean}
|
|
31
23
|
*/
|
|
32
|
-
export function validate_tetrahedral_mesh(mesh: TetrahedralMesh, points: ArrayLike<number
|
|
24
|
+
export function validate_tetrahedral_mesh(mesh: TetrahedralMesh, points: ArrayLike<number> | number[] | Float32Array, consumer?: typeof noop): boolean;
|
|
33
25
|
import { noop } from "../../../function/noop.js";
|
|
34
26
|
//# sourceMappingURL=validate_tetrahedral_mesh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate_tetrahedral_mesh.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate_tetrahedral_mesh.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/tetrahedra/validate_tetrahedral_mesh.js"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,+DALW,MAAM,gBACN,MAAM,mBACG,MAAM,WACd,OAAO,CA6DlB;AAGD;;;;;GAKG;AACH,+EAHW,MAAM,mCAehB;AAED;;;;;;GAMG;AACH,yEAJW,UAAU,MAAM,CAAC,GAAC,MAAM,EAAE,GAAC,YAAY,2BAErC,OAAO,CA4BnB;qBAhIoB,2BAA2B"}
|
|
@@ -1,23 +1,7 @@
|
|
|
1
1
|
import { noop } from "../../../function/noop.js";
|
|
2
|
+
import { get_tetrahedron_volume } from "./get_tetrahedron_volume.js";
|
|
3
|
+
import { is_tetrahedron_degenerate } from "./is_tetrahedron_degenerate.js";
|
|
2
4
|
import { INVALID_NEIGHBOUR } from "./TetrahedralMesh.js";
|
|
3
|
-
import { tetrahedron_compute_signed_volume } from "./tetrahedron_compute_signed_volume.js";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
7
|
-
* @param {TetrahedralMesh} mesh
|
|
8
|
-
* @param {ArrayLike<number>|number[]} points
|
|
9
|
-
* @param {number} tet
|
|
10
|
-
* @return {number}
|
|
11
|
-
*/
|
|
12
|
-
export function get_tetrahedron_volume(mesh, points, tet) {
|
|
13
|
-
|
|
14
|
-
const a = mesh.getVertexIndex(tet, 0);
|
|
15
|
-
const b = mesh.getVertexIndex(tet, 1);
|
|
16
|
-
const c = mesh.getVertexIndex(tet, 2);
|
|
17
|
-
const d = mesh.getVertexIndex(tet, 3);
|
|
18
|
-
|
|
19
|
-
return tetrahedron_compute_signed_volume(points, a, b, c, d);
|
|
20
|
-
}
|
|
21
5
|
|
|
22
6
|
/**
|
|
23
7
|
*
|
|
@@ -112,28 +96,7 @@ export function validate_tetrahedron_neighbourhood(mesh, tet, consumer = noop) {
|
|
|
112
96
|
/**
|
|
113
97
|
*
|
|
114
98
|
* @param {TetrahedralMesh} mesh
|
|
115
|
-
* @param {number}
|
|
116
|
-
* @returns {boolean}
|
|
117
|
-
*/
|
|
118
|
-
function is_tetrahedron_degenerate(mesh, tet) {
|
|
119
|
-
|
|
120
|
-
for (let i0 = 0; i0 < 4; i0++) {
|
|
121
|
-
const v0 = mesh.getVertexIndex(tet, i0);
|
|
122
|
-
for (let i1 = i0 + 1; i1 < 4; i1++) {
|
|
123
|
-
if (v0 === mesh.getVertexIndex(tet, i1)) {
|
|
124
|
-
// identical vertices
|
|
125
|
-
return true;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
return false;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
*
|
|
135
|
-
* @param {TetrahedralMesh} mesh
|
|
136
|
-
* @param {ArrayLike<number>} points
|
|
99
|
+
* @param {ArrayLike<number>|number[]|Float32Array} points
|
|
137
100
|
* @param {function(problem:string):*} [consumer]
|
|
138
101
|
* @returns {boolean}
|
|
139
102
|
*/
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {number[]|Float32Array} result
|
|
4
|
+
* @param {number} result_offset
|
|
5
|
+
* @param {number[]|Float32Array} input
|
|
6
|
+
* @param {number} input_offset
|
|
7
|
+
*/
|
|
8
|
+
export function v3_negate_array(result: number[] | Float32Array, result_offset: number, input: number[] | Float32Array, input_offset: number): void;
|
|
9
|
+
//# sourceMappingURL=v3_negate_array.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v3_negate_array.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/3d/v3_negate_array.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wCALW,MAAM,EAAE,GAAC,YAAY,iBACrB,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,gBACrB,MAAM,QAUhB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {number[]|Float32Array} result
|
|
4
|
+
* @param {number} result_offset
|
|
5
|
+
* @param {number[]|Float32Array} input
|
|
6
|
+
* @param {number} input_offset
|
|
7
|
+
*/
|
|
8
|
+
export function v3_negate_array(result, result_offset, input, input_offset) {
|
|
9
|
+
const x = input[input_offset];
|
|
10
|
+
const y = input[input_offset + 1];
|
|
11
|
+
const z = input[input_offset + 2];
|
|
12
|
+
|
|
13
|
+
result[result_offset] = -x;
|
|
14
|
+
result[result_offset + 1] = -y;
|
|
15
|
+
result[result_offset + 2] = -z;
|
|
16
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":";AAsBA;
|
|
1
|
+
{"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":"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"}
|
|
@@ -13,9 +13,9 @@ import { v4_length } from "./vec4/v4_length.js";
|
|
|
13
13
|
import Vector3 from "./Vector3.js";
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
16
|
+
const scratch_v3_a = new Vector3();
|
|
17
|
+
const scratch_v3_b = new Vector3();
|
|
18
|
+
const scratch_v3_c = new Vector3();
|
|
19
19
|
|
|
20
20
|
const sin = Math.sin;
|
|
21
21
|
const cos = Math.cos;
|
|
@@ -116,12 +116,12 @@ class Quaternion {
|
|
|
116
116
|
* @param {number} uz up vector
|
|
117
117
|
*/
|
|
118
118
|
_lookRotation(fx, fy, fz, ux, uy, uz) {
|
|
119
|
-
|
|
120
|
-
|
|
119
|
+
scratch_v3_a.set(fx, fy, fz);
|
|
120
|
+
scratch_v3_a.normalize();
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
scratch_v3_c._crossVectors(ux, uy, uz, scratch_v3_a.x, scratch_v3_a.y, scratch_v3_a.z);
|
|
123
123
|
|
|
124
|
-
if (
|
|
124
|
+
if (scratch_v3_c.lengthSq() === 0) {
|
|
125
125
|
// up and forward are parallel
|
|
126
126
|
|
|
127
127
|
/*
|
|
@@ -130,32 +130,32 @@ class Quaternion {
|
|
|
130
130
|
*/
|
|
131
131
|
|
|
132
132
|
if (Math.abs(uz) === 1) {
|
|
133
|
-
|
|
133
|
+
scratch_v3_a.x += 0.001;
|
|
134
134
|
} else {
|
|
135
|
-
|
|
135
|
+
scratch_v3_a.z += 0.001;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
scratch_v3_a.normalize();
|
|
139
|
+
scratch_v3_c._crossVectors(ux, uy, uz, scratch_v3_a.x, scratch_v3_a.y, scratch_v3_a.z);
|
|
140
140
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
scratch_v3_c.normalize();
|
|
144
144
|
|
|
145
|
-
|
|
145
|
+
scratch_v3_b.crossVectors(scratch_v3_a, scratch_v3_c);
|
|
146
146
|
|
|
147
147
|
// construct partial transform matrix
|
|
148
|
-
const m00 =
|
|
149
|
-
const m10 =
|
|
150
|
-
const m20 =
|
|
148
|
+
const m00 = scratch_v3_c.x;
|
|
149
|
+
const m10 = scratch_v3_c.y;
|
|
150
|
+
const m20 = scratch_v3_c.z;
|
|
151
151
|
|
|
152
|
-
const m01 =
|
|
153
|
-
const m11 =
|
|
154
|
-
const m21 =
|
|
152
|
+
const m01 = scratch_v3_b.x;
|
|
153
|
+
const m11 = scratch_v3_b.y;
|
|
154
|
+
const m21 = scratch_v3_b.z;
|
|
155
155
|
|
|
156
|
-
const m02 =
|
|
157
|
-
const m12 =
|
|
158
|
-
const m22 =
|
|
156
|
+
const m02 = scratch_v3_a.x;
|
|
157
|
+
const m12 = scratch_v3_a.y;
|
|
158
|
+
const m22 = scratch_v3_a.z;
|
|
159
159
|
|
|
160
160
|
this.__setFromRotationMatrix(
|
|
161
161
|
m00, m01, m02,
|
|
@@ -189,7 +189,7 @@ class Quaternion {
|
|
|
189
189
|
}
|
|
190
190
|
|
|
191
191
|
/**
|
|
192
|
-
*
|
|
192
|
+
* Makes this quaternion into an inverse of the other
|
|
193
193
|
* @param {Quaternion} other
|
|
194
194
|
*/
|
|
195
195
|
copyInverse(other) {
|
|
@@ -209,7 +209,7 @@ class Quaternion {
|
|
|
209
209
|
const length_sqr = x * x + y * y + z * z + w * w;
|
|
210
210
|
|
|
211
211
|
if (length_sqr === 0) {
|
|
212
|
-
this.set(0, 0, 0,
|
|
212
|
+
this.set(0, 0, 0, 1);
|
|
213
213
|
return;
|
|
214
214
|
}
|
|
215
215
|
|
|
@@ -265,6 +265,11 @@ class Quaternion {
|
|
|
265
265
|
* @param {number} angle
|
|
266
266
|
*/
|
|
267
267
|
_fromAxisAngle(ax, ay, az, angle) {
|
|
268
|
+
assert.isNumber(ax, 'ax');
|
|
269
|
+
assert.isNumber(ay, 'ay');
|
|
270
|
+
assert.isNumber(az, 'az');
|
|
271
|
+
assert.isNumber(angle, 'angle');
|
|
272
|
+
|
|
268
273
|
const halfAngle = angle * 0.5;
|
|
269
274
|
|
|
270
275
|
const sinA2 = sin(halfAngle);
|
|
@@ -303,7 +308,7 @@ class Quaternion {
|
|
|
303
308
|
// perform projection of rotation onto axis
|
|
304
309
|
const d = v3_dot(x, y, z, axis.x, axis.y, axis.z);
|
|
305
310
|
|
|
306
|
-
const mag2 =
|
|
311
|
+
const mag2 = axis.x * axis.x + axis.y * axis.y + axis.z * axis.z;
|
|
307
312
|
|
|
308
313
|
const m = d / mag2;
|
|
309
314
|
|
|
@@ -818,58 +823,6 @@ class Quaternion {
|
|
|
818
823
|
this.set(_x, _y, _z, _w);
|
|
819
824
|
}
|
|
820
825
|
|
|
821
|
-
/**
|
|
822
|
-
* Based on blog post: http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors
|
|
823
|
-
* @param {Vector3} from
|
|
824
|
-
* @param {Vector3} to
|
|
825
|
-
*/
|
|
826
|
-
fromNonUnitVectors(from, to) {
|
|
827
|
-
//quat quat::fromtwovectors(vec3 u, vec3 v)
|
|
828
|
-
// {
|
|
829
|
-
// vec3 w = cross(u, v);
|
|
830
|
-
// quat q = quat(dot(u, v), w.x, w.y, w.z);
|
|
831
|
-
// q.w += length(q);
|
|
832
|
-
// return normalize(q);
|
|
833
|
-
// }
|
|
834
|
-
|
|
835
|
-
const ax = from.x;
|
|
836
|
-
const ay = from.y;
|
|
837
|
-
const az = from.z;
|
|
838
|
-
|
|
839
|
-
const bx = to.x;
|
|
840
|
-
const by = to.y;
|
|
841
|
-
const bz = to.z;
|
|
842
|
-
|
|
843
|
-
//compute cross product
|
|
844
|
-
const crossX = ay * bz - az * by;
|
|
845
|
-
const crossY = az * bx - ax * bz;
|
|
846
|
-
const crossZ = ax * by - ay * bx;
|
|
847
|
-
|
|
848
|
-
const uv_dot = v3_dot(ax, ay, az, bx, by, bz);
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
const qX = crossX;
|
|
852
|
-
const qY = crossY;
|
|
853
|
-
const qZ = crossZ;
|
|
854
|
-
const qW = uv_dot;
|
|
855
|
-
|
|
856
|
-
const p0 = qX * qX + qY * qY + qZ * qZ;
|
|
857
|
-
|
|
858
|
-
const l0 = Math.sqrt(p0 + qW * qW);
|
|
859
|
-
|
|
860
|
-
const qW_1 = qW + l0;
|
|
861
|
-
|
|
862
|
-
//normalize result
|
|
863
|
-
const l1 = 1 / Math.sqrt(p0 + qW_1 * qW_1);
|
|
864
|
-
|
|
865
|
-
const x = qX * l1;
|
|
866
|
-
const y = qY * l1;
|
|
867
|
-
const z = qZ * l1;
|
|
868
|
-
const w = qW * l1;
|
|
869
|
-
|
|
870
|
-
this.set(x, y, z, w);
|
|
871
|
-
}
|
|
872
|
-
|
|
873
826
|
/**
|
|
874
827
|
* NOTE: Vectors need to be normalized
|
|
875
828
|
* Based on blog post: http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors
|
|
@@ -112,6 +112,10 @@ export default class Vector3 implements Vector3Like {
|
|
|
112
112
|
|
|
113
113
|
writeToArray(array: number[] | ArrayLike<number>, offset?: number): void
|
|
114
114
|
|
|
115
|
+
toArray(array: number[] | ArrayLike<number>, offset?: number): void
|
|
116
|
+
|
|
117
|
+
fromArray(array: number[] | ArrayLike<number>, offset?: number): void
|
|
118
|
+
|
|
115
119
|
asArray(): number[]
|
|
116
120
|
|
|
117
121
|
static distance(a: Vector3Like, b: Vector3Like): number
|
package/src/core/geom/Vector3.js
CHANGED
|
@@ -505,10 +505,10 @@ class Vector3 {
|
|
|
505
505
|
|
|
506
506
|
// calculate quat * vector
|
|
507
507
|
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
508
|
+
const ix = qw * x + qy * z - qz * y;
|
|
509
|
+
const iy = qw * y + qz * x - qx * z;
|
|
510
|
+
const iz = qw * z + qx * y - qy * x;
|
|
511
|
+
const iw = -qx * x - qy * y - qz * z;
|
|
512
512
|
|
|
513
513
|
// calculate result * inverse quat
|
|
514
514
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"m3_cm_invert.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/mat3/m3_cm_invert.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,kCAHW,YAAY,KACZ,YAAY,WAyCtB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {Float32Array} out
|
|
4
|
+
* @param {Float32Array} a
|
|
5
|
+
*/
|
|
6
|
+
export function m3_cm_invert(out, a) {
|
|
7
|
+
// adapted from gl-matrix
|
|
8
|
+
|
|
9
|
+
const a00 = a[0],
|
|
10
|
+
a01 = a[1],
|
|
11
|
+
a02 = a[2];
|
|
12
|
+
|
|
13
|
+
const a10 = a[3],
|
|
14
|
+
a11 = a[4],
|
|
15
|
+
a12 = a[5];
|
|
16
|
+
|
|
17
|
+
const a20 = a[6],
|
|
18
|
+
a21 = a[7],
|
|
19
|
+
a22 = a[8];
|
|
20
|
+
|
|
21
|
+
const b01 = a22 * a11 - a12 * a21;
|
|
22
|
+
const b11 = -a22 * a10 + a12 * a20;
|
|
23
|
+
const b21 = a21 * a10 - a11 * a20;
|
|
24
|
+
|
|
25
|
+
// Calculate the determinant
|
|
26
|
+
let det = a00 * b01 + a01 * b11 + a02 * b21;
|
|
27
|
+
|
|
28
|
+
if (!det) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
det = 1.0 / det;
|
|
33
|
+
|
|
34
|
+
out[0] = b01 * det;
|
|
35
|
+
out[1] = (-a22 * a01 + a02 * a21) * det;
|
|
36
|
+
out[2] = (a12 * a01 - a02 * a11) * det;
|
|
37
|
+
out[3] = b11 * det;
|
|
38
|
+
out[4] = (a22 * a00 - a02 * a20) * det;
|
|
39
|
+
out[5] = (-a12 * a00 + a02 * a10) * det;
|
|
40
|
+
out[6] = b21 * det;
|
|
41
|
+
out[7] = (-a21 * a00 + a01 * a20) * det;
|
|
42
|
+
out[8] = (a11 * a00 - a01 * a10) * det;
|
|
43
|
+
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column-major ( OpenGL style) matrix multiplication
|
|
3
|
+
* @param {Float32Array|number[]} out
|
|
4
|
+
* @param {number} out_offset
|
|
5
|
+
* @param {number} x
|
|
6
|
+
* @param {number} y
|
|
7
|
+
* @param {Float32Array|number[]} m3
|
|
8
|
+
*/
|
|
9
|
+
export function v2_matrix3_cm_multiply(out: Float32Array | number[], out_offset: number, x: number, y: number, m3: Float32Array | number[]): void;
|
|
10
|
+
//# sourceMappingURL=v2_matrix3_cm_multiply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2_matrix3_cm_multiply.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec2/v2_matrix3_cm_multiply.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,4CANW,YAAY,GAAC,MAAM,EAAE,cACrB,MAAM,KACN,MAAM,KACN,MAAM,MACN,YAAY,GAAC,MAAM,EAAE,QAa/B"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column-major ( OpenGL style) matrix multiplication
|
|
3
|
+
* @param {Float32Array|number[]} out
|
|
4
|
+
* @param {number} out_offset
|
|
5
|
+
* @param {number} x
|
|
6
|
+
* @param {number} y
|
|
7
|
+
* @param {Float32Array|number[]} m3
|
|
8
|
+
*/
|
|
9
|
+
export function v2_matrix3_cm_multiply(
|
|
10
|
+
out, out_offset,
|
|
11
|
+
x, y,
|
|
12
|
+
m3
|
|
13
|
+
) {
|
|
14
|
+
|
|
15
|
+
const tx = m3[0] * x + m3[1] * y + m3[2];
|
|
16
|
+
const ty = m3[3] * x + m3[4] * y + m3[5];
|
|
17
|
+
|
|
18
|
+
out[out_offset] = tx;
|
|
19
|
+
out[out_offset + 1] = ty;
|
|
20
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row-major ( OpenGL style) matrix multiplication
|
|
3
|
+
* @param {Float32Array|number[]} out
|
|
4
|
+
* @param {number} out_offset
|
|
5
|
+
* @param {number} x
|
|
6
|
+
* @param {number} y
|
|
7
|
+
* @param {Float32Array|number[]} m3
|
|
8
|
+
*/
|
|
9
|
+
export function v2_matrix3_rm_multiply(out: Float32Array | number[], out_offset: number, x: number, y: number, m3: Float32Array | number[]): void;
|
|
10
|
+
//# sourceMappingURL=v2_matrix3_rm_multiply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v2_matrix3_rm_multiply.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec2/v2_matrix3_rm_multiply.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,4CANW,YAAY,GAAC,MAAM,EAAE,cACrB,MAAM,KACN,MAAM,KACN,MAAM,MACN,YAAY,GAAC,MAAM,EAAE,QAa/B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row-major ( OpenGL style) matrix multiplication
|
|
3
|
+
* @param {Float32Array|number[]} out
|
|
4
|
+
* @param {number} out_offset
|
|
5
|
+
* @param {number} x
|
|
6
|
+
* @param {number} y
|
|
7
|
+
* @param {Float32Array|number[]} m3
|
|
8
|
+
*/
|
|
9
|
+
export function v2_matrix3_rm_multiply(
|
|
10
|
+
out, out_offset,
|
|
11
|
+
x, y,
|
|
12
|
+
m3
|
|
13
|
+
) {
|
|
14
|
+
|
|
15
|
+
const tx = m3[0] * x + m3[3] * y + m3[6];
|
|
16
|
+
const ty = m3[1] * x + m3[4] * y + m3[7];
|
|
17
|
+
|
|
18
|
+
out[out_offset] = tx;
|
|
19
|
+
out[out_offset + 1] = ty;
|
|
20
|
+
}
|
|
21
|
+
|