@itwin/core-geometry 5.1.5 → 5.1.6
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/CHANGELOG.md +6 -1
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/geometry4d/Map4d.js.map +1 -1
- package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
- package/lib/cjs/geometry4d/MomentData.js.map +1 -1
- package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/cjs/geometry4d/Point4d.js.map +1 -1
- package/lib/cjs/numerics/BandedSystem.js.map +1 -1
- package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
- package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
- package/lib/cjs/numerics/Complex.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/SmallSystem.js.map +1 -1
- package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js.map +1 -1
- package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
- package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/cjs/serialization/DeepCompare.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
- package/lib/esm/Constant.js.map +1 -1
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/esm/bspline/BSplineSurface.js.map +1 -1
- package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
- package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
- package/lib/esm/clipping/ClipPlane.js.map +1 -1
- package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
- package/lib/esm/clipping/ClipUtils.js.map +1 -1
- package/lib/esm/clipping/ClipVector.js.map +1 -1
- package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/esm/core-geometry.js.map +1 -1
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurve.js.map +1 -1
- package/lib/esm/curve/CurveExtendMode.js.map +1 -1
- package/lib/esm/curve/CurveFactory.js.map +1 -1
- package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
- package/lib/esm/curve/CurveOps.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/CurveProcessor.js.map +1 -1
- package/lib/esm/curve/CurveTypes.js.map +1 -1
- package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/esm/curve/GeometryQuery.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/Loop.js.map +1 -1
- package/lib/esm/curve/OffsetOptions.js.map +1 -1
- package/lib/esm/curve/ParityRegion.js.map +1 -1
- package/lib/esm/curve/Path.js.map +1 -1
- package/lib/esm/curve/PointString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/esm/curve/Query/InOutTests.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/StrokeOptions.js.map +1 -1
- package/lib/esm/curve/UnionRegion.js.map +1 -1
- package/lib/esm/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
- package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/esm/geometry3d/Plane3d.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
- package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
- package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
- package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray2d.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/esm/geometry3d/Segment1d.js.map +1 -1
- package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/esm/geometry3d/XYZProps.js.map +1 -1
- package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/esm/geometry4d/Map4d.js.map +1 -1
- package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
- package/lib/esm/geometry4d/MomentData.js.map +1 -1
- package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/esm/geometry4d/Point4d.js.map +1 -1
- package/lib/esm/numerics/BandedSystem.js.map +1 -1
- package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
- package/lib/esm/numerics/ClusterableArray.js.map +1 -1
- package/lib/esm/numerics/Complex.js.map +1 -1
- package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/esm/numerics/Newton.js.map +1 -1
- package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
- package/lib/esm/numerics/PolarData.js.map +1 -1
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/numerics/Quadrature.js.map +1 -1
- package/lib/esm/numerics/Range1dArray.js.map +1 -1
- package/lib/esm/numerics/SmallSystem.js.map +1 -1
- package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/esm/numerics/UnionFind.js.map +1 -1
- package/lib/esm/numerics/UsageSums.js.map +1 -1
- package/lib/esm/polyface/AuxData.js.map +1 -1
- package/lib/esm/polyface/BoxTopology.js.map +1 -1
- package/lib/esm/polyface/FacetFaceData.js.map +1 -1
- package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/esm/polyface/FacetOrientation.js.map +1 -1
- package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
- package/lib/esm/polyface/PolyfaceData.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/polyface/RangeLengthData.js.map +1 -1
- package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
- package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
- package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
- package/lib/esm/serialization/BGFBReader.js.map +1 -1
- package/lib/esm/serialization/BGFBWriter.js.map +1 -1
- package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/esm/serialization/DeepCompare.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
- package/lib/esm/solid/Box.js.map +1 -1
- package/lib/esm/solid/Cone.js.map +1 -1
- package/lib/esm/solid/LinearSweep.js.map +1 -1
- package/lib/esm/solid/RotationalSweep.js.map +1 -1
- package/lib/esm/solid/RuledSweep.js.map +1 -1
- package/lib/esm/solid/SolidPrimitive.js.map +1 -1
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/SweepContour.js.map +1 -1
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/ChainMerge.js.map +1 -1
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/esm/topology/MaskManager.js.map +1 -1
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/RegularizeFace.js.map +1 -1
- package/lib/esm/topology/SignedDataSummary.js.map +1 -1
- package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Quadrature.js","sourceRoot":"","sources":["../../../src/numerics/Quadrature.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Geometry } from \"../Geometry\";\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\n/** Support class for quadrature -- approximate integrals by summing weighted function values.\r\n * These are filled with x and weight for quadrature between xA and xB\r\n *\r\n * Since quadrature is done in side tight loops, these methods are structured for minimum object\r\n * allocation.\r\n * For methods names setupGauss<N> (where N is a smallish integer), the CALLER creates arrays xMapped and wMapped\r\n * The method installs particular x and weight values.\r\n * @internal\r\n */\r\nexport class Quadrature {\r\n /** x value for 1 point gauss rule in 0..1 interval */\r\n public static readonly gaussX1Interval01 = new Float64Array([0.5]);\r\n /** weight for 1 point gauss rule in 0..1 interval */\r\n public static readonly gaussW1Interval01 = new Float64Array([1.0]);\r\n\r\n /** x value for 2 point gauss rule in 0..1 interval */\r\n public static readonly gaussX2Interval01 = new Float64Array([0.21132486540518708, 0.7886751345948129]);\r\n /** weight for 2 point gauss rule in 0..1 interval */\r\n public static readonly gaussW2Interval01 = new Float64Array([0.5, 0.5]);\r\n\r\n /** x value for 3 point gauss rule in 0..1 interval */\r\n public static readonly gaussX3Interval01 = new Float64Array([0.1127016653792583, 0.5, 0.8872983346207417]);\r\n /** weight for 3 point gauss rule in 0..1 interval */\r\n public static readonly gaussW3Interval01 = new Float64Array([0.2777777777777778, 0.4444444444444444, 0.2777777777777778]);\r\n\r\n /** x value for 4 point gauss rule in 0..1 interval */\r\n public static readonly gaussX4Interval01 = new Float64Array([0.06943184420297371, 0.33000947820757187, 0.6699905217924281, 0.9305681557970262]);\r\n /** weight for 4 point gauss rule in 0..1 interval */\r\n public static readonly gaussW4Interval01 = new Float64Array([0.17392742256872692, 0.3260725774312731, 0.3260725774312731, 0.17392742256872692]);\r\n\r\n /** x value for 5 point gauss rule in 0..1 interval */\r\n public static readonly gaussX5Interval01 = new Float64Array([0.04691007703066802, 0.23076534494715845, 0.5, 0.7692346550528415, 0.9530899229693319]);\r\n /** weight for 5 point gauss rule in 0..1 interval */\r\n public static readonly gaussW5Interval01 = new Float64Array([0.11846344252809454, 0.23931433524968324, 0.28444444444444444, 0.23931433524968324, 0.11846344252809454]);\r\n\r\n /**\r\n * Given points and weights in a reference interval (usually 0 to 1):\r\n *\r\n * * map each xRef[i] to xA + h * xRef[i];\r\n * * scale each weight wRef[i] to h * wRef[i]\r\n * * all arrays are assumed to have xRef.length entries.\r\n * * the return value is xRef.length\r\n * @param xA beginning of target interval\r\n * @param h length of target interval\r\n * @param xRef x coordinates in reference interval\r\n * @param wRef weights for integration in the reference interval\r\n * @param xMapped x coordinates to evaluate integrands\r\n * @param wMapped weights for evaluated integrands\r\n */\r\n public static mapWeights(xA: number, h: number, xRef: Float64Array, wRef: Float64Array, xMapped: Float64Array, wMapped: Float64Array): number {\r\n const n = xRef.length;\r\n for (let i = 0; i < n; i++) {\r\n xMapped[i] = xA + h * xRef[i];\r\n wMapped[i] = h * wRef[i];\r\n }\r\n return n;\r\n }\r\n\r\n /** Install 1 (ONE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss1(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX1Interval01, Quadrature.gaussW1Interval01, xMapped, wMapped);\r\n }\r\n\r\n /** Install 2 (TWO) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss2(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX2Interval01, Quadrature.gaussW2Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const dx = h / Math.sqrt(3);\r\n xMapped[0] = x0 - dx; xMapped[1] = x0 + dx;\r\n wMapped[0] = wMapped[1] = h;\r\n */\r\n }\r\n /** Install 3 (THREE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss3(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX3Interval01, Quadrature.gaussW3Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const a = Math.sqrt(0.6);\r\n const b = h * 5.0 / 9.0;\r\n const dx = a * h;\r\n xMapped[0] = x0 - dx; xMapped[1] = x0; xMapped[2] = x0 + dx;\r\n wMapped[0] = wMapped[2] = b;\r\n wMapped[1] = h * 8.0 / 9.0;\r\n return 3;\r\n */\r\n }\r\n\r\n /** Install 5 (FIVE) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss5(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX5Interval01, Quadrature.gaussW5Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\n const x0 = 0.5 * (xA + xB);\r\n const h = 0.5 * (xB - xA);\r\n const q = 2.0 * Math.sqrt(10.0 / 7.0);\r\n const b = 13.0 * Math.sqrt(70.0);\r\n const a1 = h * Math.sqrt(5.0 - q) / 3.0;\r\n const a2 = h * Math.sqrt(5.0 + q) / 3.0;\r\n const w1 = h * (322.0 + b) / 900.0;\r\n const w2 = h * (322.0 - b) / 900;\r\n const w0 = h * 128.0 / 225.0;\r\n xMapped[0] = x0 - a2; xMapped[1] = x0 - a1; xMapped[2] = x0; xMapped[3] = x0 + a1; xMapped[4] = x0 + a2;\r\n wMapped[0] = w2; wMapped[1] = w1; wMapped[2] = w0; wMapped[3] = w1; wMapped[4] = w2;\r\n return 5;\r\n */\r\n }\r\n\r\n /** Install 4 (FOUR) x and weight values for quadrature from xA to xB. */\r\n public static setupGauss4(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\r\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX4Interval01, Quadrature.gaussW4Interval01, xMapped, wMapped);\r\n /* // exact formulas for interval xA..xB:\r\nconst x0 = 0.5 * (xA + xB);\r\nconst h = 0.5 * (xB - xA);\r\nconst q = 2.0 * Math.sqrt(6.0 / 5.0);\r\nconst r = Math.sqrt(30.0);\r\nconst a1 = h * Math.sqrt((3 - q) / 7.0);\r\nconst w1 = h * (18.0 + r) / 36.0;\r\nconst a2 = h * Math.sqrt((3 + q) / 7.0);\r\nconst w2 = h * (18.0 - r) / 36.0;\r\nxMapped[0] = x0 - a2; xMapped[1] = x0 - a1; xMapped[2] = x0 + a1; xMapped[3] = x0 + a2;\r\nwMapped[0] = w2; wMapped[1] = w1; wMapped[2] = w1; wMapped[3] = w2;\r\nreturn 4;\r\n*/\r\n }\r\n /** Sum function values with given weights and x values. */\r\n public static sum1(\r\n xx: Float64Array,\r\n ww: Float64Array,\r\n n: number,\r\n f: (x: number) => number): number {\r\n let sum = 0;\r\n for (let i = 0; i < n; i++)sum += ww[i] * f(xx[i]);\r\n return sum;\r\n }\r\n /**\r\n * Do a Guass quadrature integral for a (number)=>number function over an interval, with caller specified sub-interval count and\r\n * @param x0 start of overall interval\r\n * @param x1 end of overall interval\r\n * @param f function to evaluate\r\n * @param numInterval number of internal intervals\r\n * @param numGauss number of gauss points. must be supported by GaussMapper, i.e. 1,2,3,4,5\r\n */\r\n public static doGaussIntegral(x0: number, x1: number, f: (x: number) => number, numInterval: number, numGauss: number = 5) {\r\n const mapper = new GaussMapper(numGauss);\r\n if (numInterval < 1)\r\n numInterval = 1;\r\n const df = 1.0 / numInterval;\r\n let sum = 0;\r\n for (let i = 1; i <= numInterval; i++) {\r\n const xA = Geometry.interpolate(x0, (i - 1) * df, x1);\r\n const xB = i === numInterval ? x1 : Geometry.interpolate(x0, (i) * df, x1);\r\n const n = mapper.mapXAndW(xA, xB);\r\n for (let k = 0; k < n; k++) {\r\n sum += mapper.gaussW[k] * f(mapper.gaussX[k]);\r\n }\r\n }\r\n return sum;\r\n }\r\n}\r\n\r\n/**\r\n * This class carries public members as needed for users to have gauss points that are used\r\n * in the callers loops.\r\n * @internal\r\n */\r\nexport class GaussMapper {\r\n /** x values for integration */\r\n public gaussX: Float64Array;\r\n /** weights for integration */\r\n public gaussW: Float64Array;\r\n /** function to be called (at each interval) to map integration values */\r\n public mapXAndWFunction: (xA: number, xB: number, xx: Float64Array, ww: Float64Array) => number;\r\n /** Execute the mapXAndWFunction to set up arrays for integration from xA to xB */\r\n public mapXAndW(xA: number, xB: number): number {\r\n return this.mapXAndWFunction(xA, xB, this.gaussX, this.gaussW);\r\n }\r\n /** setup gauss arrays.\r\n * * Number of gauss points must be 1 to 5 (inclusive)\r\n * @param numGauss requested number of gauss points.\r\n */\r\n public constructor(numGaussPoints: number) {\r\n const maxGauss = 7; // (As of Nov 2 2018, 7 is a fluffy over-allocation-- the quadrature class only handles up to 5.)\r\n this.gaussX = new Float64Array(maxGauss);\r\n this.gaussW = new Float64Array(maxGauss);\r\n // This sets the number of gauss points. This integrates exactly for polynomials of (degree 2*numGauss - 1).\r\n if (numGaussPoints > 5 || numGaussPoints < 1)\r\n numGaussPoints = 5;\r\n switch (numGaussPoints) {\r\n case 1: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss1(xA, xB, xMapped, wMapped); break;\r\n case 2: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss2(xA, xB, xMapped, wMapped); break;\r\n case 3: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss3(xA, xB, xMapped, wMapped); break;\r\n case 4: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss4(xA, xB, xMapped, wMapped); break;\r\n default: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss5(xA, xB, xMapped, wMapped); break;\r\n }\r\n\r\n }\r\n}\r\n// someday .... http://www.holoborodko.com/pavel/numerical-methods/numerical-integration/overlapped-newton-cotes-quadratures/\r\n"]}
|
|
1
|
+
{"version":3,"file":"Quadrature.js","sourceRoot":"","sources":["../../../src/numerics/Quadrature.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Geometry } from \"../Geometry\";\n\n/** @packageDocumentation\n * @module Numerics\n */\n\n/** Support class for quadrature -- approximate integrals by summing weighted function values.\n * These are filled with x and weight for quadrature between xA and xB\n *\n * Since quadrature is done in side tight loops, these methods are structured for minimum object\n * allocation.\n * For methods names setupGauss<N> (where N is a smallish integer), the CALLER creates arrays xMapped and wMapped\n * The method installs particular x and weight values.\n * @internal\n */\nexport class Quadrature {\n /** x value for 1 point gauss rule in 0..1 interval */\n public static readonly gaussX1Interval01 = new Float64Array([0.5]);\n /** weight for 1 point gauss rule in 0..1 interval */\n public static readonly gaussW1Interval01 = new Float64Array([1.0]);\n\n /** x value for 2 point gauss rule in 0..1 interval */\n public static readonly gaussX2Interval01 = new Float64Array([0.21132486540518708, 0.7886751345948129]);\n /** weight for 2 point gauss rule in 0..1 interval */\n public static readonly gaussW2Interval01 = new Float64Array([0.5, 0.5]);\n\n /** x value for 3 point gauss rule in 0..1 interval */\n public static readonly gaussX3Interval01 = new Float64Array([0.1127016653792583, 0.5, 0.8872983346207417]);\n /** weight for 3 point gauss rule in 0..1 interval */\n public static readonly gaussW3Interval01 = new Float64Array([0.2777777777777778, 0.4444444444444444, 0.2777777777777778]);\n\n /** x value for 4 point gauss rule in 0..1 interval */\n public static readonly gaussX4Interval01 = new Float64Array([0.06943184420297371, 0.33000947820757187, 0.6699905217924281, 0.9305681557970262]);\n /** weight for 4 point gauss rule in 0..1 interval */\n public static readonly gaussW4Interval01 = new Float64Array([0.17392742256872692, 0.3260725774312731, 0.3260725774312731, 0.17392742256872692]);\n\n /** x value for 5 point gauss rule in 0..1 interval */\n public static readonly gaussX5Interval01 = new Float64Array([0.04691007703066802, 0.23076534494715845, 0.5, 0.7692346550528415, 0.9530899229693319]);\n /** weight for 5 point gauss rule in 0..1 interval */\n public static readonly gaussW5Interval01 = new Float64Array([0.11846344252809454, 0.23931433524968324, 0.28444444444444444, 0.23931433524968324, 0.11846344252809454]);\n\n /**\n * Given points and weights in a reference interval (usually 0 to 1):\n *\n * * map each xRef[i] to xA + h * xRef[i];\n * * scale each weight wRef[i] to h * wRef[i]\n * * all arrays are assumed to have xRef.length entries.\n * * the return value is xRef.length\n * @param xA beginning of target interval\n * @param h length of target interval\n * @param xRef x coordinates in reference interval\n * @param wRef weights for integration in the reference interval\n * @param xMapped x coordinates to evaluate integrands\n * @param wMapped weights for evaluated integrands\n */\n public static mapWeights(xA: number, h: number, xRef: Float64Array, wRef: Float64Array, xMapped: Float64Array, wMapped: Float64Array): number {\n const n = xRef.length;\n for (let i = 0; i < n; i++) {\n xMapped[i] = xA + h * xRef[i];\n wMapped[i] = h * wRef[i];\n }\n return n;\n }\n\n /** Install 1 (ONE) x and weight values for quadrature from xA to xB. */\n public static setupGauss1(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX1Interval01, Quadrature.gaussW1Interval01, xMapped, wMapped);\n }\n\n /** Install 2 (TWO) x and weight values for quadrature from xA to xB. */\n public static setupGauss2(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX2Interval01, Quadrature.gaussW2Interval01, xMapped, wMapped);\n /* // exact formulas for interval xA..xB:\n const x0 = 0.5 * (xA + xB);\n const h = 0.5 * (xB - xA);\n const dx = h / Math.sqrt(3);\n xMapped[0] = x0 - dx; xMapped[1] = x0 + dx;\n wMapped[0] = wMapped[1] = h;\n */\n }\n /** Install 3 (THREE) x and weight values for quadrature from xA to xB. */\n public static setupGauss3(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX3Interval01, Quadrature.gaussW3Interval01, xMapped, wMapped);\n /* // exact formulas for interval xA..xB:\n const x0 = 0.5 * (xA + xB);\n const h = 0.5 * (xB - xA);\n const a = Math.sqrt(0.6);\n const b = h * 5.0 / 9.0;\n const dx = a * h;\n xMapped[0] = x0 - dx; xMapped[1] = x0; xMapped[2] = x0 + dx;\n wMapped[0] = wMapped[2] = b;\n wMapped[1] = h * 8.0 / 9.0;\n return 3;\n */\n }\n\n /** Install 5 (FIVE) x and weight values for quadrature from xA to xB. */\n public static setupGauss5(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX5Interval01, Quadrature.gaussW5Interval01, xMapped, wMapped);\n /* // exact formulas for interval xA..xB:\n const x0 = 0.5 * (xA + xB);\n const h = 0.5 * (xB - xA);\n const q = 2.0 * Math.sqrt(10.0 / 7.0);\n const b = 13.0 * Math.sqrt(70.0);\n const a1 = h * Math.sqrt(5.0 - q) / 3.0;\n const a2 = h * Math.sqrt(5.0 + q) / 3.0;\n const w1 = h * (322.0 + b) / 900.0;\n const w2 = h * (322.0 - b) / 900;\n const w0 = h * 128.0 / 225.0;\n xMapped[0] = x0 - a2; xMapped[1] = x0 - a1; xMapped[2] = x0; xMapped[3] = x0 + a1; xMapped[4] = x0 + a2;\n wMapped[0] = w2; wMapped[1] = w1; wMapped[2] = w0; wMapped[3] = w1; wMapped[4] = w2;\n return 5;\n */\n }\n\n /** Install 4 (FOUR) x and weight values for quadrature from xA to xB. */\n public static setupGauss4(xA: number, xB: number, xMapped: Float64Array, wMapped: Float64Array): number {\n return Quadrature.mapWeights(xA, xB - xA, Quadrature.gaussX4Interval01, Quadrature.gaussW4Interval01, xMapped, wMapped);\n /* // exact formulas for interval xA..xB:\nconst x0 = 0.5 * (xA + xB);\nconst h = 0.5 * (xB - xA);\nconst q = 2.0 * Math.sqrt(6.0 / 5.0);\nconst r = Math.sqrt(30.0);\nconst a1 = h * Math.sqrt((3 - q) / 7.0);\nconst w1 = h * (18.0 + r) / 36.0;\nconst a2 = h * Math.sqrt((3 + q) / 7.0);\nconst w2 = h * (18.0 - r) / 36.0;\nxMapped[0] = x0 - a2; xMapped[1] = x0 - a1; xMapped[2] = x0 + a1; xMapped[3] = x0 + a2;\nwMapped[0] = w2; wMapped[1] = w1; wMapped[2] = w1; wMapped[3] = w2;\nreturn 4;\n*/\n }\n /** Sum function values with given weights and x values. */\n public static sum1(\n xx: Float64Array,\n ww: Float64Array,\n n: number,\n f: (x: number) => number): number {\n let sum = 0;\n for (let i = 0; i < n; i++)sum += ww[i] * f(xx[i]);\n return sum;\n }\n /**\n * Do a Guass quadrature integral for a (number)=>number function over an interval, with caller specified sub-interval count and\n * @param x0 start of overall interval\n * @param x1 end of overall interval\n * @param f function to evaluate\n * @param numInterval number of internal intervals\n * @param numGauss number of gauss points. must be supported by GaussMapper, i.e. 1,2,3,4,5\n */\n public static doGaussIntegral(x0: number, x1: number, f: (x: number) => number, numInterval: number, numGauss: number = 5) {\n const mapper = new GaussMapper(numGauss);\n if (numInterval < 1)\n numInterval = 1;\n const df = 1.0 / numInterval;\n let sum = 0;\n for (let i = 1; i <= numInterval; i++) {\n const xA = Geometry.interpolate(x0, (i - 1) * df, x1);\n const xB = i === numInterval ? x1 : Geometry.interpolate(x0, (i) * df, x1);\n const n = mapper.mapXAndW(xA, xB);\n for (let k = 0; k < n; k++) {\n sum += mapper.gaussW[k] * f(mapper.gaussX[k]);\n }\n }\n return sum;\n }\n}\n\n/**\n * This class carries public members as needed for users to have gauss points that are used\n * in the callers loops.\n * @internal\n */\nexport class GaussMapper {\n /** x values for integration */\n public gaussX: Float64Array;\n /** weights for integration */\n public gaussW: Float64Array;\n /** function to be called (at each interval) to map integration values */\n public mapXAndWFunction: (xA: number, xB: number, xx: Float64Array, ww: Float64Array) => number;\n /** Execute the mapXAndWFunction to set up arrays for integration from xA to xB */\n public mapXAndW(xA: number, xB: number): number {\n return this.mapXAndWFunction(xA, xB, this.gaussX, this.gaussW);\n }\n /** setup gauss arrays.\n * * Number of gauss points must be 1 to 5 (inclusive)\n * @param numGauss requested number of gauss points.\n */\n public constructor(numGaussPoints: number) {\n const maxGauss = 7; // (As of Nov 2 2018, 7 is a fluffy over-allocation-- the quadrature class only handles up to 5.)\n this.gaussX = new Float64Array(maxGauss);\n this.gaussW = new Float64Array(maxGauss);\n // This sets the number of gauss points. This integrates exactly for polynomials of (degree 2*numGauss - 1).\n if (numGaussPoints > 5 || numGaussPoints < 1)\n numGaussPoints = 5;\n switch (numGaussPoints) {\n case 1: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss1(xA, xB, xMapped, wMapped); break;\n case 2: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss2(xA, xB, xMapped, wMapped); break;\n case 3: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss3(xA, xB, xMapped, wMapped); break;\n case 4: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss4(xA, xB, xMapped, wMapped); break;\n default: this.mapXAndWFunction = (xA, xB, xMapped, wMapped) => Quadrature.setupGauss5(xA, xB, xMapped, wMapped); break;\n }\n\n }\n}\n// someday .... http://www.holoborodko.com/pavel/numerical-methods/numerical-integration/overlapped-newton-cotes-quadratures/\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Range1dArray.js","sourceRoot":"","sources":["../../../src/numerics/Range1dArray.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { Range1d } from \"../geometry3d/Range\";\r\n\r\n/**\r\n * A Range1d array is a set of intervals, such as occur when a line is clipped to a (nonconvex) polygon\r\n * @internal\r\n */\r\nexport class Range1dArray {\r\n /** Internal step: Caller supplies rangeA = interval from left operand of set difference {A - B}\r\n * ib = lowest possible index of overlapping interval of {B}\r\n * Output live parts of rangeA, advancing B over intervals that do not extend beyond {rangeA}\r\n * iB is advanced to the first interval whose high is to the right of {rangeA.high}\r\n */\r\n private static advanceIntervalDifference(rangeA: Range1d, dataB: Range1d[], iB: number, retVal: Range1d[]) {\r\n const nB = dataB.length;\r\n let low = rangeA.low;\r\n let high = rangeA.high;\r\n while (iB < nB) {\r\n const rangeB = dataB[iB];\r\n if (rangeB.high < low) {\r\n iB++;\r\n } else if (rangeB.high <= high) {\r\n if (rangeB.low > low)\r\n retVal.push(Range1d.createXX(low, rangeB.low));\r\n low = rangeB.high;\r\n iB++;\r\n } else {\r\n // B ends beyond rangeA...\r\n if (rangeB.low < high)\r\n high = rangeB.low;\r\n break;\r\n }\r\n }\r\n\r\n if (low < high)\r\n retVal.push(Range1d.createXX(low, high));\r\n\r\n return retVal;\r\n }\r\n\r\n /** Intersect intervals in two pre-sorted sets. Output may NOT be the same as either input. */\r\n public static differenceSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[] {\r\n const nA = dataA.length;\r\n const iB = 0;\r\n const retVal: Range1d[] = [];\r\n for (let iA = 0; iA < nA; iA++) {\r\n Range1dArray.advanceIntervalDifference(dataA[iA], dataB, iB, retVal);\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n /** Internal step: Caller ensures rangeA is the \"lower\" interval.\r\n * Look rangeB to decide (a) what output interval to create and (b) which read index to advance.\r\n * Returns true or false to indicate whether the value associated with rangeA or rangeB should be incremented after this function returns\r\n */\r\n private static advanceIntervalIntersection(rangeA: Range1d, rangeB: Range1d, retVal: Range1d[]): boolean {\r\n if (rangeB.low > rangeA.high) {\r\n return true;\r\n } else if (rangeB.high >= rangeA.high) {\r\n retVal.push(Range1d.createXX(rangeB.low, rangeA.high));\r\n return true;\r\n } else {\r\n retVal.push(Range1d.createXX(rangeB.low, rangeB.high));\r\n return false;\r\n }\r\n }\r\n /** Boolean intersection among the (presorted) input ranges */\r\n public static intersectSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[] {\r\n let iA = 0;\r\n let iB = 0;\r\n const nA = dataA.length;\r\n const nB = dataB.length;\r\n const retVal: Range1d[] = [];\r\n while (iA < nA && iB < nB) {\r\n const rangeA = dataA[iA];\r\n const rangeB = dataB[iB];\r\n if (rangeA.low <= rangeB.low) {\r\n if (Range1dArray.advanceIntervalIntersection(rangeA, rangeB, retVal))\r\n iA++;\r\n else\r\n iB++;\r\n } else {\r\n if (Range1dArray.advanceIntervalIntersection(rangeB, rangeA, retVal))\r\n iB++;\r\n else\r\n iA++;\r\n }\r\n }\r\n\r\n return retVal;\r\n }\r\n\r\n /** Internal step: Read an interval from the array.\r\n * If it overlaps the work interval, advance the work interval, and return true to notify caller to increment read index.\r\n */\r\n private static advanceIntervalUnion(workRange: Range1d, source: Range1d[], readIndex: number): boolean {\r\n if (readIndex >= source.length)\r\n return false;\r\n const candidate = source[readIndex];\r\n if (candidate.low > workRange.high)\r\n return false;\r\n if (candidate.high > workRange.high)\r\n workRange.high = candidate.high;\r\n return true;\r\n }\r\n\r\n /** Boolean union among the (presorted) input ranges */\r\n public static unionSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[] {\r\n const nA = dataA.length;\r\n const nB = dataB.length;\r\n let iA = 0;\r\n let iB = 0;\r\n const retVal: Range1d[] = [];\r\n while (iA < nA && iB < nB) {\r\n const rangeA = dataA[iA];\r\n const rangeB = dataB[iB];\r\n let workRange: Range1d;\r\n // Pull from the lower of rangeA and rangeB. This always advances exactly one of the indices -- progress towards getting out.\r\n if (rangeA.low <= rangeB.low) {\r\n workRange = rangeA.clone();\r\n iA++;\r\n } else {\r\n workRange = rangeB.clone();\r\n iB++;\r\n }\r\n\r\n let toLoop = true;\r\n do {\r\n const resultA = Range1dArray.advanceIntervalUnion(workRange, dataA, iA);\r\n const resultB = Range1dArray.advanceIntervalUnion(workRange, dataB, iB);\r\n if (resultA)\r\n iA++;\r\n if (resultB)\r\n iB++;\r\n if (!(resultA || resultB))\r\n toLoop = false;\r\n } while (toLoop);\r\n\r\n retVal.push(workRange);\r\n }\r\n\r\n while (iA < nA)\r\n retVal.push(dataA[iA++]);\r\n while (iB < nB)\r\n retVal.push(dataB[iB++]);\r\n\r\n return retVal;\r\n }\r\n\r\n /** Boolean parity among the (presorted) input ranges */\r\n public static paritySorted(dataA: Range1d[], dataB: Range1d[]): Range1d[] {\r\n // Combine the two arrays, and then perform a simplification using simplifySortParity function\r\n const retVal: Range1d[] = [];\r\n for (const range of dataA)\r\n retVal.push(range.clone());\r\n for (const range of dataB)\r\n retVal.push(range.clone());\r\n\r\n // Sort the array\r\n retVal.sort(compareRange1dLexicalLowHigh);\r\n\r\n Range1dArray.simplifySortParity(retVal, true);\r\n return retVal;\r\n }\r\n\r\n /** Uses the Range1d specific compare function `compareRange1dLexicalLowHigh` for sorting the array of ranges */\r\n public static sort(data: Range1d[]) {\r\n data.sort(compareRange1dLexicalLowHigh);\r\n }\r\n\r\n /** Cleans up the array, compressing any overlapping ranges. If removeZeroLengthRanges is set to true, will also remove any Ranges in the form (x, x) */\r\n public static simplifySortUnion(data: Range1d[], removeZeroLengthRanges: boolean = false) {\r\n if (data.length < 2)\r\n return;\r\n\r\n data.sort(compareRange1dLexicalLowHigh);\r\n\r\n let currentIndex = 0; // last accepted interval\r\n for (let i = 1; i < data.length; i++) {\r\n if (data[i].low <= data[currentIndex].high) {\r\n // extend the current range\r\n if (data[i].high > data[currentIndex].high)\r\n data[currentIndex].high = data[i].high;\r\n } else {\r\n // data[i] is a new entry.\r\n currentIndex++;\r\n data[currentIndex].setFrom(data[i]);\r\n }\r\n }\r\n\r\n data.length = currentIndex + 1;\r\n if (removeZeroLengthRanges) {\r\n currentIndex = -1;\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i].low < data[i].high) {\r\n if (currentIndex < i)\r\n data[++currentIndex].setFrom(data[i]);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Apply parity logic among ranges which are not pre-sorted. */\r\n public static simplifySortParity(data: Range1d[], removeZeroLengthRanges: boolean = false) {\r\n const numData: number[] = [];\r\n for (const range of data) {\r\n if (range.low !== range.high) {\r\n numData.push(range.low);\r\n numData.push(range.high);\r\n }\r\n }\r\n const n = numData.length;\r\n numData.sort((a: number, b: number): number => {\r\n if (a < b) return -1;\r\n if (a > b) return 1;\r\n return 0;\r\n });\r\n\r\n let currIdx = 0;\r\n let x0;\r\n let x1;\r\n for (let i = 0; i < n; i += 2) {\r\n x0 = numData[i];\r\n x1 = numData[i + 1];\r\n if (!removeZeroLengthRanges) {\r\n Range1d.createXX(x0, x1, data[currIdx++]);\r\n } else {\r\n // coalesce intervals that share end and start:\r\n while (i + 2 < n && numData[i + 2] === x1) {\r\n i += 2;\r\n x1 = numData[i + 1];\r\n }\r\n if (x1 > x0)\r\n Range1d.createXX(x0, x1, data[currIdx++]);\r\n }\r\n }\r\n\r\n data.length = currIdx;\r\n }\r\n\r\n /** test if value is \"in\" by union rules.\r\n * * This considers all intervals-- i.e. does not expect or take advantage of sorting.\r\n */\r\n public static testUnion(data: Range1d[], value: number): boolean {\r\n return this.countContainingRanges(data, value) > 0;\r\n }\r\n /** test if value is \"in\" by parity rules.\r\n * * This considers all intervals-- i.e. does not expect or take advantage of sorting.\r\n */\r\n public static testParity(data: Range1d[], value: number): boolean {\r\n let inside = false;\r\n for (const range of data) {\r\n if (range.containsX(value))\r\n inside = !inside;\r\n }\r\n return inside;\r\n }\r\n\r\n /** linear search to count number of intervals which contain `value`.\r\n */\r\n public static countContainingRanges(data: Range1d[], value: number): number {\r\n let n = 0;\r\n for (const range of data) {\r\n if (range.containsX(value))\r\n n++;\r\n }\r\n return n;\r\n }\r\n\r\n /** return an array with all the low and high values of all the ranges.\r\n * @param data array of ranges.\r\n * @param sort optionally request immediate sort.\r\n * @param compress optionally request removal of duplicates.\r\n */\r\n public static getBreaks(data: Range1d[], result?: GrowableFloat64Array, sort: boolean = false, compress: boolean = false, clear: boolean = true): GrowableFloat64Array {\r\n if (!result) result = new GrowableFloat64Array(2 * data.length);\r\n if (clear) result.clear();\r\n for (const range of data) {\r\n result.push(range.low);\r\n result.push(range.high);\r\n }\r\n if (sort)\r\n result.sort();\r\n if (compress)\r\n result.compressAdjacentDuplicates();\r\n\r\n return result;\r\n }\r\n\r\n /** evaluate a point at an array of given fraction values\r\n * @param data array of ranges.\r\n * @param initialRangeFraction fraction coordinate applied only to first range. (typically negative)\r\n * @param rangeFraction fraction within each range.\r\n * @param includeDegenerateRange if false, skip rangeFraction for 0-length ranges.\r\n * @param gapFraction fraction within interval from each range high to successor low\r\n * @param includeDegenerateGap if false, skip rangeFraction for 0-length gaps.\r\n * @param finalRangeFraction fraction coordinate applied only to last range (typically an extrapolation above)\r\n * @param result array to receive values\r\n */\r\n public static appendFractionalPoints(data: Range1d[], initialRangeFraction: number | undefined, rangeFraction: number | undefined, includeDegenerateRange: boolean,\r\n gapFraction: number | undefined, includeDegenerateGap: boolean,\r\n finalRangeFraction: number | undefined, result: GrowableFloat64Array | number[]): GrowableFloat64Array | number[] {\r\n const numRange = data.length;\r\n if (numRange > 0) {\r\n if (undefined !== initialRangeFraction)\r\n result.push(data[0].fractionToPoint(initialRangeFraction));\r\n for (let i = 0; i < numRange; i++) {\r\n if (rangeFraction !== undefined && (includeDegenerateRange || data[i].low !== data[i].high))\r\n result.push(data[i].fractionToPoint(rangeFraction));\r\n if (i > 1 && gapFraction !== undefined && (includeDegenerateGap || data[i].low !== data[i].high))\r\n result.push(Geometry.interpolate(data[i - 1].high, gapFraction, data[i].low));\r\n }\r\n if (undefined !== finalRangeFraction)\r\n result.push(data[numRange - 1].fractionToPoint(finalRangeFraction));\r\n }\r\n return result;\r\n }\r\n\r\n /** Return a single range constructed with the low of range 0 and high of final range in the set. */\r\n public static firstLowToLastHigh(data: Range1d[]): Range1d {\r\n if (data.length === 0)\r\n return Range1d.createNull();\r\n return Range1d.createXX(data[0].low, data[data.length - 1].high);\r\n }\r\n /** sum the lengths of all ranges */\r\n public static sumLengths(data: Range1d[]): number {\r\n let sum = 0.0;\r\n for (const range of data) {\r\n sum += range.length();\r\n }\r\n return sum;\r\n }\r\n\r\n /**\r\n * Test if the low,high values are sorted with no overlap.\r\n * @param data array of ranges.\r\n * @param strict if true, consider exact high-to-low match as overlap.\r\n */\r\n public static isSorted(data: Range1d[], strict: boolean = true): boolean {\r\n const n = data.length;\r\n if (strict) {\r\n for (let i = 0; i + 1 < n; i++) {\r\n if (data[i].high >= data[i + 1].low)\r\n return false;\r\n }\r\n } else {\r\n for (let i = 0; i + 1 < n; i++) {\r\n if (data[i].high > data[i + 1].low)\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n}\r\n\r\n/** Checks low's first, then high's\r\n * @internal\r\n */\r\nexport function compareRange1dLexicalLowHigh(a: Range1d, b: Range1d): number {\r\n if (a.low < b.low) return -1;\r\n if (a.low > b.low) return 1;\r\n if (a.high < b.high) return -1;\r\n if (a.high > b.high) return 1;\r\n return 0;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Range1dArray.js","sourceRoot":"","sources":["../../../src/numerics/Range1dArray.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Numerics\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\nimport { Range1d } from \"../geometry3d/Range\";\n\n/**\n * A Range1d array is a set of intervals, such as occur when a line is clipped to a (nonconvex) polygon\n * @internal\n */\nexport class Range1dArray {\n /** Internal step: Caller supplies rangeA = interval from left operand of set difference {A - B}\n * ib = lowest possible index of overlapping interval of {B}\n * Output live parts of rangeA, advancing B over intervals that do not extend beyond {rangeA}\n * iB is advanced to the first interval whose high is to the right of {rangeA.high}\n */\n private static advanceIntervalDifference(rangeA: Range1d, dataB: Range1d[], iB: number, retVal: Range1d[]) {\n const nB = dataB.length;\n let low = rangeA.low;\n let high = rangeA.high;\n while (iB < nB) {\n const rangeB = dataB[iB];\n if (rangeB.high < low) {\n iB++;\n } else if (rangeB.high <= high) {\n if (rangeB.low > low)\n retVal.push(Range1d.createXX(low, rangeB.low));\n low = rangeB.high;\n iB++;\n } else {\n // B ends beyond rangeA...\n if (rangeB.low < high)\n high = rangeB.low;\n break;\n }\n }\n\n if (low < high)\n retVal.push(Range1d.createXX(low, high));\n\n return retVal;\n }\n\n /** Intersect intervals in two pre-sorted sets. Output may NOT be the same as either input. */\n public static differenceSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[] {\n const nA = dataA.length;\n const iB = 0;\n const retVal: Range1d[] = [];\n for (let iA = 0; iA < nA; iA++) {\n Range1dArray.advanceIntervalDifference(dataA[iA], dataB, iB, retVal);\n }\n\n return retVal;\n }\n\n /** Internal step: Caller ensures rangeA is the \"lower\" interval.\n * Look rangeB to decide (a) what output interval to create and (b) which read index to advance.\n * Returns true or false to indicate whether the value associated with rangeA or rangeB should be incremented after this function returns\n */\n private static advanceIntervalIntersection(rangeA: Range1d, rangeB: Range1d, retVal: Range1d[]): boolean {\n if (rangeB.low > rangeA.high) {\n return true;\n } else if (rangeB.high >= rangeA.high) {\n retVal.push(Range1d.createXX(rangeB.low, rangeA.high));\n return true;\n } else {\n retVal.push(Range1d.createXX(rangeB.low, rangeB.high));\n return false;\n }\n }\n /** Boolean intersection among the (presorted) input ranges */\n public static intersectSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[] {\n let iA = 0;\n let iB = 0;\n const nA = dataA.length;\n const nB = dataB.length;\n const retVal: Range1d[] = [];\n while (iA < nA && iB < nB) {\n const rangeA = dataA[iA];\n const rangeB = dataB[iB];\n if (rangeA.low <= rangeB.low) {\n if (Range1dArray.advanceIntervalIntersection(rangeA, rangeB, retVal))\n iA++;\n else\n iB++;\n } else {\n if (Range1dArray.advanceIntervalIntersection(rangeB, rangeA, retVal))\n iB++;\n else\n iA++;\n }\n }\n\n return retVal;\n }\n\n /** Internal step: Read an interval from the array.\n * If it overlaps the work interval, advance the work interval, and return true to notify caller to increment read index.\n */\n private static advanceIntervalUnion(workRange: Range1d, source: Range1d[], readIndex: number): boolean {\n if (readIndex >= source.length)\n return false;\n const candidate = source[readIndex];\n if (candidate.low > workRange.high)\n return false;\n if (candidate.high > workRange.high)\n workRange.high = candidate.high;\n return true;\n }\n\n /** Boolean union among the (presorted) input ranges */\n public static unionSorted(dataA: Range1d[], dataB: Range1d[]): Range1d[] {\n const nA = dataA.length;\n const nB = dataB.length;\n let iA = 0;\n let iB = 0;\n const retVal: Range1d[] = [];\n while (iA < nA && iB < nB) {\n const rangeA = dataA[iA];\n const rangeB = dataB[iB];\n let workRange: Range1d;\n // Pull from the lower of rangeA and rangeB. This always advances exactly one of the indices -- progress towards getting out.\n if (rangeA.low <= rangeB.low) {\n workRange = rangeA.clone();\n iA++;\n } else {\n workRange = rangeB.clone();\n iB++;\n }\n\n let toLoop = true;\n do {\n const resultA = Range1dArray.advanceIntervalUnion(workRange, dataA, iA);\n const resultB = Range1dArray.advanceIntervalUnion(workRange, dataB, iB);\n if (resultA)\n iA++;\n if (resultB)\n iB++;\n if (!(resultA || resultB))\n toLoop = false;\n } while (toLoop);\n\n retVal.push(workRange);\n }\n\n while (iA < nA)\n retVal.push(dataA[iA++]);\n while (iB < nB)\n retVal.push(dataB[iB++]);\n\n return retVal;\n }\n\n /** Boolean parity among the (presorted) input ranges */\n public static paritySorted(dataA: Range1d[], dataB: Range1d[]): Range1d[] {\n // Combine the two arrays, and then perform a simplification using simplifySortParity function\n const retVal: Range1d[] = [];\n for (const range of dataA)\n retVal.push(range.clone());\n for (const range of dataB)\n retVal.push(range.clone());\n\n // Sort the array\n retVal.sort(compareRange1dLexicalLowHigh);\n\n Range1dArray.simplifySortParity(retVal, true);\n return retVal;\n }\n\n /** Uses the Range1d specific compare function `compareRange1dLexicalLowHigh` for sorting the array of ranges */\n public static sort(data: Range1d[]) {\n data.sort(compareRange1dLexicalLowHigh);\n }\n\n /** Cleans up the array, compressing any overlapping ranges. If removeZeroLengthRanges is set to true, will also remove any Ranges in the form (x, x) */\n public static simplifySortUnion(data: Range1d[], removeZeroLengthRanges: boolean = false) {\n if (data.length < 2)\n return;\n\n data.sort(compareRange1dLexicalLowHigh);\n\n let currentIndex = 0; // last accepted interval\n for (let i = 1; i < data.length; i++) {\n if (data[i].low <= data[currentIndex].high) {\n // extend the current range\n if (data[i].high > data[currentIndex].high)\n data[currentIndex].high = data[i].high;\n } else {\n // data[i] is a new entry.\n currentIndex++;\n data[currentIndex].setFrom(data[i]);\n }\n }\n\n data.length = currentIndex + 1;\n if (removeZeroLengthRanges) {\n currentIndex = -1;\n for (let i = 0; i < data.length; i++) {\n if (data[i].low < data[i].high) {\n if (currentIndex < i)\n data[++currentIndex].setFrom(data[i]);\n }\n }\n }\n }\n\n /** Apply parity logic among ranges which are not pre-sorted. */\n public static simplifySortParity(data: Range1d[], removeZeroLengthRanges: boolean = false) {\n const numData: number[] = [];\n for (const range of data) {\n if (range.low !== range.high) {\n numData.push(range.low);\n numData.push(range.high);\n }\n }\n const n = numData.length;\n numData.sort((a: number, b: number): number => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n });\n\n let currIdx = 0;\n let x0;\n let x1;\n for (let i = 0; i < n; i += 2) {\n x0 = numData[i];\n x1 = numData[i + 1];\n if (!removeZeroLengthRanges) {\n Range1d.createXX(x0, x1, data[currIdx++]);\n } else {\n // coalesce intervals that share end and start:\n while (i + 2 < n && numData[i + 2] === x1) {\n i += 2;\n x1 = numData[i + 1];\n }\n if (x1 > x0)\n Range1d.createXX(x0, x1, data[currIdx++]);\n }\n }\n\n data.length = currIdx;\n }\n\n /** test if value is \"in\" by union rules.\n * * This considers all intervals-- i.e. does not expect or take advantage of sorting.\n */\n public static testUnion(data: Range1d[], value: number): boolean {\n return this.countContainingRanges(data, value) > 0;\n }\n /** test if value is \"in\" by parity rules.\n * * This considers all intervals-- i.e. does not expect or take advantage of sorting.\n */\n public static testParity(data: Range1d[], value: number): boolean {\n let inside = false;\n for (const range of data) {\n if (range.containsX(value))\n inside = !inside;\n }\n return inside;\n }\n\n /** linear search to count number of intervals which contain `value`.\n */\n public static countContainingRanges(data: Range1d[], value: number): number {\n let n = 0;\n for (const range of data) {\n if (range.containsX(value))\n n++;\n }\n return n;\n }\n\n /** return an array with all the low and high values of all the ranges.\n * @param data array of ranges.\n * @param sort optionally request immediate sort.\n * @param compress optionally request removal of duplicates.\n */\n public static getBreaks(data: Range1d[], result?: GrowableFloat64Array, sort: boolean = false, compress: boolean = false, clear: boolean = true): GrowableFloat64Array {\n if (!result) result = new GrowableFloat64Array(2 * data.length);\n if (clear) result.clear();\n for (const range of data) {\n result.push(range.low);\n result.push(range.high);\n }\n if (sort)\n result.sort();\n if (compress)\n result.compressAdjacentDuplicates();\n\n return result;\n }\n\n /** evaluate a point at an array of given fraction values\n * @param data array of ranges.\n * @param initialRangeFraction fraction coordinate applied only to first range. (typically negative)\n * @param rangeFraction fraction within each range.\n * @param includeDegenerateRange if false, skip rangeFraction for 0-length ranges.\n * @param gapFraction fraction within interval from each range high to successor low\n * @param includeDegenerateGap if false, skip rangeFraction for 0-length gaps.\n * @param finalRangeFraction fraction coordinate applied only to last range (typically an extrapolation above)\n * @param result array to receive values\n */\n public static appendFractionalPoints(data: Range1d[], initialRangeFraction: number | undefined, rangeFraction: number | undefined, includeDegenerateRange: boolean,\n gapFraction: number | undefined, includeDegenerateGap: boolean,\n finalRangeFraction: number | undefined, result: GrowableFloat64Array | number[]): GrowableFloat64Array | number[] {\n const numRange = data.length;\n if (numRange > 0) {\n if (undefined !== initialRangeFraction)\n result.push(data[0].fractionToPoint(initialRangeFraction));\n for (let i = 0; i < numRange; i++) {\n if (rangeFraction !== undefined && (includeDegenerateRange || data[i].low !== data[i].high))\n result.push(data[i].fractionToPoint(rangeFraction));\n if (i > 1 && gapFraction !== undefined && (includeDegenerateGap || data[i].low !== data[i].high))\n result.push(Geometry.interpolate(data[i - 1].high, gapFraction, data[i].low));\n }\n if (undefined !== finalRangeFraction)\n result.push(data[numRange - 1].fractionToPoint(finalRangeFraction));\n }\n return result;\n }\n\n /** Return a single range constructed with the low of range 0 and high of final range in the set. */\n public static firstLowToLastHigh(data: Range1d[]): Range1d {\n if (data.length === 0)\n return Range1d.createNull();\n return Range1d.createXX(data[0].low, data[data.length - 1].high);\n }\n /** sum the lengths of all ranges */\n public static sumLengths(data: Range1d[]): number {\n let sum = 0.0;\n for (const range of data) {\n sum += range.length();\n }\n return sum;\n }\n\n /**\n * Test if the low,high values are sorted with no overlap.\n * @param data array of ranges.\n * @param strict if true, consider exact high-to-low match as overlap.\n */\n public static isSorted(data: Range1d[], strict: boolean = true): boolean {\n const n = data.length;\n if (strict) {\n for (let i = 0; i + 1 < n; i++) {\n if (data[i].high >= data[i + 1].low)\n return false;\n }\n } else {\n for (let i = 0; i + 1 < n; i++) {\n if (data[i].high > data[i + 1].low)\n return false;\n }\n }\n return true;\n }\n}\n\n/** Checks low's first, then high's\n * @internal\n */\nexport function compareRange1dLexicalLowHigh(a: Range1d, b: Range1d): number {\n if (a.low < b.low) return -1;\n if (a.low > b.low) return 1;\n if (a.high < b.high) return -1;\n if (a.high > b.high) return 1;\n return 0;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SmallSystem.js","sourceRoot":"","sources":["../../../src/numerics/SmallSystem.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { WritableXAndY, XAndY } from \"../geometry3d/XYZProps\";\r\nimport { Point4d } from \"../geometry4d/Point4d\";\r\nimport { BilinearPolynomial } from \"./Polynomials\";\r\n\r\n// cspell:word XYUV\r\n\r\n/**\r\n * static methods for commonly appearing sets of equations in 2 or 3 variables\r\n * @public\r\n */\r\nexport class SmallSystem {\r\n /**\r\n * Intersect two transverse 2D lines.\r\n * * If the lines are parallel and overlap, the returned intersection is of dubious use.\r\n * @param a0 start point of line A\r\n * @param aDir direction vector of line A\r\n * @param b0 start point of line B\r\n * @param bDir direction vector of line B\r\n * @returns intersection fractions, `x` along line A and `y` along line B; or `undefined` if no intersection.\r\n * @see [[lineSegmentXYUVOverlapUnbounded]], [[lineSegmentXYUVIntersectionUnbounded]]\r\n */\r\n public static lineXYUVTransverseIntersection(a0: XAndY, aDir: XAndY, b0: XAndY, bDir: XAndY): WritableXAndY | undefined {\r\n const cx = b0.x - a0.x;\r\n const cy = b0.y - a0.y;\r\n const aCrossB = Geometry.crossProductXYXY(aDir.x, aDir.y, bDir.x, bDir.y);\r\n const cCrossB = Geometry.crossProductXYXY(cx, cy, bDir.x, bDir.y);\r\n const cCrossA = Geometry.crossProductXYXY(cx, cy, aDir.x, aDir.y);\r\n const x = Geometry.conditionalDivideFraction(cCrossB, aCrossB);\r\n const y = Geometry.conditionalDivideFraction(cCrossA, aCrossB);\r\n if (x !== undefined && y !== undefined)\r\n return { x, y };\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return true if lines (a0,a1) to (b0, b1) have a simple intersection.\r\n * Return the fractional (not xy) coordinates in result.x, result.y.\r\n * @param a0 start point of line A\r\n * @param a1 end point of line A\r\n * @param b0 start point of line B\r\n * @param b1 end point of line B\r\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\r\n */\r\n public static lineSegment2dXYTransverseIntersectionUnbounded(a0: Point2d, a1: Point2d, b0: Point2d, b1: Point2d, result: Vector2d): boolean {\r\n const ux = a1.x - a0.x;\r\n const uy = a1.y - a0.y;\r\n const vx = b1.x - b0.x;\r\n const vy = b1.y - b0.y;\r\n return this.lineSegmentXYUVTransverseIntersectionUnbounded(a0.x, a0.y, ux, uy, b0.x, b0.y, vx, vy, result);\r\n }\r\n\r\n /**\r\n * Return true if the lines have a simple intersection.\r\n * * Points (ax0,ay0) to (ax0+ux,ay0+uy) are at fractions 0 and 1 of line A.\r\n * * Points (bx0,by0) to (bx0+vx,by0+vy) are at fractions 0 and 1 of line B.\r\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\r\n */\r\n public static lineSegmentXYUVTransverseIntersectionUnbounded(ax0: number, ay0: number, ux: number, uy: number, bx0: number, by0: number, vx: number, vy: number, result: Vector2d): boolean {\r\n const transverse = this.lineXYUVTransverseIntersection({ x: ax0, y: ay0 }, { x: ux, y: uy } , { x: bx0, y: by0 }, { x: vx, y: vy });\r\n if (transverse) {\r\n result.set(transverse.x, transverse.y);\r\n return true;\r\n }\r\n result.set(0, 0);\r\n return false;\r\n }\r\n\r\n /**\r\n * Return true if lines (a0,a1) to (b0, b1) have a simple intersection using only xy parts.\r\n * @param a0 start point of line A\r\n * @param a1 end point of line A\r\n * @param b0 start point of line B\r\n * @param b1 end point of line B\r\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\r\n */\r\n public static lineSegment3dXYTransverseIntersectionUnbounded(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d, result: Vector2d): boolean {\r\n const ux = a1.x - a0.x;\r\n const uy = a1.y - a0.y;\r\n const vx = b1.x - b0.x;\r\n const vy = b1.y - b0.y;\r\n return this.lineSegmentXYUVTransverseIntersectionUnbounded(a0.x, a0.y, ux, uy, b0.x, b0.y, vx, vy, result);\r\n }\r\n\r\n /**\r\n * Intersect two overlapping unbounded 2D lines.\r\n * @param a0 start point of line A\r\n * @param aDir direction vector of line A; end point of line segment A is `a0 + aDir`\r\n * @param b0 start point of line B\r\n * @param bDir direction vector of line B; end point of line segment B is `b0 + bDir`\r\n * @param tol overlap distance tolerance\r\n * @returns `undefined` if the lines have a simple (transverse) intersection, or are parallel without overlap.\r\n * Otherwise, return the fractions at which each segment overlaps the other line:\r\n * * segment B maps to fractions in the range f0.x < f1.x on line A.\r\n * * segment A maps to fractions in the range f0.y < f1.y on line B.\r\n * @see [[lineXYUVTransverseIntersection]], [[lineSegmentXYUVIntersectionUnbounded]]\r\n */\r\n public static lineSegmentXYUVOverlapUnbounded(\r\n a0: XAndY, aDir: XAndY,\r\n b0: XAndY, bDir: XAndY,\r\n tol: number = Geometry.smallMetricDistance\r\n ): { f0: WritableXAndY, f1: WritableXAndY } | undefined {\r\n const tol2 = tol * tol;\r\n const projectToSegment = (s: XAndY, e0: XAndY, eDir: XAndY): { f: number, p: XAndY } => {\r\n const eDotE = Geometry.dotProductXYXY(eDir.x, eDir.y, eDir.x, eDir.y);\r\n const sDotE = Geometry.dotProductXYXY(s.x - e0.x, s.y - e0.y, eDir.x, eDir.y);\r\n const f = Geometry.safeDivideFraction(sDotE, eDotE, 0.0);\r\n return { f, p: { x: e0.x + f * eDir.x, y: e0.y + f * eDir.y } };\r\n };\r\n const a0OnB = projectToSegment(a0, b0, bDir);\r\n if (Geometry.distanceSquaredXYXY(a0.x, a0.y, a0OnB.p.x, a0OnB.p.y) > tol2)\r\n return undefined;\r\n const a1x = a0.x + aDir.x;\r\n const a1y = a0.y + aDir.y;\r\n const a1OnB = projectToSegment({ x: a1x, y: a1y }, b0, bDir);\r\n if (Geometry.distanceSquaredXYXY(a1x, a1y, a1OnB.p.x, a1OnB.p.y) > tol2)\r\n return undefined;\r\n const b0OnA = projectToSegment(b0, a0, aDir);\r\n if (Geometry.distanceSquaredXYXY(b0.x, b0.y, b0OnA.p.x, b0OnA.p.y) > tol2)\r\n return undefined;\r\n const b1x = b0.x + bDir.x;\r\n const b1y = b0.y + bDir.y;\r\n const b1OnA = projectToSegment({ x: b1x, y: b1y }, a0, aDir);\r\n if (Geometry.distanceSquaredXYXY(b1x, b1y, b1OnA.p.x, b1OnA.p.y) > tol2)\r\n return undefined;\r\n if (b0OnA.f > b1OnA.f)\r\n [b0OnA.f, b1OnA.f] = [b1OnA.f, b0OnA.f];\r\n if (a0OnB.f > a1OnB.f)\r\n [a0OnB.f, a1OnB.f] = [a1OnB.f, a0OnB.f];\r\n return { f0: { x: b0OnA.f, y: a0OnB.f }, f1: { x: b1OnA.f, y: a1OnB.f } };\r\n }\r\n\r\n /**\r\n * Intersect two transverse or overlapping unbounded 2D line segments.\r\n * @param a0 start point of line A\r\n * @param aDir direction vector of line A; end point of line segment A is `a0 + aDir`\r\n * @param b0 start point of line B\r\n * @param bDir direction vector of line B; end point of line segment B is `b0 + bDir`\r\n * @param tol overlap distance tolerance\r\n * @returns intersection fractions:\r\n * * If `f1` is undefined, the intersection occurs at fraction f0.x along line A and f0.y along line B.\r\n * * If `f1` is defined, the line segments are parallel and overlap:\r\n * segment B maps to fractions in the range f0.x < f1.x on line A;\r\n * segment A maps to fractions in the range f0.y < f1.y on line B.\r\n * * If `undefined`, the lines are parallel without overlap.\r\n */\r\n public static lineSegmentXYUVIntersectionUnbounded(\r\n a0: XAndY, aDir: XAndY,\r\n b0: XAndY, bDir: XAndY,\r\n tol: number = Geometry.smallMetricDistance\r\n ): { f0: WritableXAndY, f1?: WritableXAndY } | undefined {\r\n // Normal practice is to do the (quick, simple) transverse intersection first, but the transverse intersector's\r\n // notion of coincidence is based on the determinant ratios, which are hard to relate to physical tolerance.\r\n // So do the overlap first. This should do a quick exit in non-coincident case.\r\n const overlap = this.lineSegmentXYUVOverlapUnbounded(a0, aDir, b0, bDir, tol);\r\n if (overlap)\r\n return overlap;\r\n const transverse = this.lineXYUVTransverseIntersection(a0, aDir, b0, bDir);\r\n if (transverse)\r\n return { f0: transverse };\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return true if lines (a0,a1) to (b0, b1) have a simple intersection using only xy parts of WEIGHTED 4D Points\r\n * @param hA0 homogeneous start point of line A\r\n * @param hA1 homogeneous end point of line A\r\n * @param hB0 homogeneous start point of line B\r\n * @param hB1 homogeneous end point of line B\r\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\r\n */\r\n public static lineSegment3dHXYTransverseIntersectionUnbounded(hA0: Point4d, hA1: Point4d, hB0: Point4d, hB1: Point4d, result?: Vector2d): Vector2d | undefined {\r\n // Considering only x,y,w parts....\r\n // Point Q along B is (in full homogeneous) `(1-lambda) B0 + lambda 1`\r\n // PointQ is colinear with A0,A1 when the determinant det (A0,A1,Q) is zero. (Each column takes xyw parts)\r\n const alpha0 = Geometry.tripleProduct(\r\n hA0.x, hA1.x, hB0.x,\r\n hA0.y, hA1.y, hB0.y,\r\n hA0.w, hA1.w, hB0.w);\r\n const alpha1 = Geometry.tripleProduct(\r\n hA0.x, hA1.x, hB1.x,\r\n hA0.y, hA1.y, hB1.y,\r\n hA0.w, hA1.w, hB1.w);\r\n const fractionB = Geometry.conditionalDivideFraction(-alpha0, alpha1 - alpha0);\r\n if (fractionB !== undefined) {\r\n const beta0 = Geometry.tripleProduct(\r\n hB0.x, hB1.x, hA0.x,\r\n hB0.y, hB1.y, hA0.y,\r\n hB0.w, hB1.w, hA0.w);\r\n const beta1 = Geometry.tripleProduct(\r\n hB0.x, hB1.x, hA1.x,\r\n hB0.y, hB1.y, hA1.y,\r\n hB0.w, hB1.w, hA1.w);\r\n const fractionA = Geometry.conditionalDivideFraction(-beta0, beta1 - beta0);\r\n if (fractionA !== undefined)\r\n return Vector2d.create(fractionA, fractionB, result);\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Return the line fraction at which the (homogeneous) line is closest to a space point as viewed in xy only.\r\n * @param hA0 homogeneous start point of the line\r\n * @param hA1 homogeneous end point of the line\r\n * @param spacePoint homogeneous point in space\r\n */\r\n public static lineSegment3dHXYClosestPointUnbounded(hA0: Point4d, hA1: Point4d, spacePoint: Point4d): number | undefined {\r\n // Considering only x,y,w parts.\r\n // weighted difference of (A1 w0 - A0 w1) is (cartesian) tangent vector along the line as viewed.\r\n // The perpendicular (pure vector) W = (-y,x) flip is the direction of projection.\r\n // Point Q along A is (in full homogeneous) `(1-lambda) A0 + lambda 1 A1`.\r\n // PointQ is colinear with spacePoint and and W when the xyw homogeneous determinant | Q W spacePoint | is zero.\r\n const tx = hA1.x * hA0.w - hA0.x * hA1.w;\r\n const ty = hA1.y * hA0.w - hA0.y * hA1.w;\r\n const det0 = Geometry.tripleProduct(\r\n hA0.x, -ty, spacePoint.x,\r\n hA0.y, tx, spacePoint.y,\r\n hA0.w, 0, spacePoint.w,\r\n );\r\n const det1 = Geometry.tripleProduct(\r\n hA1.x, -ty, spacePoint.x,\r\n hA1.y, tx, spacePoint.y,\r\n hA1.w, 0, spacePoint.w,\r\n );\r\n return Geometry.conditionalDivideFraction(-det0, det1 - det0);\r\n }\r\n\r\n /**\r\n * Return the line fraction at which the line is closest to a space point as viewed in xy only.\r\n * @param pointA0 start point\r\n * @param pointA1 end point\r\n * @param spacePoint point in space\r\n */\r\n public static lineSegment3dXYClosestPointUnbounded(pointA0: XAndY, pointA1: XAndY, spacePoint: XAndY): number | undefined {\r\n // Considering only x,y parts....\r\n const ux = pointA1.x - pointA0.x;\r\n const uy = pointA1.y - pointA0.y;\r\n const uu = ux * ux + uy * uy;\r\n const vx = spacePoint.x - pointA0.x;\r\n const vy = spacePoint.y - pointA0.y;\r\n const uv = ux * vx + uy * vy;\r\n return Geometry.conditionalDivideFraction(uv, uu);\r\n }\r\n\r\n /**\r\n * Return the line fraction at which the line is closest to a space point\r\n * @param pointA0 start point\r\n * @param pointA1 end point\r\n * @param spacePoint point in space\r\n */\r\n public static lineSegment3dClosestPointUnbounded(pointA0: Point3d, pointA1: Point3d, spacePoint: Point3d): number | undefined {\r\n const ux = pointA1.x - pointA0.x;\r\n const uy = pointA1.y - pointA0.y;\r\n const uz = pointA1.z - pointA0.z;\r\n const uu = ux * ux + uy * uy + uz * uz;\r\n const vx = spacePoint.x - pointA0.x;\r\n const vy = spacePoint.y - pointA0.y;\r\n const vz = spacePoint.z - pointA0.z;\r\n const uv = ux * vx + uy * vy + uz * vz;\r\n return Geometry.conditionalDivideFraction(uv, uu);\r\n }\r\n\r\n /**\r\n * Return true if lines (a0,a1) to (b0, b1) have closest approach (go by each other) in 3d\r\n * @param a0 start point of line A\r\n * @param a1 end point of line A\r\n * @param b0 start point of line B\r\n * @param b1 end point of line B\r\n * @param result vector to receive fractional coordinates of closest approach: result.x is fraction on line A, result.y is fraction on line B.\r\n */\r\n public static lineSegment3dClosestApproachUnbounded(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d,\r\n result: Vector2d): boolean {\r\n return this.ray3dXYZUVWClosestApproachUnbounded(\r\n a0.x, a0.y, a0.z,\r\n a1.x - a0.x, a1.y - a0.y, a1.z - a0.z,\r\n b0.x, b0.y, b0.z,\r\n b1.x - b0.x, b1.y - b0.y, b1.z - b0.z,\r\n result);\r\n }\r\n /**\r\n * Return true if the given rays have closest approach (go by each other) in 3d\r\n * @param ax x-coordinate of the origin of the first ray\r\n * @param ay y-coordinate of the origin of the first ray\r\n * @param az z-coordinate of the origin of the first ray\r\n * @param au x-coordinate of the direction vector of the first ray\r\n * @param av y-coordinate of the direction vector of the first ray\r\n * @param aw z-coordinate of the direction vector of the first ray\r\n * @param bx x-coordinate of the origin of the second ray\r\n * @param by y-coordinate of the origin of the second ray\r\n * @param bz z-coordinate of the origin of the second ray\r\n * @param bu x-coordinate of the direction vector of the second ray\r\n * @param bv y-coordinate of the direction vector of the second ray\r\n * @param bw z-coordinate of the direction vector of the second ray\r\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\r\n */\r\n public static ray3dXYZUVWClosestApproachUnbounded(\r\n ax: number, ay: number, az: number, au: number, av: number, aw: number,\r\n bx: number, by: number, bz: number, bu: number, bv: number, bw: number,\r\n result: Vector2d): boolean {\r\n\r\n const cx = bx - ax;\r\n const cy = by - ay;\r\n const cz = bz - az;\r\n\r\n const uu = Geometry.hypotenuseSquaredXYZ(au, av, aw);\r\n const vv = Geometry.hypotenuseSquaredXYZ(bu, bv, bw);\r\n const uv = Geometry.dotProductXYZXYZ(au, av, aw, bu, bv, bw);\r\n const cu = Geometry.dotProductXYZXYZ(cx, cy, cz, au, av, aw);\r\n const cv = Geometry.dotProductXYZXYZ(cx, cy, cz, bu, bv, bw);\r\n return SmallSystem.linearSystem2d(uu, -uv, uv, -vv, cu, cv, result);\r\n }\r\n /**\r\n * Solve the pair of linear equations\r\n * * `ux * x + vx * y = cx`\r\n * * `uy * x + vy * y = cy`\r\n * @param ux xx coefficient\r\n * @param vx xy coefficient\r\n * @param uy yx coefficient\r\n * @param vy yy coefficient\r\n * @param cx x right hand side\r\n * @param cy y right hand side\r\n * @param result (x,y) solution (MUST be preallocated by caller)\r\n */\r\n public static linearSystem2d(\r\n ux: number, vx: number, // first row of matrix\r\n uy: number, vy: number, // second row of matrix\r\n cx: number, cy: number, // right side\r\n result: Vector2d,\r\n ): boolean {\r\n const uv = Geometry.crossProductXYXY(ux, uy, vx, vy);\r\n const cv = Geometry.crossProductXYXY(cx, cy, vx, vy);\r\n const cu = Geometry.crossProductXYXY(ux, uy, cx, cy);\r\n const s = Geometry.conditionalDivideFraction(cv, uv);\r\n const t = Geometry.conditionalDivideFraction(cu, uv);\r\n if (s !== undefined && t !== undefined) {\r\n result.set(s, t);\r\n return true;\r\n }\r\n result.set(0, 0);\r\n return false;\r\n }\r\n /**\r\n * Solve a linear system:\r\n * * x equation: `axx * u + axy * v + axz * w = cx`\r\n * * y equation: `ayx * u + ayy * v + ayz * w = cy`\r\n * * z equation: `azx * u + azy * v + azz * w = cz`\r\n * @param axx row 0, column 0 coefficient\r\n * @param axy row 0, column 1 coefficient\r\n * @param axz row 0, column 1 coefficient\r\n * @param ayx row 1, column 0 coefficient\r\n * @param ayy row 1, column 1 coefficient\r\n * @param ayz row 1, column 2 coefficient\r\n * @param azx row 2, column 0 coefficient\r\n * @param azy row 2, column 1 coefficient\r\n * @param azz row 2, column 2 coefficient\r\n * @param cx right hand side row 0 coefficient\r\n * @param cy right hand side row 1 coefficient\r\n * @param cz right hand side row 2 coefficient\r\n * @param result optional result.\r\n * @returns solution vector (u,v,w) or `undefined` if system is singular.\r\n */\r\n public static linearSystem3d(\r\n axx: number, axy: number, axz: number, // first row of matrix\r\n ayx: number, ayy: number, ayz: number, // second row of matrix\r\n azx: number, azy: number, azz: number, // second row of matrix\r\n cx: number, cy: number, cz: number, // right side\r\n result?: Vector3d,\r\n ): Vector3d | undefined {\r\n // determinants of various combinations of columns ...\r\n const detXYZ = Geometry.tripleProduct(axx, ayx, azx, axy, ayy, azy, axz, ayz, azz);\r\n const detCYZ = Geometry.tripleProduct(cx, cy, cz, axy, ayy, azy, axz, ayz, azz);\r\n const detXCZ = Geometry.tripleProduct(axx, ayx, azx, cx, cy, cz, axz, ayz, azz);\r\n const detXYC = Geometry.tripleProduct(axx, ayx, azx, axy, ayy, azy, cx, cy, cz);\r\n const s = Geometry.conditionalDivideFraction(detCYZ, detXYZ);\r\n const t = Geometry.conditionalDivideFraction(detXCZ, detXYZ);\r\n const u = Geometry.conditionalDivideFraction(detXYC, detXYZ);\r\n if (s !== undefined && t !== undefined && u !== undefined) {\r\n return Vector3d.create(s, t, u, result);\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Compute the intersection of three planes.\r\n * @param xyzA point on the first plane\r\n * @param normalA normal of the first plane\r\n * @param xyzB point on the second plane\r\n * @param normalB normal of the second plane\r\n * @param xyzC point on the third plane\r\n * @param normalC normal of the third plane\r\n * @param result optional result\r\n * @returns intersection point of the three planes (as a Vector3d), or undefined if at least two planes are parallel.\r\n */\r\n public static intersect3Planes(\r\n xyzA: Point3d, normalA: Vector3d,\r\n xyzB: Point3d, normalB: Vector3d,\r\n xyzC: Point3d, normalC: Vector3d, result?: Vector3d): Vector3d | undefined {\r\n return this.linearSystem3d(\r\n normalA.x, normalA.y, normalA.z,\r\n normalB.x, normalB.y, normalB.z,\r\n normalC.x, normalC.y, normalC.z,\r\n Geometry.dotProductXYZXYZ(xyzA.x, xyzA.y, xyzA.z, normalA.x, normalA.y, normalA.z),\r\n Geometry.dotProductXYZXYZ(xyzB.x, xyzB.y, xyzB.z, normalB.x, normalB.y, normalB.z),\r\n Geometry.dotProductXYZXYZ(xyzC.x, xyzC.y, xyzC.z, normalC.x, normalC.y, normalC.z), result);\r\n }\r\n\r\n /**\r\n * In rowB, replace `rowB[j] += a * rowB[pivot] * rowA[j] / rowA[pivot]` for `j > pivot`\r\n * @param rowA row that does not change\r\n * @param pivotIndex index of pivot (divisor) in rowA.\r\n * @param rowB row where elimination occurs.\r\n */\r\n public static eliminateFromPivot(rowA: Float64Array, pivotIndex: number, rowB: Float64Array, a: number): boolean {\r\n const n = rowA.length;\r\n let q = Geometry.conditionalDivideFraction(rowB[pivotIndex], rowA[pivotIndex]);\r\n if (q === undefined) return false;\r\n q *= a;\r\n for (let j = pivotIndex + 1; j < n; j++)\r\n rowB[j] += q * rowA[j];\r\n return true;\r\n }\r\n /**\r\n * Solve a pair of bilinear equations\r\n * * First equation: `a0 + b0 * u + c0 * v + d0 * u * v = 0`\r\n * * Second equation: `a1 + b1 * u + c1 * v + d1 * u * v = 0`\r\n */\r\n public static solveBilinearPair(\r\n a0: number, b0: number, c0: number, d0: number,\r\n a1: number, b1: number, c1: number, d1: number,\r\n ): Point2d[] | undefined {\r\n return BilinearPolynomial.solveBilinearPair(a0, b0, c0, d0, a1, b1, c1, d1);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SmallSystem.js","sourceRoot":"","sources":["../../../src/numerics/SmallSystem.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Numerics\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d } from \"../geometry3d/Point3dVector3d\";\nimport { WritableXAndY, XAndY } from \"../geometry3d/XYZProps\";\nimport { Point4d } from \"../geometry4d/Point4d\";\nimport { BilinearPolynomial } from \"./Polynomials\";\n\n// cspell:word XYUV\n\n/**\n * static methods for commonly appearing sets of equations in 2 or 3 variables\n * @public\n */\nexport class SmallSystem {\n /**\n * Intersect two transverse 2D lines.\n * * If the lines are parallel and overlap, the returned intersection is of dubious use.\n * @param a0 start point of line A\n * @param aDir direction vector of line A\n * @param b0 start point of line B\n * @param bDir direction vector of line B\n * @returns intersection fractions, `x` along line A and `y` along line B; or `undefined` if no intersection.\n * @see [[lineSegmentXYUVOverlapUnbounded]], [[lineSegmentXYUVIntersectionUnbounded]]\n */\n public static lineXYUVTransverseIntersection(a0: XAndY, aDir: XAndY, b0: XAndY, bDir: XAndY): WritableXAndY | undefined {\n const cx = b0.x - a0.x;\n const cy = b0.y - a0.y;\n const aCrossB = Geometry.crossProductXYXY(aDir.x, aDir.y, bDir.x, bDir.y);\n const cCrossB = Geometry.crossProductXYXY(cx, cy, bDir.x, bDir.y);\n const cCrossA = Geometry.crossProductXYXY(cx, cy, aDir.x, aDir.y);\n const x = Geometry.conditionalDivideFraction(cCrossB, aCrossB);\n const y = Geometry.conditionalDivideFraction(cCrossA, aCrossB);\n if (x !== undefined && y !== undefined)\n return { x, y };\n return undefined;\n }\n\n /**\n * Return true if lines (a0,a1) to (b0, b1) have a simple intersection.\n * Return the fractional (not xy) coordinates in result.x, result.y.\n * @param a0 start point of line A\n * @param a1 end point of line A\n * @param b0 start point of line B\n * @param b1 end point of line B\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\n */\n public static lineSegment2dXYTransverseIntersectionUnbounded(a0: Point2d, a1: Point2d, b0: Point2d, b1: Point2d, result: Vector2d): boolean {\n const ux = a1.x - a0.x;\n const uy = a1.y - a0.y;\n const vx = b1.x - b0.x;\n const vy = b1.y - b0.y;\n return this.lineSegmentXYUVTransverseIntersectionUnbounded(a0.x, a0.y, ux, uy, b0.x, b0.y, vx, vy, result);\n }\n\n /**\n * Return true if the lines have a simple intersection.\n * * Points (ax0,ay0) to (ax0+ux,ay0+uy) are at fractions 0 and 1 of line A.\n * * Points (bx0,by0) to (bx0+vx,by0+vy) are at fractions 0 and 1 of line B.\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\n */\n public static lineSegmentXYUVTransverseIntersectionUnbounded(ax0: number, ay0: number, ux: number, uy: number, bx0: number, by0: number, vx: number, vy: number, result: Vector2d): boolean {\n const transverse = this.lineXYUVTransverseIntersection({ x: ax0, y: ay0 }, { x: ux, y: uy } , { x: bx0, y: by0 }, { x: vx, y: vy });\n if (transverse) {\n result.set(transverse.x, transverse.y);\n return true;\n }\n result.set(0, 0);\n return false;\n }\n\n /**\n * Return true if lines (a0,a1) to (b0, b1) have a simple intersection using only xy parts.\n * @param a0 start point of line A\n * @param a1 end point of line A\n * @param b0 start point of line B\n * @param b1 end point of line B\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\n */\n public static lineSegment3dXYTransverseIntersectionUnbounded(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d, result: Vector2d): boolean {\n const ux = a1.x - a0.x;\n const uy = a1.y - a0.y;\n const vx = b1.x - b0.x;\n const vy = b1.y - b0.y;\n return this.lineSegmentXYUVTransverseIntersectionUnbounded(a0.x, a0.y, ux, uy, b0.x, b0.y, vx, vy, result);\n }\n\n /**\n * Intersect two overlapping unbounded 2D lines.\n * @param a0 start point of line A\n * @param aDir direction vector of line A; end point of line segment A is `a0 + aDir`\n * @param b0 start point of line B\n * @param bDir direction vector of line B; end point of line segment B is `b0 + bDir`\n * @param tol overlap distance tolerance\n * @returns `undefined` if the lines have a simple (transverse) intersection, or are parallel without overlap.\n * Otherwise, return the fractions at which each segment overlaps the other line:\n * * segment B maps to fractions in the range f0.x < f1.x on line A.\n * * segment A maps to fractions in the range f0.y < f1.y on line B.\n * @see [[lineXYUVTransverseIntersection]], [[lineSegmentXYUVIntersectionUnbounded]]\n */\n public static lineSegmentXYUVOverlapUnbounded(\n a0: XAndY, aDir: XAndY,\n b0: XAndY, bDir: XAndY,\n tol: number = Geometry.smallMetricDistance\n ): { f0: WritableXAndY, f1: WritableXAndY } | undefined {\n const tol2 = tol * tol;\n const projectToSegment = (s: XAndY, e0: XAndY, eDir: XAndY): { f: number, p: XAndY } => {\n const eDotE = Geometry.dotProductXYXY(eDir.x, eDir.y, eDir.x, eDir.y);\n const sDotE = Geometry.dotProductXYXY(s.x - e0.x, s.y - e0.y, eDir.x, eDir.y);\n const f = Geometry.safeDivideFraction(sDotE, eDotE, 0.0);\n return { f, p: { x: e0.x + f * eDir.x, y: e0.y + f * eDir.y } };\n };\n const a0OnB = projectToSegment(a0, b0, bDir);\n if (Geometry.distanceSquaredXYXY(a0.x, a0.y, a0OnB.p.x, a0OnB.p.y) > tol2)\n return undefined;\n const a1x = a0.x + aDir.x;\n const a1y = a0.y + aDir.y;\n const a1OnB = projectToSegment({ x: a1x, y: a1y }, b0, bDir);\n if (Geometry.distanceSquaredXYXY(a1x, a1y, a1OnB.p.x, a1OnB.p.y) > tol2)\n return undefined;\n const b0OnA = projectToSegment(b0, a0, aDir);\n if (Geometry.distanceSquaredXYXY(b0.x, b0.y, b0OnA.p.x, b0OnA.p.y) > tol2)\n return undefined;\n const b1x = b0.x + bDir.x;\n const b1y = b0.y + bDir.y;\n const b1OnA = projectToSegment({ x: b1x, y: b1y }, a0, aDir);\n if (Geometry.distanceSquaredXYXY(b1x, b1y, b1OnA.p.x, b1OnA.p.y) > tol2)\n return undefined;\n if (b0OnA.f > b1OnA.f)\n [b0OnA.f, b1OnA.f] = [b1OnA.f, b0OnA.f];\n if (a0OnB.f > a1OnB.f)\n [a0OnB.f, a1OnB.f] = [a1OnB.f, a0OnB.f];\n return { f0: { x: b0OnA.f, y: a0OnB.f }, f1: { x: b1OnA.f, y: a1OnB.f } };\n }\n\n /**\n * Intersect two transverse or overlapping unbounded 2D line segments.\n * @param a0 start point of line A\n * @param aDir direction vector of line A; end point of line segment A is `a0 + aDir`\n * @param b0 start point of line B\n * @param bDir direction vector of line B; end point of line segment B is `b0 + bDir`\n * @param tol overlap distance tolerance\n * @returns intersection fractions:\n * * If `f1` is undefined, the intersection occurs at fraction f0.x along line A and f0.y along line B.\n * * If `f1` is defined, the line segments are parallel and overlap:\n * segment B maps to fractions in the range f0.x < f1.x on line A;\n * segment A maps to fractions in the range f0.y < f1.y on line B.\n * * If `undefined`, the lines are parallel without overlap.\n */\n public static lineSegmentXYUVIntersectionUnbounded(\n a0: XAndY, aDir: XAndY,\n b0: XAndY, bDir: XAndY,\n tol: number = Geometry.smallMetricDistance\n ): { f0: WritableXAndY, f1?: WritableXAndY } | undefined {\n // Normal practice is to do the (quick, simple) transverse intersection first, but the transverse intersector's\n // notion of coincidence is based on the determinant ratios, which are hard to relate to physical tolerance.\n // So do the overlap first. This should do a quick exit in non-coincident case.\n const overlap = this.lineSegmentXYUVOverlapUnbounded(a0, aDir, b0, bDir, tol);\n if (overlap)\n return overlap;\n const transverse = this.lineXYUVTransverseIntersection(a0, aDir, b0, bDir);\n if (transverse)\n return { f0: transverse };\n return undefined;\n }\n\n /**\n * Return true if lines (a0,a1) to (b0, b1) have a simple intersection using only xy parts of WEIGHTED 4D Points\n * @param hA0 homogeneous start point of line A\n * @param hA1 homogeneous end point of line A\n * @param hB0 homogeneous start point of line B\n * @param hB1 homogeneous end point of line B\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\n */\n public static lineSegment3dHXYTransverseIntersectionUnbounded(hA0: Point4d, hA1: Point4d, hB0: Point4d, hB1: Point4d, result?: Vector2d): Vector2d | undefined {\n // Considering only x,y,w parts....\n // Point Q along B is (in full homogeneous) `(1-lambda) B0 + lambda 1`\n // PointQ is colinear with A0,A1 when the determinant det (A0,A1,Q) is zero. (Each column takes xyw parts)\n const alpha0 = Geometry.tripleProduct(\n hA0.x, hA1.x, hB0.x,\n hA0.y, hA1.y, hB0.y,\n hA0.w, hA1.w, hB0.w);\n const alpha1 = Geometry.tripleProduct(\n hA0.x, hA1.x, hB1.x,\n hA0.y, hA1.y, hB1.y,\n hA0.w, hA1.w, hB1.w);\n const fractionB = Geometry.conditionalDivideFraction(-alpha0, alpha1 - alpha0);\n if (fractionB !== undefined) {\n const beta0 = Geometry.tripleProduct(\n hB0.x, hB1.x, hA0.x,\n hB0.y, hB1.y, hA0.y,\n hB0.w, hB1.w, hA0.w);\n const beta1 = Geometry.tripleProduct(\n hB0.x, hB1.x, hA1.x,\n hB0.y, hB1.y, hA1.y,\n hB0.w, hB1.w, hA1.w);\n const fractionA = Geometry.conditionalDivideFraction(-beta0, beta1 - beta0);\n if (fractionA !== undefined)\n return Vector2d.create(fractionA, fractionB, result);\n }\n return undefined;\n }\n\n /**\n * Return the line fraction at which the (homogeneous) line is closest to a space point as viewed in xy only.\n * @param hA0 homogeneous start point of the line\n * @param hA1 homogeneous end point of the line\n * @param spacePoint homogeneous point in space\n */\n public static lineSegment3dHXYClosestPointUnbounded(hA0: Point4d, hA1: Point4d, spacePoint: Point4d): number | undefined {\n // Considering only x,y,w parts.\n // weighted difference of (A1 w0 - A0 w1) is (cartesian) tangent vector along the line as viewed.\n // The perpendicular (pure vector) W = (-y,x) flip is the direction of projection.\n // Point Q along A is (in full homogeneous) `(1-lambda) A0 + lambda 1 A1`.\n // PointQ is colinear with spacePoint and and W when the xyw homogeneous determinant | Q W spacePoint | is zero.\n const tx = hA1.x * hA0.w - hA0.x * hA1.w;\n const ty = hA1.y * hA0.w - hA0.y * hA1.w;\n const det0 = Geometry.tripleProduct(\n hA0.x, -ty, spacePoint.x,\n hA0.y, tx, spacePoint.y,\n hA0.w, 0, spacePoint.w,\n );\n const det1 = Geometry.tripleProduct(\n hA1.x, -ty, spacePoint.x,\n hA1.y, tx, spacePoint.y,\n hA1.w, 0, spacePoint.w,\n );\n return Geometry.conditionalDivideFraction(-det0, det1 - det0);\n }\n\n /**\n * Return the line fraction at which the line is closest to a space point as viewed in xy only.\n * @param pointA0 start point\n * @param pointA1 end point\n * @param spacePoint point in space\n */\n public static lineSegment3dXYClosestPointUnbounded(pointA0: XAndY, pointA1: XAndY, spacePoint: XAndY): number | undefined {\n // Considering only x,y parts....\n const ux = pointA1.x - pointA0.x;\n const uy = pointA1.y - pointA0.y;\n const uu = ux * ux + uy * uy;\n const vx = spacePoint.x - pointA0.x;\n const vy = spacePoint.y - pointA0.y;\n const uv = ux * vx + uy * vy;\n return Geometry.conditionalDivideFraction(uv, uu);\n }\n\n /**\n * Return the line fraction at which the line is closest to a space point\n * @param pointA0 start point\n * @param pointA1 end point\n * @param spacePoint point in space\n */\n public static lineSegment3dClosestPointUnbounded(pointA0: Point3d, pointA1: Point3d, spacePoint: Point3d): number | undefined {\n const ux = pointA1.x - pointA0.x;\n const uy = pointA1.y - pointA0.y;\n const uz = pointA1.z - pointA0.z;\n const uu = ux * ux + uy * uy + uz * uz;\n const vx = spacePoint.x - pointA0.x;\n const vy = spacePoint.y - pointA0.y;\n const vz = spacePoint.z - pointA0.z;\n const uv = ux * vx + uy * vy + uz * vz;\n return Geometry.conditionalDivideFraction(uv, uu);\n }\n\n /**\n * Return true if lines (a0,a1) to (b0, b1) have closest approach (go by each other) in 3d\n * @param a0 start point of line A\n * @param a1 end point of line A\n * @param b0 start point of line B\n * @param b1 end point of line B\n * @param result vector to receive fractional coordinates of closest approach: result.x is fraction on line A, result.y is fraction on line B.\n */\n public static lineSegment3dClosestApproachUnbounded(a0: Point3d, a1: Point3d, b0: Point3d, b1: Point3d,\n result: Vector2d): boolean {\n return this.ray3dXYZUVWClosestApproachUnbounded(\n a0.x, a0.y, a0.z,\n a1.x - a0.x, a1.y - a0.y, a1.z - a0.z,\n b0.x, b0.y, b0.z,\n b1.x - b0.x, b1.y - b0.y, b1.z - b0.z,\n result);\n }\n /**\n * Return true if the given rays have closest approach (go by each other) in 3d\n * @param ax x-coordinate of the origin of the first ray\n * @param ay y-coordinate of the origin of the first ray\n * @param az z-coordinate of the origin of the first ray\n * @param au x-coordinate of the direction vector of the first ray\n * @param av y-coordinate of the direction vector of the first ray\n * @param aw z-coordinate of the direction vector of the first ray\n * @param bx x-coordinate of the origin of the second ray\n * @param by y-coordinate of the origin of the second ray\n * @param bz z-coordinate of the origin of the second ray\n * @param bu x-coordinate of the direction vector of the second ray\n * @param bv y-coordinate of the direction vector of the second ray\n * @param bw z-coordinate of the direction vector of the second ray\n * @param result vector to receive fractional coordinates of intersection: result.x is fraction on line A, result.y is fraction on line B.\n */\n public static ray3dXYZUVWClosestApproachUnbounded(\n ax: number, ay: number, az: number, au: number, av: number, aw: number,\n bx: number, by: number, bz: number, bu: number, bv: number, bw: number,\n result: Vector2d): boolean {\n\n const cx = bx - ax;\n const cy = by - ay;\n const cz = bz - az;\n\n const uu = Geometry.hypotenuseSquaredXYZ(au, av, aw);\n const vv = Geometry.hypotenuseSquaredXYZ(bu, bv, bw);\n const uv = Geometry.dotProductXYZXYZ(au, av, aw, bu, bv, bw);\n const cu = Geometry.dotProductXYZXYZ(cx, cy, cz, au, av, aw);\n const cv = Geometry.dotProductXYZXYZ(cx, cy, cz, bu, bv, bw);\n return SmallSystem.linearSystem2d(uu, -uv, uv, -vv, cu, cv, result);\n }\n /**\n * Solve the pair of linear equations\n * * `ux * x + vx * y = cx`\n * * `uy * x + vy * y = cy`\n * @param ux xx coefficient\n * @param vx xy coefficient\n * @param uy yx coefficient\n * @param vy yy coefficient\n * @param cx x right hand side\n * @param cy y right hand side\n * @param result (x,y) solution (MUST be preallocated by caller)\n */\n public static linearSystem2d(\n ux: number, vx: number, // first row of matrix\n uy: number, vy: number, // second row of matrix\n cx: number, cy: number, // right side\n result: Vector2d,\n ): boolean {\n const uv = Geometry.crossProductXYXY(ux, uy, vx, vy);\n const cv = Geometry.crossProductXYXY(cx, cy, vx, vy);\n const cu = Geometry.crossProductXYXY(ux, uy, cx, cy);\n const s = Geometry.conditionalDivideFraction(cv, uv);\n const t = Geometry.conditionalDivideFraction(cu, uv);\n if (s !== undefined && t !== undefined) {\n result.set(s, t);\n return true;\n }\n result.set(0, 0);\n return false;\n }\n /**\n * Solve a linear system:\n * * x equation: `axx * u + axy * v + axz * w = cx`\n * * y equation: `ayx * u + ayy * v + ayz * w = cy`\n * * z equation: `azx * u + azy * v + azz * w = cz`\n * @param axx row 0, column 0 coefficient\n * @param axy row 0, column 1 coefficient\n * @param axz row 0, column 1 coefficient\n * @param ayx row 1, column 0 coefficient\n * @param ayy row 1, column 1 coefficient\n * @param ayz row 1, column 2 coefficient\n * @param azx row 2, column 0 coefficient\n * @param azy row 2, column 1 coefficient\n * @param azz row 2, column 2 coefficient\n * @param cx right hand side row 0 coefficient\n * @param cy right hand side row 1 coefficient\n * @param cz right hand side row 2 coefficient\n * @param result optional result.\n * @returns solution vector (u,v,w) or `undefined` if system is singular.\n */\n public static linearSystem3d(\n axx: number, axy: number, axz: number, // first row of matrix\n ayx: number, ayy: number, ayz: number, // second row of matrix\n azx: number, azy: number, azz: number, // second row of matrix\n cx: number, cy: number, cz: number, // right side\n result?: Vector3d,\n ): Vector3d | undefined {\n // determinants of various combinations of columns ...\n const detXYZ = Geometry.tripleProduct(axx, ayx, azx, axy, ayy, azy, axz, ayz, azz);\n const detCYZ = Geometry.tripleProduct(cx, cy, cz, axy, ayy, azy, axz, ayz, azz);\n const detXCZ = Geometry.tripleProduct(axx, ayx, azx, cx, cy, cz, axz, ayz, azz);\n const detXYC = Geometry.tripleProduct(axx, ayx, azx, axy, ayy, azy, cx, cy, cz);\n const s = Geometry.conditionalDivideFraction(detCYZ, detXYZ);\n const t = Geometry.conditionalDivideFraction(detXCZ, detXYZ);\n const u = Geometry.conditionalDivideFraction(detXYC, detXYZ);\n if (s !== undefined && t !== undefined && u !== undefined) {\n return Vector3d.create(s, t, u, result);\n }\n return undefined;\n }\n /**\n * Compute the intersection of three planes.\n * @param xyzA point on the first plane\n * @param normalA normal of the first plane\n * @param xyzB point on the second plane\n * @param normalB normal of the second plane\n * @param xyzC point on the third plane\n * @param normalC normal of the third plane\n * @param result optional result\n * @returns intersection point of the three planes (as a Vector3d), or undefined if at least two planes are parallel.\n */\n public static intersect3Planes(\n xyzA: Point3d, normalA: Vector3d,\n xyzB: Point3d, normalB: Vector3d,\n xyzC: Point3d, normalC: Vector3d, result?: Vector3d): Vector3d | undefined {\n return this.linearSystem3d(\n normalA.x, normalA.y, normalA.z,\n normalB.x, normalB.y, normalB.z,\n normalC.x, normalC.y, normalC.z,\n Geometry.dotProductXYZXYZ(xyzA.x, xyzA.y, xyzA.z, normalA.x, normalA.y, normalA.z),\n Geometry.dotProductXYZXYZ(xyzB.x, xyzB.y, xyzB.z, normalB.x, normalB.y, normalB.z),\n Geometry.dotProductXYZXYZ(xyzC.x, xyzC.y, xyzC.z, normalC.x, normalC.y, normalC.z), result);\n }\n\n /**\n * In rowB, replace `rowB[j] += a * rowB[pivot] * rowA[j] / rowA[pivot]` for `j > pivot`\n * @param rowA row that does not change\n * @param pivotIndex index of pivot (divisor) in rowA.\n * @param rowB row where elimination occurs.\n */\n public static eliminateFromPivot(rowA: Float64Array, pivotIndex: number, rowB: Float64Array, a: number): boolean {\n const n = rowA.length;\n let q = Geometry.conditionalDivideFraction(rowB[pivotIndex], rowA[pivotIndex]);\n if (q === undefined) return false;\n q *= a;\n for (let j = pivotIndex + 1; j < n; j++)\n rowB[j] += q * rowA[j];\n return true;\n }\n /**\n * Solve a pair of bilinear equations\n * * First equation: `a0 + b0 * u + c0 * v + d0 * u * v = 0`\n * * Second equation: `a1 + b1 * u + c1 * v + d1 * u * v = 0`\n */\n public static solveBilinearPair(\n a0: number, b0: number, c0: number, d0: number,\n a1: number, b1: number, c1: number, d1: number,\n ): Point2d[] | undefined {\n return BilinearPolynomial.solveBilinearPair(a0, b0, c0, d0, a1, b1, c1, d1);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriDiagonalSystem.js","sourceRoot":"","sources":["../../../src/numerics/TriDiagonalSystem.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\n\r\n// Enumerated type lies outside of TriDiagonalSystem, as TSLint prevented declaration within class\r\nenum DataState {\r\n RawMatrix,\r\n FactorOK,\r\n FactorFailed,\r\n}\r\n/**\r\n * Linear system operations on a matrix with data only on the diagonal and its immediate left and right neighbors\r\n * @internal\r\n */\r\nexport class TriDiagonalSystem {\r\n\r\n // Lower diagonal, indexed by rows\r\n private _aLeft: Float64Array;\r\n // Upper diagonal, indexed by rows\r\n private _aRight: Float64Array;\r\n // Main diagonal, indexed by rows\r\n private _aDiag: Float64Array;\r\n // Right side vector\r\n private _b: Float64Array;\r\n // Solution vector\r\n private _x: Float64Array;\r\n\r\n private _dataState!: DataState;\r\n\r\n constructor(n: number) {\r\n this._aLeft = new Float64Array(n);\r\n this._aDiag = new Float64Array(n);\r\n this._aRight = new Float64Array(n);\r\n this._b = new Float64Array(n);\r\n this._x = new Float64Array(n);\r\n this.reset();\r\n }\r\n\r\n /** Reset to RawMatrix state with all coefficients zero */\r\n public reset() {\r\n this._dataState = DataState.RawMatrix;\r\n const n = this._aDiag.length;\r\n for (let i = 0; i < n; i++) {\r\n this._aLeft[i] = this._aRight[i] = this._aDiag[i] = this._b[i] = this._x[i] = 0.0;\r\n }\r\n }\r\n /** Install data in a row of the matrix */\r\n public setRow(row: number, left: number, diag: number, right: number) {\r\n this._aLeft[row] = left;\r\n this._aDiag[row] = diag;\r\n this._aRight[row] = right;\r\n }\r\n /** Add to row of matrix */\r\n public addToRow(row: number, left: number, diag: number, right: number) {\r\n this._aLeft[row] += left;\r\n this._aDiag[row] += diag;\r\n this._aRight[row] += right;\r\n }\r\n /** Install data in the right side (B) vector */\r\n public setB(row: number, bb: number) {\r\n this._b[row] = bb;\r\n }\r\n /** Add to an entry in the right side (B) vector */\r\n public addToB(row: number, bb: number) {\r\n this._b[row] += bb;\r\n }\r\n /** Access data from the right side (B) vector */\r\n public getB(row: number): number {\r\n return this._b[row];\r\n }\r\n /** Install data in the solution (X) vector */\r\n public setX(row: number, xx: number) {\r\n this._x[row] = xx;\r\n }\r\n /** Access data from the solution (X) vector */\r\n public getX(row: number): number {\r\n return this._x[row];\r\n }\r\n /** Get method for matrix and vector order */\r\n public order(): number {\r\n return this._aDiag.length;\r\n }\r\n /** Compute product of AX and save as B */\r\n public multiplyAX(): boolean {\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n } else if (this._dataState === DataState.FactorOK) {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n for (let i = 0; i < nm1; i++) {\r\n this._b[i] = this._aDiag[i] * this._x[i] + this._aRight[i] * this._x[i + 1];\r\n }\r\n this._b[nm1] = this._aDiag[nm1] * this._x[nm1];\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n this._b[i] += this._aLeft[i] * this._b[i - 1];\r\n }\r\n\r\n return true;\r\n } else {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n this._b[0] = this._aDiag[0] * this._x[0] + this._aRight[0] * this._x[1];\r\n let i;\r\n for (i = 1; i < nm1; i++) {\r\n this._b[i] = this._aLeft[i] * this._x[i - 1] + this._aDiag[i] * this._x[i] + this._aRight[i] * this._x[i + 1];\r\n }\r\n this._b[nm1] = this._aLeft[nm1] * this._x[n - 2] + this._aDiag[i] * this._x[nm1];\r\n return true;\r\n }\r\n }\r\n\r\n /** Compute product of AX and save as B */\r\n public multiplyAXPoints(pointX: Point3d[], pointB: Point3d[]): boolean {\r\n pointB.length = 0;\r\n while (pointB.length < pointX.length)\r\n pointB.push(Point3d.create());\r\n pointB.length = pointX.length;\r\n\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n } else if (this._dataState === DataState.FactorOK) {\r\n\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n for (let i = 0; i < nm1; i++) {\r\n Point3d.createAdd2Scaled(pointX[i], this._aDiag[i], pointX[i + 1], this._aRight[i], pointB[i]);\r\n }\r\n Point3d.createScale(pointX[nm1], this._aDiag[nm1], pointB[nm1]);\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n pointB[i].plusScaled(pointB[i - 1], this._aLeft[i], pointB[i]);\r\n }\r\n\r\n return true;\r\n } else {\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n Point3d.createAdd2Scaled(pointX[0], this._aDiag[0], pointX[1], this._aRight[0], pointB[0]);\r\n let i;\r\n for (i = 1; i < nm1; i++) {\r\n Point3d.createAdd3Scaled(\r\n pointX[i - 1], this._aLeft[i], pointX[i], this._aDiag[i],\r\n pointX[i + 1], this._aRight[i],\r\n pointB[i]);\r\n }\r\n Point3d.createAdd2Scaled(pointX[n - 2], this._aLeft[nm1], pointX[nm1], this._aDiag[nm1], pointB[nm1]);\r\n return true;\r\n }\r\n }\r\n\r\n /** Multiply the stored factors together to return to plain matrix form */\r\n public defactor(): boolean {\r\n if (this._dataState === DataState.RawMatrix) {\r\n return true;\r\n }\r\n if (this._dataState === DataState.FactorFailed) {\r\n return false;\r\n }\r\n const n = this._aDiag.length;\r\n const nm1 = n - 1;\r\n\r\n for (let i = nm1; i > 0; i--) {\r\n this._aDiag[i] += this._aLeft[i] * this._aRight[i - 1];\r\n this._aLeft[i] *= this._aDiag[i - 1];\r\n }\r\n this._dataState = DataState.RawMatrix;\r\n return true;\r\n }\r\n /** Factor the tridiagonal matrix to LU parts. b, x, not altered */\r\n public factor(): boolean {\r\n if (this._dataState === DataState.FactorOK) {\r\n return true;\r\n }\r\n if (this._dataState !== DataState.RawMatrix) {\r\n return false;\r\n }\r\n this._dataState = DataState.FactorFailed;\r\n\r\n const n1 = this._aDiag.length - 1; // Last pivot index\r\n // Eliminate in subdiagonal.\r\n for (let i = 0; i < n1; i++) {\r\n const r = Geometry.conditionalDivideFraction(this._aLeft[i + 1], this._aDiag[i]);\r\n if (r === undefined)\r\n return false;\r\n this._aLeft[i + 1] = r;\r\n this._aDiag[i + 1] -= r * this._aRight[i];\r\n }\r\n this._dataState = DataState.FactorOK;\r\n return true;\r\n }\r\n /** Solve AX=B. A is left in factored state. B unchanged. */\r\n public factorAndBackSubstitute(): boolean {\r\n const n = this._aDiag.length;\r\n const n1 = n - 1;\r\n if (!this.factor())\r\n return false;\r\n\r\n // Apply L inverse to B, same sequence as was done to A:\r\n for (let i = 0; i < n; i++) {\r\n this._x[i] = this._b[i];\r\n }\r\n for (let i = 1; i < n; i++) {\r\n this._x[i] -= this._aLeft[i] * this._x[i - 1];\r\n }\r\n\r\n // Print (\"LU L Inverse B B\");\r\n // overwrite X with solution of U * X = L inverse B, where RHS is already in X...\r\n // All diagonals are known to be nonzero. Really. Really???\r\n this._x[n1] /= this._aDiag[n1];\r\n\r\n for (let i = n1 - 1; i >= 0; i--) {\r\n this._x[i] = (this._x[i] - this._aRight[i] * this._x[i + 1]) / this._aDiag[i];\r\n }\r\n\r\n return true;\r\n }\r\n /** Solve AX=B. A is left in factored state. B unchanged. vectorB and vectorX may be the same array */\r\n public factorAndBackSubstitutePointArrays(vectorB: Point3d[], vectorX: Point3d[]): boolean {\r\n const n = this._aDiag.length;\r\n if (vectorB.length < n)\r\n return false;\r\n\r\n while (vectorX.length < n)\r\n vectorX.push(Point3d.create(0, 0, 0));\r\n vectorX.length = n;\r\n const n1 = n - 1;\r\n if (!this.factor())\r\n return false;\r\n\r\n // Apply L inverse to B, same sequence as was done to A:\r\n if (vectorB !== vectorX) {\r\n for (let i = 0; i < n; i++) {\r\n vectorX[i].setFrom(vectorB[i]);\r\n }\r\n }\r\n\r\n let a: number;\r\n let b: number;\r\n for (let i = 1; i < n; i++) {\r\n a = this._aLeft[i];\r\n vectorX[i].x -= a * vectorX[i - 1].x;\r\n vectorX[i].y -= a * vectorX[i - 1].y;\r\n vectorX[i].z -= a * vectorX[i - 1].z;\r\n }\r\n\r\n // Print (\"LU L inverse B\");\r\n // overwrite X with solution of U * X = L inverse B, where RHS is already in X...\r\n // All diagonals are known to be nonzero. Really. Really???\r\n b = 1.0 / this._aDiag[n1];\r\n vectorX[n1].x *= b;\r\n vectorX[n1].y *= b;\r\n vectorX[n1].z *= b;\r\n\r\n for (let i = n1 - 1; i >= 0; i--) {\r\n a = this._aRight[i];\r\n b = 1.0 / this._aDiag[i];\r\n vectorX[i].x = (vectorX[i].x - a * vectorX[i + 1].x) * b;\r\n vectorX[i].y = (vectorX[i].y - a * vectorX[i + 1].y) * b;\r\n vectorX[i].z = (vectorX[i].z - a * vectorX[i + 1].z) * b;\r\n }\r\n\r\n return true;\r\n }\r\n /** Allocate a complete copy */\r\n public copy(): TriDiagonalSystem {\r\n const n = this._aDiag.length;\r\n const B = new TriDiagonalSystem(n);\r\n for (let i = 0; i < n; i++) {\r\n B._aLeft[i] = this._aLeft[i];\r\n B._aDiag[i] = this._aDiag[i];\r\n B._aRight[i] = this._aRight[i];\r\n B._x[i] = this._x[i];\r\n B._b[i] = this._b[i];\r\n }\r\n B._dataState = this._dataState;\r\n return B;\r\n }\r\n\r\n /** return an array form that may be useful for display ... */\r\n public flatten(): any {\r\n const n = this._aDiag.length;\r\n const data = [];\r\n\r\n for (let i = 0; i < n; i++) {\r\n data.push(\r\n [i, [this._aLeft[i], this._aDiag[i], this._aRight[i]], this._x[i], this._b[i]]);\r\n }\r\n return data;\r\n }\r\n\r\n /** return an array form that may be useful for display ... */\r\n public flattenWithPoints(xyzB: Point3d[]): any {\r\n const n = this._aDiag.length;\r\n const data = [];\r\n\r\n for (let i = 0; i < n; i++) {\r\n data.push(\r\n [i, [this._aLeft[i], this._aDiag[i], this._aRight[i]], this._x[i], xyzB[i].toJSON()]);\r\n }\r\n return data;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"TriDiagonalSystem.js","sourceRoot":"","sources":["../../../src/numerics/TriDiagonalSystem.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Numerics\n */\n\nimport { Geometry } from \"../Geometry\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\n\n// Enumerated type lies outside of TriDiagonalSystem, as TSLint prevented declaration within class\nenum DataState {\n RawMatrix,\n FactorOK,\n FactorFailed,\n}\n/**\n * Linear system operations on a matrix with data only on the diagonal and its immediate left and right neighbors\n * @internal\n */\nexport class TriDiagonalSystem {\n\n // Lower diagonal, indexed by rows\n private _aLeft: Float64Array;\n // Upper diagonal, indexed by rows\n private _aRight: Float64Array;\n // Main diagonal, indexed by rows\n private _aDiag: Float64Array;\n // Right side vector\n private _b: Float64Array;\n // Solution vector\n private _x: Float64Array;\n\n private _dataState!: DataState;\n\n constructor(n: number) {\n this._aLeft = new Float64Array(n);\n this._aDiag = new Float64Array(n);\n this._aRight = new Float64Array(n);\n this._b = new Float64Array(n);\n this._x = new Float64Array(n);\n this.reset();\n }\n\n /** Reset to RawMatrix state with all coefficients zero */\n public reset() {\n this._dataState = DataState.RawMatrix;\n const n = this._aDiag.length;\n for (let i = 0; i < n; i++) {\n this._aLeft[i] = this._aRight[i] = this._aDiag[i] = this._b[i] = this._x[i] = 0.0;\n }\n }\n /** Install data in a row of the matrix */\n public setRow(row: number, left: number, diag: number, right: number) {\n this._aLeft[row] = left;\n this._aDiag[row] = diag;\n this._aRight[row] = right;\n }\n /** Add to row of matrix */\n public addToRow(row: number, left: number, diag: number, right: number) {\n this._aLeft[row] += left;\n this._aDiag[row] += diag;\n this._aRight[row] += right;\n }\n /** Install data in the right side (B) vector */\n public setB(row: number, bb: number) {\n this._b[row] = bb;\n }\n /** Add to an entry in the right side (B) vector */\n public addToB(row: number, bb: number) {\n this._b[row] += bb;\n }\n /** Access data from the right side (B) vector */\n public getB(row: number): number {\n return this._b[row];\n }\n /** Install data in the solution (X) vector */\n public setX(row: number, xx: number) {\n this._x[row] = xx;\n }\n /** Access data from the solution (X) vector */\n public getX(row: number): number {\n return this._x[row];\n }\n /** Get method for matrix and vector order */\n public order(): number {\n return this._aDiag.length;\n }\n /** Compute product of AX and save as B */\n public multiplyAX(): boolean {\n if (this._dataState === DataState.FactorFailed) {\n return false;\n } else if (this._dataState === DataState.FactorOK) {\n const n = this._aDiag.length;\n const nm1 = n - 1;\n for (let i = 0; i < nm1; i++) {\n this._b[i] = this._aDiag[i] * this._x[i] + this._aRight[i] * this._x[i + 1];\n }\n this._b[nm1] = this._aDiag[nm1] * this._x[nm1];\n\n for (let i = nm1; i > 0; i--) {\n this._b[i] += this._aLeft[i] * this._b[i - 1];\n }\n\n return true;\n } else {\n const n = this._aDiag.length;\n const nm1 = n - 1;\n this._b[0] = this._aDiag[0] * this._x[0] + this._aRight[0] * this._x[1];\n let i;\n for (i = 1; i < nm1; i++) {\n this._b[i] = this._aLeft[i] * this._x[i - 1] + this._aDiag[i] * this._x[i] + this._aRight[i] * this._x[i + 1];\n }\n this._b[nm1] = this._aLeft[nm1] * this._x[n - 2] + this._aDiag[i] * this._x[nm1];\n return true;\n }\n }\n\n /** Compute product of AX and save as B */\n public multiplyAXPoints(pointX: Point3d[], pointB: Point3d[]): boolean {\n pointB.length = 0;\n while (pointB.length < pointX.length)\n pointB.push(Point3d.create());\n pointB.length = pointX.length;\n\n if (this._dataState === DataState.FactorFailed) {\n return false;\n } else if (this._dataState === DataState.FactorOK) {\n\n const n = this._aDiag.length;\n const nm1 = n - 1;\n for (let i = 0; i < nm1; i++) {\n Point3d.createAdd2Scaled(pointX[i], this._aDiag[i], pointX[i + 1], this._aRight[i], pointB[i]);\n }\n Point3d.createScale(pointX[nm1], this._aDiag[nm1], pointB[nm1]);\n\n for (let i = nm1; i > 0; i--) {\n pointB[i].plusScaled(pointB[i - 1], this._aLeft[i], pointB[i]);\n }\n\n return true;\n } else {\n const n = this._aDiag.length;\n const nm1 = n - 1;\n Point3d.createAdd2Scaled(pointX[0], this._aDiag[0], pointX[1], this._aRight[0], pointB[0]);\n let i;\n for (i = 1; i < nm1; i++) {\n Point3d.createAdd3Scaled(\n pointX[i - 1], this._aLeft[i], pointX[i], this._aDiag[i],\n pointX[i + 1], this._aRight[i],\n pointB[i]);\n }\n Point3d.createAdd2Scaled(pointX[n - 2], this._aLeft[nm1], pointX[nm1], this._aDiag[nm1], pointB[nm1]);\n return true;\n }\n }\n\n /** Multiply the stored factors together to return to plain matrix form */\n public defactor(): boolean {\n if (this._dataState === DataState.RawMatrix) {\n return true;\n }\n if (this._dataState === DataState.FactorFailed) {\n return false;\n }\n const n = this._aDiag.length;\n const nm1 = n - 1;\n\n for (let i = nm1; i > 0; i--) {\n this._aDiag[i] += this._aLeft[i] * this._aRight[i - 1];\n this._aLeft[i] *= this._aDiag[i - 1];\n }\n this._dataState = DataState.RawMatrix;\n return true;\n }\n /** Factor the tridiagonal matrix to LU parts. b, x, not altered */\n public factor(): boolean {\n if (this._dataState === DataState.FactorOK) {\n return true;\n }\n if (this._dataState !== DataState.RawMatrix) {\n return false;\n }\n this._dataState = DataState.FactorFailed;\n\n const n1 = this._aDiag.length - 1; // Last pivot index\n // Eliminate in subdiagonal.\n for (let i = 0; i < n1; i++) {\n const r = Geometry.conditionalDivideFraction(this._aLeft[i + 1], this._aDiag[i]);\n if (r === undefined)\n return false;\n this._aLeft[i + 1] = r;\n this._aDiag[i + 1] -= r * this._aRight[i];\n }\n this._dataState = DataState.FactorOK;\n return true;\n }\n /** Solve AX=B. A is left in factored state. B unchanged. */\n public factorAndBackSubstitute(): boolean {\n const n = this._aDiag.length;\n const n1 = n - 1;\n if (!this.factor())\n return false;\n\n // Apply L inverse to B, same sequence as was done to A:\n for (let i = 0; i < n; i++) {\n this._x[i] = this._b[i];\n }\n for (let i = 1; i < n; i++) {\n this._x[i] -= this._aLeft[i] * this._x[i - 1];\n }\n\n // Print (\"LU L Inverse B B\");\n // overwrite X with solution of U * X = L inverse B, where RHS is already in X...\n // All diagonals are known to be nonzero. Really. Really???\n this._x[n1] /= this._aDiag[n1];\n\n for (let i = n1 - 1; i >= 0; i--) {\n this._x[i] = (this._x[i] - this._aRight[i] * this._x[i + 1]) / this._aDiag[i];\n }\n\n return true;\n }\n /** Solve AX=B. A is left in factored state. B unchanged. vectorB and vectorX may be the same array */\n public factorAndBackSubstitutePointArrays(vectorB: Point3d[], vectorX: Point3d[]): boolean {\n const n = this._aDiag.length;\n if (vectorB.length < n)\n return false;\n\n while (vectorX.length < n)\n vectorX.push(Point3d.create(0, 0, 0));\n vectorX.length = n;\n const n1 = n - 1;\n if (!this.factor())\n return false;\n\n // Apply L inverse to B, same sequence as was done to A:\n if (vectorB !== vectorX) {\n for (let i = 0; i < n; i++) {\n vectorX[i].setFrom(vectorB[i]);\n }\n }\n\n let a: number;\n let b: number;\n for (let i = 1; i < n; i++) {\n a = this._aLeft[i];\n vectorX[i].x -= a * vectorX[i - 1].x;\n vectorX[i].y -= a * vectorX[i - 1].y;\n vectorX[i].z -= a * vectorX[i - 1].z;\n }\n\n // Print (\"LU L inverse B\");\n // overwrite X with solution of U * X = L inverse B, where RHS is already in X...\n // All diagonals are known to be nonzero. Really. Really???\n b = 1.0 / this._aDiag[n1];\n vectorX[n1].x *= b;\n vectorX[n1].y *= b;\n vectorX[n1].z *= b;\n\n for (let i = n1 - 1; i >= 0; i--) {\n a = this._aRight[i];\n b = 1.0 / this._aDiag[i];\n vectorX[i].x = (vectorX[i].x - a * vectorX[i + 1].x) * b;\n vectorX[i].y = (vectorX[i].y - a * vectorX[i + 1].y) * b;\n vectorX[i].z = (vectorX[i].z - a * vectorX[i + 1].z) * b;\n }\n\n return true;\n }\n /** Allocate a complete copy */\n public copy(): TriDiagonalSystem {\n const n = this._aDiag.length;\n const B = new TriDiagonalSystem(n);\n for (let i = 0; i < n; i++) {\n B._aLeft[i] = this._aLeft[i];\n B._aDiag[i] = this._aDiag[i];\n B._aRight[i] = this._aRight[i];\n B._x[i] = this._x[i];\n B._b[i] = this._b[i];\n }\n B._dataState = this._dataState;\n return B;\n }\n\n /** return an array form that may be useful for display ... */\n public flatten(): any {\n const n = this._aDiag.length;\n const data = [];\n\n for (let i = 0; i < n; i++) {\n data.push(\n [i, [this._aLeft[i], this._aDiag[i], this._aRight[i]], this._x[i], this._b[i]]);\n }\n return data;\n }\n\n /** return an array form that may be useful for display ... */\n public flattenWithPoints(xyzB: Point3d[]): any {\n const n = this._aDiag.length;\n const data = [];\n\n for (let i = 0; i < n; i++) {\n data.push(\n [i, [this._aLeft[i], this._aDiag[i], this._aRight[i]], this._x[i], xyzB[i].toJSON()]);\n }\n return data;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnionFind.js","sourceRoot":"","sources":["../../../src/numerics/UnionFind.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"UnionFind.js","sourceRoot":"","sources":["../../../src/numerics/UnionFind.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/**\n * Implement the classic UnionFind algorithm, viz https://en.wikipedia.org/wiki/Disjoint-set_data_structure\n * * Each of the entities being merged exists as an entry in an array.\n * * The index in the array is the (only!) identification of the entity.\n * * The array entry is the index of a parent in the merge process.\n * * New entries are created as singletons pointing to themselves.\n * * Merge (i,j) merges the collections containing entries (i) and (j) into a single collection.\n * * The merge process updates the indices \"above\" (i) and (j)\n * * The whole process is extraordinarily efficient regardless of the order that the (i,j) merges are announced.\n * @internal\n */\nexport class UnionFindContext {\n private _parentArray: number[];\n /** Create a set initialized with numLeaf singleton subsets */\n public constructor(numLeaf: number = 0) {\n this._parentArray = [];\n for (let i = 0; i < numLeaf; i++)\n this._parentArray.push(i);\n }\n /** Return the number of leaves. */\n public get length(): number { return this._parentArray.length; }\n /** test if index is within the valid index range. */\n public isValidIndex(index: number): boolean {\n return 0 <= index && index < this._parentArray.length;\n }\n /** Return the index of a new singleton set */\n public addLeaf(): number {\n const index = this._parentArray.length;\n this._parentArray.push(index);\n return index;\n }\n /**\n * * follow links to parent\n * * after finding the parent, repeat the search and reset parents along the way.\n * * If index is invalid, return index unchanged.\n * @param index start of search\n */\n public findRoot(index: number): number {\n if (!this.isValidIndex(index))\n return index;\n let currentIndex = index;\n let nextIndex = this._parentArray[index];\n while (nextIndex !== currentIndex) {\n currentIndex = nextIndex;\n nextIndex = this._parentArray[currentIndex];\n }\n const rootIndex = currentIndex;\n // sweep up again and shorten the paths.\n currentIndex = index;\n while (currentIndex !== rootIndex) {\n nextIndex = this._parentArray[currentIndex];\n this._parentArray[currentIndex] = rootIndex;\n currentIndex = nextIndex;\n }\n return rootIndex;\n }\n\n /** Merge the subsets containing index (i) and (j)\n * * Look up the root of each.\n * * Fix up the path to the root so it points to the root.\n * * Return the root index of the merged set.\n * * If either index is invalid return index i with no changes.\n */\n public mergeSubsets(i: number, j: number): number {\n if (!this.isValidIndex(i) || !this.isValidIndex(j))\n return i;\n const rootIndexI = this.findRoot(i);\n const rootIndexJ = this.findRoot(j);\n if (rootIndexI !== rootIndexJ)\n this._parentArray[rootIndexI] = rootIndexJ;\n // cleanup a little more ...\n return this.findRoot(i);\n }\n /** Return the immediate parent of index (i), with no fixups\n * * If index is invalid, return it.\n */\n public askParent(index: number): number {\n if (!this.isValidIndex(index))\n return index;\n return this._parentArray[index];\n }\n /** Return the number of entries which are their own parent. */\n public countRoots(): number {\n let numRoot = 0;\n const numLeaf = this._parentArray.length;\n for (let i = 0; i < numLeaf; i++)\n if (this._parentArray[i] === i)\n numRoot++;\n return numRoot;\n }\n /** Return the number of entries whose parent is not a root. */\n public countNonTrivialPaths(): number {\n let numLong = 0;\n const numLeaf = this._parentArray.length;\n for (let i = 0; i < numLeaf; i++) {\n const j = this._parentArray[i];\n if (j !== i && this._parentArray[j] !== j)\n numLong++;\n }\n return numLong;\n }\n /** Return an array of all root indices.\n * * This array is sorted.\n */\n public collectRootIndices(): number[] {\n const roots = [];\n const numLeaf = this._parentArray.length;\n for (let i = 0; i < numLeaf; i++) {\n if (this._parentArray[i] === i)\n roots.push(i);\n }\n return roots;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UsageSums.js","sourceRoot":"","sources":["../../../src/numerics/UsageSums.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"UsageSums.js","sourceRoot":"","sources":["../../../src/numerics/UsageSums.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Geometry } from \"../Geometry\";\nimport { Range1d } from \"../geometry3d/Range\";\n\n/**\n * Accumulator for computing average and standard deviations.\n * * Usual usage pattern:\n * * create with `sums = new UsageSums ()`\n * * announce data values with any combination of\n * * `sums.accumulate (x: number)`\n * * `sums.accumulateArray (data: numberArray)`\n * * query properties at any time:\n * * `sums.mean`\n * * `sums.count`\n * * `sums.meanSquare`\n * * `sums.standardDeviation`\n * * `sums.minMax`\n * * Optional `origin`\n * * if `origin` is nonzero:\n * * when a value `x` is announced to the `accumulate(x)` method, the value used for sums is `(x-origin)`\n * * All queries (mean, minMax, meanSquare, standardDeviation) return values relative to the origin.\n * * The origin can be reset in two different ways:\n * * `setOrigin(a)` sets the saved origin value to `a`, but leaves sums unchanged.\n * * This affects subsequence how sums are changed by `announce(x)`\n * * `shiftOriginAndSums` sets the origin (like `sums.setOrigin (a))` and also corrects all sums and minMax so they appear that the new origin had been in effect during all prior `accumulate(x)` calls.\n * @internal\n */\nexport class UsageSums {\n /** number of values accumulated. */\n private _count: number;\n /** Sum of values sent to `accumulate` (with origin subtracted away) */\n private _sumX: number;\n private _sumXX: number;\n private _minMax: Range1d;\n /** working origin.\n * * All other values -- sum0, sum1, sum2, min,max -- are \"from this origin\"\n */\n private _origin: number;\n\n /** Constructor:\n * * All sums 0\n * * min and max set to extreme values.\n * * origin assigned.\n */\n public constructor(origin: number = 0) {\n this._minMax = Range1d.createNull();\n this._count = this._sumX = this._sumXX = 0;\n this._origin = origin;\n }\n /** Return the number of samples seen */\n public get count(): number { return this._count; }\n /** return the mean of all samples.\n * * Return 0 if no samples\n */\n public get mean(): number { return this._count > 0 ? this._sumX / this._count : 0.0; }\n /** Return the mean of squared samples.\n * * Return 0 if no samples.\n */\n public get meanSquare(): number { return this._count > 0 ? this._sumXX / this._count : 0.0; }\n public get minMax(): Range1d { return this._minMax.clone(); }\n\n /**\n * Return the \"biased standard deviation\" (https://en.wikipedia.org/wiki/Standard_deviation)\n * * This is zero if count is zero.\n */\n public get standardDeviation(): number {\n if (this._count < 1)\n return 0.0;\n const xBar = this.mean;\n const sumXX = this._sumXX;\n const sumX = this._sumX;\n return Math.sqrt((sumXX - 2 * xBar * sumX + this._count * xBar * xBar) / this._count);\n }\n /** Reinitialize all sums.\n * * origin is unchanged\n */\n public clearSums() {\n this._count = this._sumX = this._sumXX = 0;\n this._minMax.setNull();\n }\n /**\n * return the origin being used in the `accumulate(x)` method.\n */\n public get origin(): number { return this._origin; }\n /**\n * Reset the origin.\n * * Former sums are unchanged !!\n * @param origin new origin\n */\n public setOrigin(origin: number) {\n this._origin = origin;\n }\n /**\n * * reset the origin\n * * adjust all sums to what they would be if the new origin had been in effect.\n */\n public shiftOriginAndSums(origin: number) {\n const delta = origin - this._origin;\n this._origin = origin;\n // adjust sumXX first to get old sumX value before it is modified.\n this._sumXX = this._sumXX - 2 * delta * this._sumX + this._count * delta * delta;\n this._sumX = this._sumX - this._count * delta;\n this._minMax.cloneTranslated(-delta, this._minMax);\n }\n /** Accumulate a single value */\n public accumulate(x: number) {\n x = x - this._origin;\n this._count += 1;\n this._sumX += x;\n this._sumXX += x * x;\n this._minMax.extendX(x);\n }\n /** Accumulate a single value */\n public accumulateArray(xArray: number[]) {\n for (const x of xArray)\n this.accumulate(x);\n }\n /** Clone all content (origin, count, sums, minMax) */\n public clone(result?: UsageSums): UsageSums {\n if (!result)\n result = new UsageSums();\n this._minMax.clone(result._minMax);\n result._count = this._count;\n result._origin = this._origin;\n result._sumX = this._sumX;\n result._sumXX = this._sumXX;\n return result;\n }\n /** Compare all content. */\n public isAlmostEqual(other: UsageSums): boolean {\n return Geometry.isAlmostEqualNumber(this._sumX, other._sumX)\n && Geometry.isAlmostEqualNumber(this._sumXX, other._sumXX)\n && Geometry.isAlmostEqualNumber(this._origin, other._origin)\n && this._count === other._count\n && this._minMax.isAlmostEqual(other._minMax);\n }\n}\n"]}
|