@woosh/meep-engine 2.33.22 → 2.33.26
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/core/bvh2/BinaryNode.js +1 -1
- package/core/bvh2/aabb3/AABB3.js +18 -0
- package/core/bvh2/aabb3/AABB3Math.js +1 -1
- package/core/bvh2/binary/2/BinaryUint32BVH.js +498 -0
- package/core/bvh2/binary/2/BinaryUint32BVH.spec.js +54 -0
- package/core/bvh2/binary/IndexedBinaryBVH.js +22 -26
- package/core/bvh2/traversal/ThreeClippingPlaneComputingBVHVisitor.js +5 -1
- package/core/bvh2/traversal/__detailed_box_volume_intersection.js +31 -11
- package/core/collection/ArrayUtils.js +1 -1
- package/core/collection/array/arrayQuickSort.js +9 -6
- package/core/collection/array/array_swap.js +22 -0
- package/core/collection/array/binarySearchHighIndex.js +1 -1
- package/core/collection/array/computeHashArray.js +22 -0
- package/core/collection/array/computeHashIntegerArray.js +15 -0
- package/core/collection/array/copyArray.js +2 -2
- package/core/collection/table/DataType2TypedArrayConstructorMapping.js +15 -0
- package/core/color/Color.js +2 -1
- package/core/function/FunctionCompiler.js +2 -1
- package/core/geom/3d/aabb/aabb3_computeDistanceAbovePlane.js +9 -33
- package/core/geom/3d/frustum/frustum3_computeNearestPointToPoint.js +10 -2
- package/core/geom/3d/line/line3_computeSegmentPointDistance_sqr.js +41 -0
- package/core/geom/3d/morton/mortonEncode_magicbits.js +2 -1
- package/core/geom/3d/morton/reinterpret_float32_as_int32.js +13 -0
- package/core/geom/3d/morton/v3_morton_encode_transformed.js +33 -0
- package/core/geom/3d/normal/hemioct/unit_hemioct.spec.js +1 -1
- package/core/geom/3d/plane/plane_computeConvex3PlaneIntersection.js +13 -14
- package/core/geom/3d/ray/ray_computeNearestPointToPoint.js +37 -0
- package/core/geom/3d/shape/AbstractShape3D.js +65 -0
- package/core/geom/3d/shape/TransformedShape3D.js +181 -0
- package/core/geom/3d/shape/TransformedShape3D.spec.js +33 -0
- package/core/geom/3d/shape/UnionShape3D.js +255 -0
- package/core/geom/3d/shape/UnitCubeShape3D.js +101 -0
- package/core/geom/3d/shape/UnitCubeShape3D.spec.js +42 -0
- package/core/geom/3d/shape/UnitSphereShape3D.js +55 -0
- package/core/geom/3d/shape/util/compute_signed_distance_gradient_by_sampling.js +48 -0
- package/core/geom/3d/shape/util/shape_to_visual_entity.js +159 -0
- package/core/geom/3d/voxel/DenseBitVolume3D.js +87 -0
- package/core/geom/3d/voxel/buildVolumeFromProjectedGeometry.js +23 -0
- package/core/geom/AABB2.js +1 -1
- package/core/geom/ConicRay.js +3 -1
- package/core/geom/LineSegment.js +0 -78
- package/core/geom/Matrix4.js +7 -8
- package/core/geom/Plane.js +14 -9
- package/core/geom/Rectangle.js +2 -1
- package/core/geom/Vector1.js +1 -1
- package/core/geom/Vector3.js +2 -1
- package/core/geom/Vector4.js +2 -1
- package/core/geom/random/randomPointInBox.js +7 -3
- package/core/geom/random/randomPointInPoint.js +6 -3
- package/core/geom/random/randomPointInSphere.js +9 -5
- package/core/geom/random/randomPointOnBox.js +7 -3
- package/core/geom/random/randomPointOnSphere.js +6 -3
- package/core/geom/v3_length.js +8 -3
- package/core/graph/graph_k_means_cluster.js +1 -1
- package/core/json/resolvePathByArray.js +2 -2
- package/core/math/MathUtils.js +0 -354
- package/core/math/MathUtils.spec.js +7 -1
- package/core/math/gaussian.js +9 -0
- package/core/math/hash/computeHashFloat.js +17 -0
- package/core/math/hash/computeHashFloatArray.js +34 -0
- package/core/math/hash/computeObjectHash.js +54 -0
- package/core/math/intersects1D.js +19 -0
- package/core/math/interval/NumericInterval.js +2 -2
- package/core/math/isValueBetween.js +10 -0
- package/core/math/isValueBetweenInclusive.js +10 -0
- package/core/math/noise/curl_noise_3dt.js +1 -1
- package/core/math/noise/sdnoise.js +10 -10
- package/core/math/overlap1D.js +19 -0
- package/core/math/pingpong.js +17 -0
- package/core/math/random/makeRangedRandom.js +19 -0
- package/core/math/random/randomFloatBetween.js +14 -0
- package/core/math/random/randomFromArray.js +19 -0
- package/core/math/random/randomGaussian.js +15 -0
- package/core/math/random/randomIntegerBetween.js +14 -0
- package/core/math/random/roundFair.js +15 -0
- package/core/math/separation1D.js +21 -0
- package/core/math/solveQuadratic.js +25 -0
- package/core/model/BoundedValue.js +1 -1
- package/core/model/node-graph/node/NodeInstancePortReference.js +1 -1
- package/core/model/node-graph/node/Port.js +1 -1
- package/core/model/reactive/evaluation/MultiPredicateEvaluator.spec.js +3 -1
- package/core/model/reactive/model/ReactiveBinaryExpression.js +1 -1
- package/core/model/reactive/model/terminal/ReactiveLiteralNumber.js +1 -1
- package/core/model/reactive/model/terminal/ReactiveReference.js +1 -1
- package/core/model/reactive/model/util/createRandomReactiveExpression.js +1 -1
- package/core/model/stat/LinearModifier.js +1 -1
- package/core/primitives/array/computeIntegerArrayHash.js +1 -1
- package/{engine/graphics/render/forward_plus/materials → core/primitives/strings}/insert_after.js +3 -0
- package/core/primitives/strings/insert_after_or_replace.js +27 -0
- package/editor/process/symbolic/makeHelperBoxGeometry.js +44 -0
- package/editor/view/ecs/EntityEditor.js +2 -2
- package/editor/view/ecs/components/particles/ParticleEmitterController.js +2 -2
- package/engine/EngineHarness.js +1 -0
- package/engine/animation/AnimationUtils.js +5 -5
- package/engine/animation/curve/AnimationCurve.js +72 -0
- package/engine/animation/curve/Keyframe.js +27 -0
- package/engine/animation/keyed2/AnimationTrack.js +27 -3
- package/engine/asset/Asset.js +1 -1
- package/engine/asset/loaders/GLTFAssetLoader.d.ts +1 -1
- package/engine/asset/loaders/GLTFAssetLoader.js +10 -0
- package/engine/asset/loaders/image/ImageRGBADataAsset.js +8 -1
- package/engine/asset/loaders/material/computeImageBitmapEquality.js +11 -0
- package/engine/asset/loaders/material/computeImageBitmapHash.js +22 -28
- package/engine/asset/loaders/material/computeMaterialHash.js +3 -1
- package/engine/asset/loaders/material/computeTextureHash.js +2 -1
- package/engine/ecs/EntityBuilder.js +25 -5
- package/engine/ecs/animation/Animation.js +2 -1
- package/engine/ecs/animation/InverseKinematics.js +2 -1
- package/engine/ecs/attachment/AttachmentBinding.js +8 -0
- package/engine/ecs/attachment/AttachmentSystem.js +4 -0
- package/engine/ecs/attachment/TransformAttachmentBinding.js +14 -44
- package/engine/ecs/components/Tag.js +27 -6
- package/engine/ecs/dynamic_actions/DynamicActorSystem.js +2 -1
- package/engine/ecs/dynamic_actions/DynamicRuleDescriptionTable.spec.js +3 -5
- package/engine/ecs/dynamic_actions/actions/definition/WeightedRandomActionDescription.js +1 -1
- package/engine/ecs/evaluation/complex/PointFitnessGaussianBlur.js +1 -1
- package/engine/ecs/foliage/ecs/Foliage2.js +1 -1
- package/engine/ecs/fow/FogOfWar.js +4 -0
- package/engine/ecs/fow/FogOfWarSystem.js +2 -0
- package/engine/ecs/fow/shader/FogOfWarRenderer.js +1 -1
- package/engine/ecs/gui/GUIElement.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplay.js +1 -1
- package/engine/ecs/gui/hud/HeadsUpDisplaySystem.js +2 -0
- package/engine/ecs/gui/position/ViewportPosition.js +2 -1
- package/engine/ecs/system/AbstractContextSystem.js +1 -1
- package/engine/ecs/systems/RangedAttackSystem.js +1 -1
- package/engine/ecs/systems/SteeringSystem.js +1 -1
- package/engine/ecs/systems/TagSystem.js +17 -0
- package/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -1
- package/engine/ecs/tooltip/TooltipComponent.js +15 -0
- package/engine/ecs/transform/Transform.js +19 -6
- package/engine/ecs/util/hideEntityGracefully.js +18 -0
- package/engine/graphics/GraphicsEngine.js +11 -23
- package/engine/graphics/camera/testClippingPlaneComputation.js +2 -2
- package/engine/graphics/composit/CompositLayer.js +17 -4
- package/engine/graphics/composit/CompositingStages.js +8 -0
- package/engine/graphics/composit/LayerCompositer.js +35 -6
- package/engine/graphics/ecs/animation/animator/AnimationClip.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -1
- package/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/AnimationGraph.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +1 -1
- package/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +2 -1
- package/engine/graphics/ecs/camera/CameraClippingPlaneComputer.js +1 -1
- package/engine/graphics/ecs/highlight/HighlightDefinition.js +2 -1
- package/engine/graphics/ecs/highlight/plugin/OutlineRenderPlugin.js +11 -7
- package/engine/graphics/ecs/light/Light.d.ts +1 -1
- package/engine/graphics/ecs/light/Light.js +5 -0
- package/engine/graphics/ecs/light/binding/three/ThreeLightBinding.js +5 -1
- package/engine/graphics/ecs/mesh/Mesh.js +2 -1
- package/engine/graphics/ecs/mesh-v2/DrawMode.js +5 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +13 -0
- package/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +32 -18
- package/engine/graphics/ecs/mesh-v2/ShadedGeometrySystem.d.ts +6 -0
- package/engine/graphics/ecs/path/testPathDisplaySystem.js +98 -98
- package/engine/graphics/ecs/trail2d/Trail2D.js +17 -4
- package/engine/graphics/ecs/trail2d/Trail2DSystem.d.ts +2 -3
- package/engine/graphics/ecs/trail2d/Trail2DSystem.js +34 -118
- package/engine/graphics/geometry/AttributeSpec.js +105 -0
- package/engine/graphics/{micron/format/MicronVertexDataSpec.js → geometry/VertexDataSpec.js} +56 -25
- package/engine/graphics/micron/build/buildMicronGeometryFromBufferGeometry.js +7 -7
- package/engine/graphics/micron/build/fill_patch_geometry_data.js +1 -1
- package/engine/graphics/micron/buildPatchwork.js +1 -1
- package/engine/graphics/micron/format/MicronGeometry.js +3 -3
- package/engine/graphics/micron/format/serialization/MicronGeometryBinarySerializationAdapter.js +2 -2
- package/engine/graphics/micron/format/serialization/deserialize_attribute_spec.js +1 -1
- package/engine/graphics/micron/format/serialization/serialize_attribute_spec.js +1 -1
- package/engine/graphics/micron/render/PatchCacheKey.js +1 -1
- package/engine/graphics/micron/render/instanced/AttributeDataTexture.js +5 -5
- package/engine/graphics/micron/render/v1/ThreeVirtualGeometryAdapter.js +1 -1
- package/engine/graphics/particles/ParticleEmitterLibrary.js +3 -0
- package/engine/graphics/particles/ecs/{ParticleEmitterSystem2.js → ParticleEmitterSystem.js} +17 -9
- package/engine/graphics/particles/particular/engine/ParticularEngine.js +12 -4
- package/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +84 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +106 -169
- package/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +5 -0
- package/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +14 -3
- package/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +141 -14
- package/engine/graphics/particles/particular/engine/emitter/ParticlePool.spec.js +8 -7
- package/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +37 -0
- package/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +25 -0
- package/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +8 -2
- package/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +2 -1
- package/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +1 -1
- package/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +1 -1
- package/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +24 -0
- package/engine/graphics/particles/particular/engine/renderers/billboard/ParticleBillboardMaterial.js +262 -71
- package/engine/graphics/particles/particular/engine/renderers/billboard/prototypeBillboardRenderer.js +9 -9
- package/engine/graphics/particles/particular/engine/shader/ShaderManager.js +80 -46
- package/engine/graphics/particles/particular/engine/shader/debugAtlas.js +14 -0
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +2 -5
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +2 -6
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +2 -7
- package/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +2 -5
- package/engine/graphics/particles/particular/engine/simulator/update_parameters.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +1 -1
- package/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +141 -0
- package/engine/graphics/particles/particular/engine/utils/volume/ParticleVolume.js +478 -0
- package/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.js +27 -0
- package/engine/graphics/particles/particular/engine/utils/volume/prototypeParticleVolume.js +935 -0
- package/engine/graphics/particles/particular/group/Operation.js +18 -0
- package/engine/graphics/particles/particular/group/OperationType.js +9 -0
- package/engine/graphics/particles/particular/group/ParticleAttribute.js +2 -1
- package/engine/graphics/particles/particular/group/ParticleAttributeType.js +11 -0
- package/engine/graphics/particles/particular/group/ParticleDataType.js +10 -0
- package/engine/graphics/particles/particular/group/ParticleGroup.js +7 -245
- package/engine/graphics/particles/particular/group/ParticleGroup.spec.js +3 -1
- package/engine/graphics/particles/particular/group/ParticleSpecification.js +21 -14
- package/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +20 -0
- package/engine/graphics/particles/particular/group/optimizeCommandQueue.js +162 -0
- package/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +19 -0
- package/engine/graphics/render/buffer/buffers/prototypeNormalFrameBuffer.js +2 -2
- package/engine/graphics/render/buffer/simple-fx/ao/AmbientOcclusionPostProcessEffect.js +13 -7
- package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameter.js +2 -1
- package/engine/graphics/render/buffer/slot/parameter/ProgramValueSlotParameterSet.js +1 -1
- package/engine/graphics/render/forward_plus/LightManager.js +126 -95
- package/engine/graphics/render/forward_plus/PointLight.js +9 -0
- package/engine/graphics/render/forward_plus/PointLightData.js +1 -1
- package/engine/graphics/render/forward_plus/SpotLight.js +9 -0
- package/engine/graphics/render/forward_plus/cluster/compute_light_data_hash_0.js +2 -2
- package/engine/graphics/render/forward_plus/computeFrustumCorners.js +14 -32
- package/engine/graphics/render/forward_plus/materials/FP_INJECTION_POINT_ACCUMULATION.js +1 -0
- package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_ACCUMULATION.js +32 -0
- package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_DECODE_PARS.js +51 -0
- package/engine/graphics/render/forward_plus/materials/FP_SHADER_CHUNK_PREAMBLE.js +25 -0
- package/engine/graphics/render/forward_plus/materials/fp_build_fragment_shader.js +31 -120
- package/engine/graphics/render/forward_plus/materials/fp_build_vertex_lighting_shared.js +35 -0
- package/engine/graphics/render/forward_plus/materials/fp_build_vertex_shader.js +4 -5
- package/engine/graphics/render/forward_plus/plugin/ForwardPlusRenderingPlugin.js +1 -1
- package/engine/graphics/render/forward_plus/plugin/MaterialTransformer.js +10 -3
- package/engine/graphics/render/forward_plus/plugin/ptototypeFPPlugin.js +595 -60
- package/engine/graphics/render/forward_plus/prototypeLightManager.js +256 -136
- package/engine/graphics/render/forward_plus/query/analytical_triplanar_corner_mapping.js +8 -0
- package/engine/graphics/render/forward_plus/query/cube_mapping.js +38 -0
- package/engine/graphics/render/forward_plus/query/detailed_sphere_frustum_intersection_test.js +86 -0
- package/engine/graphics/render/forward_plus/query/point_light_inside_volume.js +73 -0
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_objects.js +131 -0
- package/engine/graphics/render/forward_plus/query/query_bvh_frustum_from_texture.js +129 -0
- package/engine/graphics/render/forward_plus/query/spot_light_inside_volume.js +33 -0
- package/engine/graphics/render/forward_plus/read_frustum_corner.js +14 -0
- package/engine/graphics/render/forward_plus/testClusterEquality.js +22 -0
- package/engine/graphics/render/layers/RenderLayerUtils.js +7 -4
- package/engine/graphics/render/visibility/IncrementalDeltaSet.js +11 -0
- package/engine/graphics/render/visibility/hiz/prototypeHiZ.js +2 -2
- package/engine/graphics/shaders/TerrainShader.js +4 -5
- package/engine/graphics/shadows/ShadowMapRenderer.js +8 -2
- package/engine/graphics/texture/atlas/AtlasPatch.js +7 -2
- package/engine/graphics/texture/atlas/TextureAtlas.js +2 -2
- package/engine/graphics/texture/sampler/HarmonicDiffusionGrid.spec.js +1 -1
- package/engine/graphics/texture/sampler/SampleTraverser.js +1 -1
- package/engine/graphics/texture/sampler/Sampler2D.js +8 -7
- package/engine/graphics/texture/sampler/distanceField.spec.js +1 -1
- package/engine/graphics/texture/sampler/scaleSampler2D.js +7 -10
- package/engine/graphics/trail/x/RibbonMaterialX.js +3 -3
- package/engine/graphics/trail/x/RibbonX.js +17 -2
- package/engine/graphics/trail/x/RibbonXPlugin.js +51 -1
- package/engine/graphics/util/composeMatrix4.js +33 -23
- package/engine/graphics/util/decompose_matrix_4_array.js +61 -0
- package/engine/grid/components/GridObstacle.js +3 -10
- package/engine/intelligence/behavior/ecs/BehaviorComponent.js +30 -14
- package/engine/intelligence/behavior/selector/WeightedElement.js +2 -1
- package/engine/intelligence/optimization/RandomOptimizer.js +1 -1
- package/engine/knowledge/database/StaticKnowledgeDataTable.js +6 -1
- package/engine/navigation/ecs/components/Path.js +1 -6
- package/engine/navigation/grid/FastBinaryHeap.spec.js +1 -1
- package/engine/reference/v2/Reference.js +6 -0
- package/engine/sound/ecs/emitter/SoundEmitter.js +2 -1
- package/engine/sound/ecs/emitter/SoundTrack.js +2 -1
- package/engine/sound/material/concrete/RandomSoundMaterial.js +1 -1
- package/engine/ui/notification/notificationGenerator.js +1 -1
- package/generation/filtering/numeric/complex/CellFilterGaussianBlur.js +1 -1
- package/generation/grid/generation/GridTaskExecuteRuleTimes.js +2 -1
- package/generation/markers/actions/MarkerNodeActionSelectRandom.js +1 -1
- package/generation/markers/transform/MarkerNodeTransformerRecordUniqueRandomEnum.js +1 -1
- package/generation/placement/action/random/CellActionSelectRandom.js +1 -1
- package/generation/theme/ThemeEngine.js +2 -2
- package/misc/makeMaterialIconCached.js +2 -2
- package/package.json +3 -3
- package/view/View.js +4 -2
- package/view/elements/image/HTMLElementCacheKey.js +2 -1
- package/view/elements/radial/RadialText.js +2 -1
- package/view/minimap/gl/MinimapMarkersGL.js +6 -100
- package/view/minimap/gl/buildMaterial.js +94 -0
- package/engine/graphics/micron/format/MicronGeometryBufferAttributeSpec.js +0 -71
- package/engine/graphics/render/forward_plus/queryBVH_Frustum.js +0 -345
package/core/geom/Plane.js
CHANGED
|
@@ -192,7 +192,8 @@ export function computePlaneLineIntersection(out, originX, originY, originZ, dir
|
|
|
192
192
|
|
|
193
193
|
/**
|
|
194
194
|
*
|
|
195
|
-
* @param {
|
|
195
|
+
* @param {Float32Array|number[]|vec3} result
|
|
196
|
+
* @param {number} result_offset
|
|
196
197
|
* @param {number} x0
|
|
197
198
|
* @param {number} y0
|
|
198
199
|
* @param {number} z0
|
|
@@ -205,30 +206,34 @@ export function computePlaneLineIntersection(out, originX, originY, originZ, dir
|
|
|
205
206
|
* @param {number} dist
|
|
206
207
|
* @returns {boolean}
|
|
207
208
|
*/
|
|
208
|
-
export function plane3_computeLineSegmentIntersection(
|
|
209
|
+
export function plane3_computeLineSegmentIntersection(
|
|
210
|
+
result, result_offset,
|
|
211
|
+
x0, y0, z0,
|
|
212
|
+
x1, y1, z1,
|
|
213
|
+
normalX, normalY, normalZ, dist
|
|
214
|
+
) {
|
|
215
|
+
|
|
209
216
|
const directionX = x1 - x0;
|
|
210
217
|
const directionY = y1 - y0;
|
|
211
218
|
const directionZ = z1 - z0;
|
|
212
219
|
|
|
213
220
|
const denom = v3_dot(directionX, directionY, directionZ, normalX, normalY, normalZ);
|
|
214
221
|
|
|
215
|
-
const p = v3_dot(normalX, normalY, normalZ, x0, y0, z0) + dist;
|
|
216
|
-
|
|
217
222
|
if (denom === 0) {
|
|
218
223
|
return false;
|
|
219
224
|
}
|
|
220
225
|
|
|
226
|
+
const p = v3_dot(normalX, normalY, normalZ, x0, y0, z0) + dist;
|
|
227
|
+
|
|
221
228
|
const t = -p / denom;
|
|
222
229
|
|
|
223
230
|
if (t < 0 || t > 1) {
|
|
224
231
|
return false;
|
|
225
232
|
}
|
|
226
233
|
|
|
227
|
-
result
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
directionZ * t + z0
|
|
231
|
-
);
|
|
234
|
+
result[result_offset] = directionX * t + x0;
|
|
235
|
+
result[result_offset + 1] = directionY * t + y0;
|
|
236
|
+
result[result_offset + 2] = directionZ * t + z0;
|
|
232
237
|
|
|
233
238
|
return true;
|
|
234
239
|
|
package/core/geom/Rectangle.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Created by Alex on 14/03/2016.
|
|
3
3
|
*/
|
|
4
|
-
import { intersects1D, overlap1D } from "../math/MathUtils.js";
|
|
5
4
|
import { max2 } from "../math/max2.js";
|
|
6
5
|
import { min2 } from "../math/min2.js";
|
|
7
6
|
import Vector2 from "./Vector2.js";
|
|
7
|
+
import { intersects1D } from "../math/intersects1D.js";
|
|
8
|
+
import { overlap1D } from "../math/overlap1D.js";
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
/**
|
package/core/geom/Vector1.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { assert } from "../assert.js";
|
|
7
7
|
import Signal from "../events/signal/Signal.js";
|
|
8
8
|
import { clamp } from "../math/clamp.js";
|
|
9
|
-
import { computeHashFloat } from "../math/
|
|
9
|
+
import { computeHashFloat } from "../math/hash/computeHashFloat.js";
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
class Vector1 extends Number {
|
package/core/geom/Vector3.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { assert } from "../assert.js";
|
|
7
7
|
import Signal from "../events/signal/Signal.js";
|
|
8
8
|
import { lerp } from "../math/lerp.js";
|
|
9
|
-
import {
|
|
9
|
+
import { EPSILON, epsilonEquals } from "../math/MathUtils.js";
|
|
10
10
|
import { sign } from "../math/sign.js";
|
|
11
11
|
import { v3_dot } from "./v3_dot.js";
|
|
12
12
|
import { v3_length_sqr } from "./v3_length_sqr.js";
|
|
@@ -14,6 +14,7 @@ import { v3_length } from "./v3_length.js";
|
|
|
14
14
|
import { v3_angle_between } from "./v3_angle_between.js";
|
|
15
15
|
import { v3_lerp } from "./v3_lerp.js";
|
|
16
16
|
import { v3_slerp } from "./v3_slerp.js";
|
|
17
|
+
import { computeHashFloat } from "../math/hash/computeHashFloat.js";
|
|
17
18
|
|
|
18
19
|
class Vector3 {
|
|
19
20
|
/**
|
package/core/geom/Vector4.js
CHANGED
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
import { assert } from "../assert.js";
|
|
6
6
|
import { Signal } from "../events/signal/Signal.js";
|
|
7
7
|
import { lerp } from "../math/lerp.js";
|
|
8
|
-
import {
|
|
8
|
+
import { computeHashIntegerArray } from "../collection/array/computeHashIntegerArray.js";
|
|
9
|
+
import { computeHashFloat } from "../math/hash/computeHashFloat.js";
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
*
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
*
|
|
3
3
|
* @param {function} random
|
|
4
|
-
* @param {
|
|
4
|
+
* @param {number[]} result
|
|
5
|
+
* @param {number} result_offset
|
|
5
6
|
*/
|
|
6
|
-
export function randomPointInBox(random, result) {
|
|
7
|
+
export function randomPointInBox(random, result, result_offset) {
|
|
7
8
|
const x = random() - 0.5;
|
|
8
9
|
const y = random() - 0.5;
|
|
9
10
|
const z = random() - 0.5;
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
//write the result
|
|
13
|
+
result[result_offset] = x;
|
|
14
|
+
result[result_offset + 1] = y;
|
|
15
|
+
result[result_offset + 2] = z;
|
|
12
16
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Volumetric sampling method, since sample volume is a point, it simply sets result to origin
|
|
3
3
|
* @param {function} random
|
|
4
|
-
* @param {
|
|
4
|
+
* @param {number[]} result
|
|
5
|
+
* @param {number} destination_offset
|
|
5
6
|
*/
|
|
6
|
-
export function randomPointInPoint(random, result) {
|
|
7
|
-
result
|
|
7
|
+
export function randomPointInPoint(random, result, destination_offset) {
|
|
8
|
+
result[destination_offset] = 0;
|
|
9
|
+
result[destination_offset + 1] = 0;
|
|
10
|
+
result[destination_offset + 2] = 0;
|
|
8
11
|
}
|
|
@@ -4,18 +4,20 @@ import { PI2 } from "../../math/MathUtils.js";
|
|
|
4
4
|
*
|
|
5
5
|
* @see based on python code suggested here: https://stackoverflow.com/questions/5408276/sampling-uniformly-distributed-random-points-inside-a-spherical-volume
|
|
6
6
|
* @param {function} random
|
|
7
|
-
* @param {
|
|
7
|
+
* @param {number[]} result
|
|
8
|
+
* @param {number} result_offset
|
|
8
9
|
*/
|
|
9
|
-
export function randomPointInSphere(random, result) {
|
|
10
|
+
export function randomPointInSphere(random, result, result_offset) {
|
|
10
11
|
const phi = PI2 * random();
|
|
11
12
|
|
|
12
13
|
const cosTheta = random() * 2 - 1;
|
|
13
14
|
|
|
14
|
-
const u = random()
|
|
15
|
+
const u = random();
|
|
15
16
|
|
|
16
17
|
const theta = Math.acos(cosTheta);
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
// compute radius
|
|
20
|
+
const r = Math.cbrt(u) * 0.5;
|
|
19
21
|
|
|
20
22
|
const sinTheta = Math.sin(theta);
|
|
21
23
|
|
|
@@ -27,5 +29,7 @@ export function randomPointInSphere(random, result) {
|
|
|
27
29
|
const z = r * cosTheta;
|
|
28
30
|
|
|
29
31
|
//write the result
|
|
30
|
-
result
|
|
32
|
+
result[result_offset] = x;
|
|
33
|
+
result[result_offset + 1] = y;
|
|
34
|
+
result[result_offset + 2] = z;
|
|
31
35
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
*
|
|
3
3
|
* @param {function} random
|
|
4
|
-
* @param {
|
|
4
|
+
* @param {number[]} result
|
|
5
|
+
* @param {number} result_offset
|
|
5
6
|
*/
|
|
6
|
-
export function randomPointOnBox(random, result) {
|
|
7
|
+
export function randomPointOnBox(random, result, result_offset) {
|
|
7
8
|
//pick a side
|
|
8
9
|
const side = random();
|
|
9
10
|
|
|
@@ -29,5 +30,8 @@ export function randomPointOnBox(random, result) {
|
|
|
29
30
|
z = fixedAxis;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
//write the result
|
|
34
|
+
result[result_offset] = x;
|
|
35
|
+
result[result_offset + 1] = y;
|
|
36
|
+
result[result_offset + 2] = z;
|
|
33
37
|
}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
*
|
|
3
3
|
* @see based on python code suggested here: https://stackoverflow.com/questions/5408276/sampling-uniformly-distributed-random-points-inside-a-spherical-volume
|
|
4
4
|
* @param {function} random
|
|
5
|
-
* @param {
|
|
5
|
+
* @param {number[]} result
|
|
6
|
+
* @param {number} result_offset
|
|
6
7
|
*/
|
|
7
|
-
export function randomPointOnSphere(random, result) {
|
|
8
|
+
export function randomPointOnSphere(random, result, result_offset) {
|
|
8
9
|
const phi = Math.PI * 2 * random();
|
|
9
10
|
|
|
10
11
|
const cosTheta = random() * 2 - 1;
|
|
@@ -23,5 +24,7 @@ export function randomPointOnSphere(random, result) {
|
|
|
23
24
|
const z = r * cosTheta;
|
|
24
25
|
|
|
25
26
|
//write the result
|
|
26
|
-
result
|
|
27
|
+
result[result_offset] = x;
|
|
28
|
+
result[result_offset + 1] = y;
|
|
29
|
+
result[result_offset + 2] = z;
|
|
27
30
|
}
|
package/core/geom/v3_length.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @param {number} x
|
|
4
|
+
* @param {number} y
|
|
5
|
+
* @param {number} z
|
|
6
|
+
* @returns {number}
|
|
7
|
+
*/
|
|
3
8
|
export function v3_length(x, y, z) {
|
|
4
|
-
return Math.
|
|
9
|
+
return Math.hypot(x, y, z);
|
|
5
10
|
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
//
|
|
2
2
|
import { seededRandom } from "../math/random/seededRandom.js";
|
|
3
|
-
import { randomIntegerBetween } from "../math/MathUtils.js";
|
|
4
3
|
import { SquareMatrix } from "./SquareMatrix.js";
|
|
5
4
|
import { DataType } from "../collection/table/DataType.js";
|
|
6
5
|
import { BitSet } from "../binary/BitSet.js";
|
|
7
6
|
import FastBinaryHeap from "../../engine/navigation/grid/FastBinaryHeap.js";
|
|
7
|
+
import { randomIntegerBetween } from "../math/random/randomIntegerBetween.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @template N
|
|
@@ -44,10 +44,10 @@ export function resolvePathByArray(object, parts, missingPropertyHandler) {
|
|
|
44
44
|
} else {
|
|
45
45
|
const options = buildErrorSuggestions(current);
|
|
46
46
|
|
|
47
|
-
throw new Error(`failed to resolve path
|
|
47
|
+
throw new Error(`failed to resolve path [${parts.join(',')}] at part ${i} [${part}]. Existing keys: ${options.join(", ")}`);
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
current = current[part];
|
|
51
51
|
}
|
|
52
52
|
return current;
|
|
53
|
-
}
|
|
53
|
+
}
|
package/core/math/MathUtils.js
CHANGED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { assert } from "../assert.js";
|
|
7
|
-
import { computeStringHash } from "../primitives/strings/computeStringHash.js";
|
|
8
|
-
import { max2 } from "./max2.js";
|
|
9
7
|
import { min2 } from "./min2.js";
|
|
10
8
|
|
|
11
9
|
/**
|
|
@@ -29,105 +27,6 @@ export function makeSequenceLoop(sequence) {
|
|
|
29
27
|
}
|
|
30
28
|
}
|
|
31
29
|
|
|
32
|
-
/**
|
|
33
|
-
* Performs a probabilistic rounding where a fraction is rounded up or down with probability equal to the fraction
|
|
34
|
-
* @param {number} number
|
|
35
|
-
* @param {function} random
|
|
36
|
-
* @returns {int}
|
|
37
|
-
*/
|
|
38
|
-
export function roundFair(number, random) {
|
|
39
|
-
const mantissa = number % 1;
|
|
40
|
-
const roll = random();
|
|
41
|
-
if (roll < mantissa) {
|
|
42
|
-
return Math.ceil(number);
|
|
43
|
-
} else {
|
|
44
|
-
return Math.floor(number);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Returns a random number within a normal distribution (Bell/Gaussian curve)
|
|
50
|
-
* @param {int} [quality=6] controls number of "die rolls" used to approximate curve, more rolls - better approximation but higher cost of computation
|
|
51
|
-
* @param {function():number} random
|
|
52
|
-
* @returns {number} value between 0 and 1 with normal weight at 0.5
|
|
53
|
-
*/
|
|
54
|
-
export function randomGaussian(random, quality = 6) {
|
|
55
|
-
let s = 0;
|
|
56
|
-
|
|
57
|
-
for (let i = 0; i < quality; i++) {
|
|
58
|
-
s += random();
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return s / quality;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* @template T
|
|
66
|
-
* @param {function} random
|
|
67
|
-
* @param {T[]} array
|
|
68
|
-
* @returns {T}
|
|
69
|
-
*/
|
|
70
|
-
export function randomFromArray(random, array) {
|
|
71
|
-
assert.isArray(array, 'array');
|
|
72
|
-
assert.typeOf(random, 'function', 'random');
|
|
73
|
-
|
|
74
|
-
const length = array.length;
|
|
75
|
-
|
|
76
|
-
const i = min2(length - 1, Math.floor(random() * length));
|
|
77
|
-
|
|
78
|
-
return array[i];
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
*
|
|
83
|
-
* @param {function} random
|
|
84
|
-
* @param {number} min
|
|
85
|
-
* @param {number} max
|
|
86
|
-
* @returns {number}
|
|
87
|
-
*/
|
|
88
|
-
export function randomFloatBetween(random, min, max) {
|
|
89
|
-
const span = max - min;
|
|
90
|
-
|
|
91
|
-
const roll = random();
|
|
92
|
-
|
|
93
|
-
return roll * span + min;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Inclusive random between two boundaries, result is integer
|
|
98
|
-
* @param {function} random
|
|
99
|
-
* @param {number} min lower boundary, must be an integer
|
|
100
|
-
* @param {number} max upper boundary, must be an integer
|
|
101
|
-
* @returns {number}
|
|
102
|
-
*/
|
|
103
|
-
export function randomIntegerBetween(random, min, max) {
|
|
104
|
-
const span = max - min;
|
|
105
|
-
|
|
106
|
-
const roll = random();
|
|
107
|
-
|
|
108
|
-
return Math.round(roll * span) + min;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
*
|
|
113
|
-
* @param {function():number} random returns a number between 0 and 1
|
|
114
|
-
* @param {number} min
|
|
115
|
-
* @param {number} max
|
|
116
|
-
* @returns {function():number} returns number between min and max
|
|
117
|
-
*/
|
|
118
|
-
export function makeRangedRandom(random, min, max) {
|
|
119
|
-
|
|
120
|
-
if (min === 0 && max === 1) {
|
|
121
|
-
//input already returns values in correct range
|
|
122
|
-
return random;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const scale = max - min;
|
|
126
|
-
return function () {
|
|
127
|
-
return random() * scale + min;
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
|
|
131
30
|
/**
|
|
132
31
|
* Compute lowest positive integer divisor of a given "product" value
|
|
133
32
|
* @param {number} product
|
|
@@ -243,148 +142,6 @@ function bezierCurve(t, p0, p1, p2, p3) {
|
|
|
243
142
|
}
|
|
244
143
|
|
|
245
144
|
|
|
246
|
-
/**
|
|
247
|
-
*
|
|
248
|
-
* @param {number} v
|
|
249
|
-
* @returns {number}
|
|
250
|
-
*/
|
|
251
|
-
export function computeHashFloat(v) {
|
|
252
|
-
//we break the number up into fractional and whole parts
|
|
253
|
-
const fraction = v % 1;
|
|
254
|
-
|
|
255
|
-
const whole = v | 0;
|
|
256
|
-
|
|
257
|
-
//fractional part is scaled up into int32 range, this inexact method, as it will produce 0 hash for values below a certain threshold
|
|
258
|
-
const fractionHash = fraction * 1367130550;
|
|
259
|
-
|
|
260
|
-
//take XOR of both parts
|
|
261
|
-
return fractionHash ^ whole;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
*
|
|
266
|
-
* @param {number[]|Float32Array|Float64Array} values
|
|
267
|
-
* @param {number} min
|
|
268
|
-
* @param {number} max
|
|
269
|
-
*/
|
|
270
|
-
export function computeHashFloatArray(values, min, max) {
|
|
271
|
-
const dataLength = values.length;
|
|
272
|
-
|
|
273
|
-
const dataRange = max - min;
|
|
274
|
-
|
|
275
|
-
/*
|
|
276
|
-
hash min and max
|
|
277
|
-
*/
|
|
278
|
-
const minHash = computeHashFloat(min);
|
|
279
|
-
const maxHash = computeHashFloat(min);
|
|
280
|
-
|
|
281
|
-
let hash = ((minHash << 5) - minHash) + maxHash;
|
|
282
|
-
|
|
283
|
-
for (let i = 0; i < dataLength; i++) {
|
|
284
|
-
const singleValue = values[i];
|
|
285
|
-
//normalize value
|
|
286
|
-
const valueNormalized = (singleValue - min) / dataRange;
|
|
287
|
-
//scale value to integer range
|
|
288
|
-
const integerValue = valueNormalized * 4294967295;
|
|
289
|
-
|
|
290
|
-
hash = ((hash << 5) - hash) + integerValue;
|
|
291
|
-
hash |= 0; // Convert to 32bit integer
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
return hash;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* @template T
|
|
299
|
-
* @param {T[]} array
|
|
300
|
-
* @param {function(T):number} elementHashFunction
|
|
301
|
-
*/
|
|
302
|
-
export function computeHashArray(array, elementHashFunction) {
|
|
303
|
-
|
|
304
|
-
const numArguments = array.length;
|
|
305
|
-
let hash = numArguments;
|
|
306
|
-
|
|
307
|
-
for (let i = 0; i < numArguments; i++) {
|
|
308
|
-
|
|
309
|
-
const singleValue = array[i];
|
|
310
|
-
|
|
311
|
-
const elementHash = elementHashFunction(singleValue);
|
|
312
|
-
|
|
313
|
-
hash = ((hash << 5) - hash) + elementHash;
|
|
314
|
-
hash |= 0; // Convert to 32bit integer
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
return hash;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Computes hash on integer values
|
|
322
|
-
* @param {...number} value
|
|
323
|
-
* @returns {number}
|
|
324
|
-
*/
|
|
325
|
-
export function computeHashIntegerArray(value) {
|
|
326
|
-
let hash = 0;
|
|
327
|
-
const numArguments = arguments.length;
|
|
328
|
-
for (let i = 0; i < numArguments; i++) {
|
|
329
|
-
const singleValue = arguments[i];
|
|
330
|
-
hash = ((hash << 5) - hash) + singleValue;
|
|
331
|
-
hash |= 0; // Convert to 32bit integer
|
|
332
|
-
}
|
|
333
|
-
return hash;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Recursively computes object hash
|
|
338
|
-
* @param {Object} value
|
|
339
|
-
* @param {number} [depth=3] Maximum recursion depth
|
|
340
|
-
* @returns {number}
|
|
341
|
-
*/
|
|
342
|
-
export function computeObjectHash(value, depth = 3) {
|
|
343
|
-
if (value === undefined) {
|
|
344
|
-
return 1;
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
if (value === null) {
|
|
348
|
-
return 2;
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
let hash = 0;
|
|
352
|
-
|
|
353
|
-
for (let p in value) {
|
|
354
|
-
|
|
355
|
-
hash = ((hash << 5) - hash) + computeStringHash(p);
|
|
356
|
-
|
|
357
|
-
const pValue = value[p];
|
|
358
|
-
|
|
359
|
-
const pType = typeof pValue;
|
|
360
|
-
|
|
361
|
-
let pHash;
|
|
362
|
-
if (pType === "string") {
|
|
363
|
-
pHash = computeStringHash(pValue);
|
|
364
|
-
} else if (pType === "number") {
|
|
365
|
-
pHash = computeHashFloat(pValue);
|
|
366
|
-
} else if (pType === "boolean") {
|
|
367
|
-
pHash = pValue ? 1 : 0;
|
|
368
|
-
} else if (pType === "object") {
|
|
369
|
-
|
|
370
|
-
if (depth <= 0) {
|
|
371
|
-
pHash = 3;
|
|
372
|
-
} else {
|
|
373
|
-
pHash = computeObjectHash(pValue, depth - 1);
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
} else {
|
|
377
|
-
pHash = 0;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
hash = ((hash << 5) - hash) + pHash;
|
|
381
|
-
|
|
382
|
-
hash |= 0; // Convert to 32bit integer
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
return hash;
|
|
386
|
-
}
|
|
387
|
-
|
|
388
145
|
/**
|
|
389
146
|
*
|
|
390
147
|
* @param {number} a
|
|
@@ -410,54 +167,6 @@ export function computeGreatestCommonDivisor(a, b) {
|
|
|
410
167
|
return result;
|
|
411
168
|
}
|
|
412
169
|
|
|
413
|
-
/**
|
|
414
|
-
* Exclusive test, boundaries are not included in positive test
|
|
415
|
-
* @param {Number} value
|
|
416
|
-
* @param {Number} v0
|
|
417
|
-
* @param {Number} v1
|
|
418
|
-
* @returns {boolean}
|
|
419
|
-
*/
|
|
420
|
-
export function isValueBetween(value, v0, v1) {
|
|
421
|
-
return (v0 > value && value > v1) || (v1 > value && value > v0);
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/**
|
|
425
|
-
* Inclusive test, boundaries are included in positive test
|
|
426
|
-
* @param {Number} value
|
|
427
|
-
* @param {Number} v0
|
|
428
|
-
* @param {Number} v1
|
|
429
|
-
* @returns {boolean}
|
|
430
|
-
*/
|
|
431
|
-
export function isValueBetweenInclusive(value, v0, v1) {
|
|
432
|
-
return (v0 >= value && value >= v1) || (v1 >= value && value >= v0);
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
/**
|
|
437
|
-
* Return solutions for quadratic
|
|
438
|
-
* @param {number} a
|
|
439
|
-
* @param {number} b
|
|
440
|
-
* @param {number} c
|
|
441
|
-
* @returns {number[]|null}
|
|
442
|
-
*/
|
|
443
|
-
export function solveQuadratic(a, b, c) {
|
|
444
|
-
let sol = null;
|
|
445
|
-
if (Math.abs(a) < 1e-6) {
|
|
446
|
-
if (Math.abs(b) < 1e-6) {
|
|
447
|
-
sol = Math.abs(c) < 1e-6 ? [0, 0] : null;
|
|
448
|
-
} else {
|
|
449
|
-
sol = [-c / b, -c / b];
|
|
450
|
-
}
|
|
451
|
-
} else {
|
|
452
|
-
let disc = b * b - 4 * a * c;
|
|
453
|
-
if (disc >= 0) {
|
|
454
|
-
disc = Math.sqrt(disc);
|
|
455
|
-
a = 2 * a;
|
|
456
|
-
sol = [(-b - disc) / a, (-b + disc) / a];
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
return sol;
|
|
460
|
-
}
|
|
461
170
|
|
|
462
171
|
/**
|
|
463
172
|
*
|
|
@@ -492,60 +201,6 @@ export function epsilonEquals(a, b, tolerance) {
|
|
|
492
201
|
return Math.abs(a - b) <= tolerance;
|
|
493
202
|
}
|
|
494
203
|
|
|
495
|
-
/**
|
|
496
|
-
* Returns true if two 1D lines intersect, touch is treated as intersection
|
|
497
|
-
* Parameters are assumed to be ordered, a1 >= a0, b1 >= b0
|
|
498
|
-
* @param {Number} a0
|
|
499
|
-
* @param {Number} a1
|
|
500
|
-
* @param {Number} b0
|
|
501
|
-
* @param {Number} b1
|
|
502
|
-
* @returns {boolean}
|
|
503
|
-
*/
|
|
504
|
-
export function intersects1D(a0, a1, b0, b1) {
|
|
505
|
-
assert.equal(typeof a0, "number");
|
|
506
|
-
assert.equal(typeof a1, "number");
|
|
507
|
-
assert.equal(typeof b0, "number");
|
|
508
|
-
assert.equal(typeof b1, "number");
|
|
509
|
-
|
|
510
|
-
return a1 >= b0 && b1 >= a0;
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
/**
|
|
514
|
-
* Returns true if two 1D lines overlap, touch is not considered overlap
|
|
515
|
-
* Parameters are assumed to be ordered, a1 > a0, b1 > b0
|
|
516
|
-
* @param {Number} a0
|
|
517
|
-
* @param {Number} a1
|
|
518
|
-
* @param {Number} b0
|
|
519
|
-
* @param {Number} b1
|
|
520
|
-
* @returns {boolean}
|
|
521
|
-
*/
|
|
522
|
-
export function overlap1D(a0, a1, b0, b1) {
|
|
523
|
-
assert.equal(typeof a0, "number");
|
|
524
|
-
assert.equal(typeof a1, "number");
|
|
525
|
-
assert.equal(typeof b0, "number");
|
|
526
|
-
assert.equal(typeof b1, "number");
|
|
527
|
-
|
|
528
|
-
return a1 > b0 && b1 > a0;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
/**
|
|
532
|
-
* Returns a number representing overlap distance between two 1D line segments.
|
|
533
|
-
* Positive number indicates overlap, negative number indicates that segments do not overlap; 0 indicates that segments are touching.
|
|
534
|
-
* @param {Number} a0
|
|
535
|
-
* @param {Number} a1
|
|
536
|
-
* @param {Number} b0
|
|
537
|
-
* @param {Number} b1
|
|
538
|
-
* @returns {number}
|
|
539
|
-
*/
|
|
540
|
-
export function separation1D(a0, a1, b0, b1) {
|
|
541
|
-
assert.equal(typeof a0, "number");
|
|
542
|
-
assert.equal(typeof a1, "number");
|
|
543
|
-
assert.equal(typeof b0, "number");
|
|
544
|
-
assert.equal(typeof b1, "number");
|
|
545
|
-
|
|
546
|
-
return min2(a1, b1) - max2(a0, b0);
|
|
547
|
-
}
|
|
548
|
-
|
|
549
204
|
/**
|
|
550
205
|
* Assuming the input is an N-dimension vector, normalizes the vector to magnitude of 1
|
|
551
206
|
* @param {number[]|Float32Array} result
|
|
@@ -590,12 +245,3 @@ export const PI_HALF = Math.PI / 2;
|
|
|
590
245
|
*/
|
|
591
246
|
export const EPSILON = 0.000001;
|
|
592
247
|
|
|
593
|
-
/**
|
|
594
|
-
*
|
|
595
|
-
* @param {number} sigma
|
|
596
|
-
* @param {number} v
|
|
597
|
-
* @returns {number}
|
|
598
|
-
*/
|
|
599
|
-
export function gaussian(sigma, v) {
|
|
600
|
-
return Math.exp(-(v * v) / (2 * sigma * sigma));
|
|
601
|
-
}
|
|
@@ -2,12 +2,18 @@ import { clamp } from "./clamp.js";
|
|
|
2
2
|
import { copysign } from "./copysign.js";
|
|
3
3
|
import { inverseLerp } from "./inverseLerp.js";
|
|
4
4
|
import { lerp } from "./lerp.js";
|
|
5
|
-
import {
|
|
5
|
+
import { computeWholeDivisorLow, cubicCurve, makeCubicCurve, quadraticCurve } from "./MathUtils.js";
|
|
6
6
|
import { max2 } from "./max2.js";
|
|
7
7
|
import { max3 } from "./max3.js";
|
|
8
8
|
import { min2 } from "./min2.js";
|
|
9
9
|
import { min3 } from "./min3.js";
|
|
10
10
|
import { sign } from "./sign.js";
|
|
11
|
+
import { isValueBetween } from "./isValueBetween.js";
|
|
12
|
+
import { isValueBetweenInclusive } from "./isValueBetweenInclusive.js";
|
|
13
|
+
import { solveQuadratic } from "./solveQuadratic.js";
|
|
14
|
+
import { overlap1D } from "./overlap1D.js";
|
|
15
|
+
import { computeHashFloat } from "./hash/computeHashFloat.js";
|
|
16
|
+
import { computeHashFloatArray } from "./hash/computeHashFloatArray.js";
|
|
11
17
|
|
|
12
18
|
test('min2', () => {
|
|
13
19
|
expect(min2(0, 0)).toBe(0);
|