@itwin/core-geometry 5.4.0-dev.4 → 5.4.0-dev.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/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/Voronoi.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/Voronoi.js.map +1 -1
- package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BezierPolynomials.js","sourceRoot":"","sources":["../../../src/numerics/BezierPolynomials.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\n// import { Angle, AngleSweep, Geometry } from \"../Geometry\";\nimport { Geometry } from \"../Geometry\";\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\nimport { PascalCoefficients } from \"./PascalCoefficients\";\nimport { AnalyticRoots, Degree2PowerPolynomial, Degree3PowerPolynomial, Degree4PowerPolynomial } from \"./Polynomials\";\n\n/**\n * * BezierCoffs is an abstract base class for one-dimensional (u to f(u)) Bezier polynomials.\n * * The base class carries a Float64Array with coefficients.\n * * The Float64Array is NOT Growable unless derived classes add logic to do so. Its length is the Bezier polynomial order.\n * * The family of derived classes is starts with low order (at least linear through cubic) with highly optimized calculations.\n * * The general degree Bezier class also uses this as its base class.\n * * The length of the coefficient array is NOT always the bezier order. Use the `order` property to access the order.\n * @internal\n */\nexport abstract class BezierCoffs {\n /** Array of coefficients.\n * * The number of coefficients is the order of the Bezier polynomial.\n */\n public coffs: Float64Array;\n /**\n * * If `data` is a number, an array of that size is created with zeros.\n * * If `data` is a Float64Array, it is cloned (NOT CAPTURED)\n * * If `data` is a number array, its values are copied.\n */\n constructor(data: number | Float64Array | number[]) {\n if (data instanceof Float64Array) {\n this.coffs = data.slice();\n } else if (Array.isArray(data)) {\n this.coffs = new Float64Array(data.length);\n let i = 0;\n for (const a of data) this.coffs[i++] = a;\n } else {\n this.coffs = new Float64Array(data);\n }\n }\n /**\n * * Ensure the coefficient array size matches order. (Reallocate as needed)\n * * fill with zeros.\n * @param order required order\n */\n protected allocateToOrder(order: number) {\n if (this.coffs.length !== order) {\n this.coffs = new Float64Array(order);\n } else {\n this.coffs.fill(0);\n }\n }\n /**\n * Evaluate the basis functions at specified u.\n * @param u bezier parameter for evaluation.\n * @param result optional destination of length `order`. If insufficient length, a new array is returned.\n * @returns array of `order` basis function values.\n */\n public abstract basisFunctions(u: number, result?: Float64Array): Float64Array;\n\n /**\n * Sum the control points weighted by the basis function values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\n * @returns array of `n` summed basis function values.\n */\n public abstract sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array;\n\n /**\n * Sum the control points weighted by the basis function derivative values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\n * @returns array of `n` summed basis function derivative values.\n */\n public abstract sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array;\n\n /** Return a deep clone of this bezier. */\n public abstract clone(): BezierCoffs;\n /**\n * create an object of same order with zero coefficients.\n * The base implementation makes a generic Bezier of the same order.\n */\n public createPeer(): BezierCoffs {\n const peer = new UnivariateBezier(this.order);\n return peer;\n }\n /** Evaluate the polynomial at u.\n * @param u bezier parameter for evaluation.\n */\n public abstract evaluate(u: number): number;\n /** The order (number of coefficients) as a readable property */\n public get order(): number { return this.coffs.length; }\n /** Copy coefficients from other Bezier. Note that the coefficient count (order) of \"this\" can change. */\n public copyFrom(other: BezierCoffs): void {\n if (this.order === other.order)\n for (let i = 0; i < this.coffs.length; i++) { this.coffs[i] = other.coffs[i]; }\n else this.coffs = other.coffs.slice();\n }\n /**\n * Apply a scale factor to all coefficients.\n * @param scale scale factor to apply to all coefficients.\n */\n public scaleInPlace(scale: number): void {\n for (let i = 0; i < this.coffs.length; i++)\n this.coffs[i] *= scale;\n }\n /** add a constant to each coefficient.\n * @param a constant to add.\n */\n public addInPlace(a: number): void {\n for (let i = 0; i < this.coffs.length; i++)\n this.coffs[i] += a;\n }\n /** Compute parameter values where the bezier value matches targetValue.\n * * The base class finds roots only in 01. (i.e. ignores _restrictTo01)\n * * Order-specific implementations apply special case analytic logic, e.g. for degree 1,2,3,4.\n */\n public roots(targetValue: number, _restrictTo01: boolean): number[] | undefined {\n const bezier = UnivariateBezier.create(this);\n bezier.addInPlace(- targetValue);\n bezier.clampZero();\n const roots = UnivariateBezier.deflateRoots(bezier);\n return this.filter01(roots, true);\n }\n /** Given an array of numbers, optionally remove those not in the 0..1 interval.\n * @param roots candidate values\n * @param restrictTo01 If false, no filtering occurs and the pointer to the original array is unchanged.\n * If true, filtering is done and values are returned, possibly in a new array and possibly in the original.\n */\n public filter01(roots: number[] | undefined, restrictTo01 = false): number[] | undefined {\n if (!roots || !restrictTo01)\n return roots;\n let anyFound = false;\n for (const r of roots) {\n if (Geometry.isIn01(r)) {\n anyFound = true;\n break;\n }\n }\n if (anyFound) {\n const roots01: number[] = [];\n for (const r of roots) {\n if (Geometry.isIn01(r))\n roots01.push(r);\n }\n return roots01;\n }\n return undefined;\n }\n /** zero out all coefficients. */\n public zero(): void {\n this.coffs.fill(0);\n }\n /** Subdivide -- write results into caller-supplied bezier coffs (which must be of the same order) */\n public subdivide(u: number, left: BezierCoffs, right: BezierCoffs): boolean {\n const order = this.order;\n if (left.order !== order || right.order !== order)\n return false;\n const v = 1.0 - u;\n right.copyFrom(this);\n // each left will be filled in directly, so there is no need to initialize it.\n let n1 = order - 1; // number of interpolations in inner loop.\n for (let i0 = 0; i0 < order; i0++) {\n left.coffs[i0] = right.coffs[0];\n for (let i = 0; i < n1; i++)\n right.coffs[i] = v * right.coffs[i] + u * right.coffs[i + 1];\n n1--;\n }\n return true;\n }\n /** Return the maximum absolute difference between coefficients of two sets of BezierCoffs */\n public static maxAbsDiff(dataA: BezierCoffs, dataB: BezierCoffs): number | undefined {\n const order = dataA.order;\n if (dataB.order !== order)\n return undefined;\n let d = 0.0;\n let d1;\n for (let i = 0; i < order; i++) {\n d1 = Math.abs(dataA.coffs[i] - dataB.coffs[i]);\n if (d1 > d)\n d = d1;\n }\n return d;\n }\n /** Assist Newton with slow-to-converge roots at e.g., Bezier endpoints. */\n public clampZero(maxAbs: number = Geometry.smallFloatingPoint): void {\n if (maxAbs > 0) {\n for (let i = 0; i < this.coffs.length; ++i) {\n const coff = this.coffs[i];\n if (coff && Math.abs(coff) < maxAbs)\n this.coffs[i] = 0.0;\n }\n }\n }\n}\n/**\n * Static methods to operate on univariate bezier polynomials, with coefficients in simple Float64Array or as components of blocked arrays.\n * @internal\n */\nexport class BezierPolynomialAlgebra {\n /**\n * * Univariate bezierA has its coefficients at offset indexA in each block within the array of blocks.\n * * Symbolically: `product(s) += scale * (constA - polynomialA(s)) *polynomialB(s)`\n * * Where coefficients of polynomialA(s) are in column indexA and coefficients of polynomialB(s) are differences within column indexB.\n * * Treating data as 2-dimensional array: `product = sum (iA) sum (iB) (constA - basisFunction[iA} data[indexA][iA]) * basisFunction[iB] * (dataOrder-1)(data[iB + 1][indexB] - data[iB][indexB])`\n * * Take no action if product length is other than `dataOrder + dataOrder - 2`\n */\n public static accumulateScaledShiftedComponentTimesComponentDelta(\n product: Float64Array,\n data: Float64Array,\n dataBlockSize: number,\n dataOrder: number,\n scale: number,\n indexA: number,\n constA: number,\n indexB: number) {\n const orderB = dataOrder - 1; // coefficients of the first difference are implicitly present as differences of adjacent entries.\n const orderA = dataOrder;\n const orderC = dataOrder + orderB - 1;\n if (product.length !== orderC) return;\n const coffA = PascalCoefficients.getRow(orderA - 1);\n const coffB = PascalCoefficients.getRow(orderB - 1);\n const coffC = PascalCoefficients.getRow(orderC - 1);\n let qA;\n for (let a = 0; a < orderA; a++) {\n qA = scale * (constA + data[indexA + a * dataBlockSize]) * coffA[a];\n for (let b = 0, k = indexB; b < orderB; b++, k += dataBlockSize) {\n product[a + b] += qA * coffB[b] * (data[k + dataBlockSize] - data[k]) / coffC[a + b];\n }\n }\n }\n /**\n * * Univariate bezierA has its coefficients at offset indexA in each block within the array of blocks.\n * * Univariate bezierB has its coefficients at offset indexB in each block within the array of blocks.\n * * return the sum coefficients for `constA * polynomialA + constB * polynomialB`\n * * Symbolically: `product(s) = (constA * polynomialA(s) + constB * polynomialB(s)`\n * * The two polynomials are the same order, so this just direct sum of scaled coefficients.\n *\n * * Take no action if product length is other than `dataOrder + dataOrder - 2`\n */\n public static scaledComponentSum(sum: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, indexA: number, constA: number, indexB: number, constB: number) {\n const orderA = dataOrder;\n if (sum.length !== orderA) return;\n for (let a = 0, rowBase = 0; a < orderA; a++, rowBase += dataBlockSize) {\n sum[a] = constA * data[rowBase + indexA] + constB * data[rowBase + indexB];\n }\n }\n /**\n * * Univariate bezier has its coefficients at offset index in each block within the array of blocks.\n * * return the (dataOrder - 1) differences,\n *\n * * Take no action if difference length is other than `dataOrder - 1`\n */\n public static componentDifference(difference: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, index: number) {\n const orderA = dataOrder;\n const orderDiff = orderA - 1;\n if (difference.length !== orderDiff) return;\n for (let i = 0, k = index; i < orderDiff; k += dataBlockSize, i++)\n difference[i] = data[k + dataBlockSize] - data[k];\n }\n\n /**\n * * Univariate bezierA has its coefficients in dataA[i]\n * * Univariate bezierB has its coefficients in dataB[i]\n * * return the product coefficients for polynomialA(s) * polynomialB(s) * scale\n * * Take no action if product length is other than `orderA + orderB - 1`\n */\n public static accumulateProduct(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale: number = 1.0) {\n const orderA = dataA.length;\n const orderB = dataB.length;\n const orderC = orderA + orderB - 1;\n if (product.length !== orderC) return;\n let a: number;\n let b: number;\n let qA: number;\n const coffA = PascalCoefficients.getRow(orderA - 1);\n const coffB = PascalCoefficients.getRow(orderB - 1);\n const coffC = PascalCoefficients.getRow(orderC - 1);\n for (a = 0; a < orderA; a++) {\n qA = scale * coffA[a] * dataA[a];\n for (b = 0; b < orderB; b++) {\n product[a + b] += qA * coffB[b] * dataB[b] / coffC[a + b];\n }\n }\n }\n\n /**\n * * Univariate bezierA has its coefficients in dataA[i]\n * * Univariate bezierB has its coefficients in dataB[i]\n * * return the product coefficients for polynomialADifferences(s) * polynomialB(s) * scale\n * * Take no action if product length is other than `orderA + orderB - 2`\n */\n public static accumulateProductWithDifferences(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale: number = 1.0) {\n const orderA = dataA.length - 1; // We deal with its differences, which are lower order !!!\n const orderB = dataB.length;\n const orderC = orderA + orderB - 1;\n if (product.length !== orderC) return;\n let a: number;\n let b: number;\n let qA: number;\n const coffA = PascalCoefficients.getRow(orderA - 1);\n const coffB = PascalCoefficients.getRow(orderB - 1);\n const coffC = PascalCoefficients.getRow(orderC - 1);\n for (a = 0; a < orderA; a++) {\n qA = scale * coffA[a] * (dataA[a + 1] - dataA[a]);\n for (b = 0; b < orderB; b++) {\n product[a + b] += qA * coffB[b] * dataB[b] / coffC[a + b];\n }\n }\n }\n\n /**\n * * Univariate bezier has its coefficients in data[i]\n * * return the difference data[i+1]-data[i] in difference.\n * * Take no action if product length is other than `orderA + orderB - 1`\n */\n public static univariateDifference(data: Float64Array, difference: Float64Array) {\n const differenceOrder = difference.length;\n if (difference.length + 1 !== differenceOrder)\n for (let i = 0; i < differenceOrder; i++) {\n difference[i] = data[i + 1] - data[i];\n }\n }\n /**\n * * Univariate bezierA has its coefficients in dataA[i]\n * * Univariate bezierB has its coefficients in resultB[i]\n * * add (with no scaling) bezierA to bezierB\n * * Take no action if resultB.length is other than dataA.length.\n */\n public static accumulate(dataA: Float64Array, orderA: number, resultB: Float64Array) {\n if (resultB.length !== orderA) return;\n for (let i = 0; i < orderA; i++) {\n resultB[i] += dataA[i];\n }\n }\n\n}\n/**\n * * The UnivariateBezier class is a univariate bezier polynomial with no particular order.\n * * More specific classes -- Order2Bezier, Order3Bezier, Order4Bezier -- can be used when a fixed order is known and the more specialized implementations are appropriate.\n * * When working with xy and xyz curves whose order is the common 2,3,4, various queries (e.g. project point to curve)\n * generate higher order one-dimensional bezier polynomials with order that is a small multiple of the\n * curve order. Hence those polynomials commonly reach degree 8 to 12.\n * * Higher order bezier polynomials are possible, but performance and accuracy issues become significant.\n * * Some machine-level constraints apply for curves of extremely high order, e.g. 70. For instance, at that level use of\n * Pascal triangle coefficients becomes inaccurate because IEEE doubles cannot represent integers that\n * large.\n * @internal\n */\nexport class UnivariateBezier extends BezierCoffs {\n private _order: number;\n /** Query the order of this bezier. */\n public override get order() { return this._order; }\n public constructor(data: number | Float64Array | number[]) {\n super(data);\n this._order = super.order;\n }\n\n /** (Re) initialize with given order (and all coffs zero) */\n public allocateOrder(order: number) {\n if (this._order !== order) {\n super.allocateToOrder(order);\n this._order = order;\n }\n this.coffs.fill(0);\n }\n /** Return a copy, optionally with coffs array length reduced to actual order. */\n public clone(compressToMinimalAllocation: boolean = false): UnivariateBezier {\n if (compressToMinimalAllocation) {\n const result1 = new UnivariateBezier(this.order);\n result1.coffs = this.coffs.slice(0, this.order);\n return result1;\n }\n const result = new UnivariateBezier(this.coffs.length);\n result._order = this._order;\n result.coffs = this.coffs.slice();\n return result;\n }\n /** Create a new bezier which is a copy of other.\n * * Note that `other` may be a more specialized class such as `Order2Bezier`, but the result is general `Bezier`\n * @param other coefficients to copy.\n */\n public static create(other: BezierCoffs): UnivariateBezier {\n const result = new UnivariateBezier(other.order);\n result.coffs = other.coffs.slice();\n return result;\n }\n /**\n * copy coefficients into a new bezier.\n * @param coffs coefficients for bezier\n */\n public static createCoffs(data: number | number[] | Float64Array): UnivariateBezier {\n return new UnivariateBezier(data);\n }\n /**\n * copy coefficients into a new bezier.\n * * if result is omitted, a new UnivariateBezier is allocated and returned.\n * * if result is present but has other order, its coefficients are reallocated\n * * if result is present and has matching order, the values are replace.\n * @param coffs coefficients for bezier\n * @param index0 first index to access\n * @param order number of coefficients, i.e. order for the result\n * @param result optional result.\n *\n */\n public static createArraySubset(coffs: number[] | Float64Array, index0: number, order: number, result?: UnivariateBezier): UnivariateBezier {\n if (!result)\n result = new UnivariateBezier(order);\n else if (result.order !== order)\n result.allocateToOrder(order);\n for (let i = 0; i < order; i++)\n result.coffs[i] = coffs[index0 + i];\n return result;\n }\n\n /**\n * Create a product of 2 bezier polynomials.\n * @param bezierA\n * @param bezierB\n */\n public static createProduct(bezierA: BezierCoffs, bezierB: BezierCoffs): UnivariateBezier {\n const result = new UnivariateBezier(bezierA.order + bezierB.order - 1);\n const pascalA = PascalCoefficients.getRow(bezierA.order - 1);\n const pascalB = PascalCoefficients.getRow(bezierB.order - 1);\n const pascalC = PascalCoefficients.getRow(bezierA.order + bezierB.order - 2);\n for (let iA = 0; iA < bezierA.order; iA++) {\n const a = bezierA.coffs[iA] * pascalA[iA];\n for (let iB = 0; iB < bezierB.order; iB++) {\n const b = bezierB.coffs[iB] * pascalB[iB];\n const iC = iA + iB;\n const c = pascalC[iC];\n result.coffs[iC] += a * b / c;\n }\n }\n return result;\n }\n /**\n * Add a squared bezier polynomial (given as simple coffs)\n * @param coffA coefficients of bezier to square\n * @param scale scale factor\n * @return false if order mismatch -- must have `2 * bezierA.length === this.order + 1`\n */\n public addSquaredSquaredBezier(coffA: Float64Array, scale: number): boolean {\n const orderA = coffA.length;\n const orderC = this.order;\n if (orderA * 2 !== orderC + 1) return false;\n const pascalA = PascalCoefficients.getRow(orderA - 1);\n const pascalC = PascalCoefficients.getRow(orderC - 1);\n const coffC = this.coffs;\n for (let iA = 0; iA < orderA; iA++) {\n const a = coffA[iA] * pascalA[iA] * scale;\n for (let iB = 0; iB < orderA; iB++) {\n const b = coffA[iB] * pascalA[iB];\n const iC = iA + iB;\n const c = pascalC[iC];\n coffC[iC] += a * b / c;\n }\n }\n return true;\n }\n /** Add a constant to each coefficient */\n public addConstant(a: number) {\n for (let i = 0; i < this.coffs.length; i++) {\n this.coffs[i] += a;\n }\n }\n private _basisValues?: Float64Array;\n /**\n * Evaluate the basis functions at specified u.\n * @param u bezier parameter for evaluation.\n * @param result optional destination of length `order`. If insufficient length, a new array is returned.\n * @returns array of `order` basis function values.\n */\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\n if (!result || result.length < this.order)\n result = new Float64Array(this.order);\n let i = 0;\n for (const a of this._basisValues)\n result[i++] = a;\n return result;\n }\n /**\n * Sum weights[i] * data[...] in blocks of numPerBlock.\n * This is for low level use -- counts are not checked.\n * @param weights input array of length `numWeights`\n * @param numWeights number of weights\n * @param data input array of length `numWeights * numPerBlock`\n * @param numPerBlock control point dimension\n * @param result output array of length `numPerBlock`\n */\n private static sumWeightedBlocks(weights: Float64Array, numWeights: number, data: Float64Array, numPerBlock: number, result: Float64Array) {\n for (let k0 = 0; k0 < numPerBlock; k0++) {\n result[k0] = 0;\n }\n let k = 0;\n let i;\n for (let iWeight = 0; iWeight < numWeights; iWeight++) {\n const w = weights[iWeight];\n for (i = 0; i < numPerBlock; i++) {\n result[i] += w * data[k++];\n }\n }\n }\n /**\n * Sum the control points weighted by the basis function values at parameter u.\n * @param u bezier parameter\n * @param polygon packed multidimensional control points. ASSUMED contains `blockSize*order` values.\n * @param blockSize dimension of control points\n * @param result optional preallocated array of length `blockSize` to fill and return. If insufficient length, a newly created array is returned.\n * @returns array of `blockSize` summed basis function values.\n */\n public sumBasisFunctions(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array {\n if (!result || result.length < blockSize)\n result = new Float64Array(blockSize);\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\n UnivariateBezier.sumWeightedBlocks(this._basisValues, this.order, polygon, blockSize, result);\n return result;\n }\n\n /**\n * Sum the control points weighted by the basis function derivative values at parameter u.\n * @param u bezier parameter\n * @param polygon packed multidimensional control points. ASSUMED contains `blockSize*order` values.\n * @param blockSize dimension of control points\n * @param result optional preallocated array of length `blockSize` to fill and return. If insufficient length, a newly created array is returned.\n * @returns array of `blockSize` summed basis function derivative values.\n */\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array {\n if (!result || result.length < blockSize)\n result = new Float64Array(blockSize);\n this._basisValues = PascalCoefficients.getBezierBasisDerivatives(this.order, u, this._basisValues);\n UnivariateBezier.sumWeightedBlocks(this._basisValues, this.order, polygon, blockSize, result);\n return result;\n }\n\n /**\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\n * @param u parameter for evaluation\n */\n public evaluate(u: number): number {\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\n let sum = 0;\n for (let i = 0; i < this.order; i++)\n sum += this._basisValues[i] * this.coffs[i];\n return sum;\n }\n /**\n * Apply deflation from the left to a bezier.\n * * This assumes that the left coefficient is zero.\n */\n public deflateLeft() {\n // coefficient 0 is zero (caller promises.)\n // get bezier coffs for both orders ...\n const order1 = this.order;\n const order0 = order1 - 1;\n const coff0 = PascalCoefficients.getRow(order0 - 1);\n const coff1 = PascalCoefficients.getRow(order1 - 1);\n let a;\n for (let i = 0; i < order0; i++) {\n a = this.coffs[i + 1];\n this.coffs[i] = a * coff1[i + 1] / coff0[i];\n }\n this._order--;\n }\n\n /**\n * Apply deflation from the right to a frame.\n * * This assumes that the right coefficient is zero.\n * @param frame frame description\n */\n public deflateRight() {\n // final coefficient is zero (caller promises.)\n // get bezier coffs for both orders ...\n const order1 = this.order;\n const order0 = order1 - 1;\n const coff0 = PascalCoefficients.getRow(order0 - 1);\n const coff1 = PascalCoefficients.getRow(order1 - 1);\n let a, b;\n for (let i = 0; i < order0; i++) {\n a = this.coffs[i];\n b = a * coff1[i] / coff0[i];\n this.coffs[i] = b;\n }\n this._order--;\n }\n /**\n * * divide the polynomial by `(x-root)`.\n * * return the remainder\n * * If `root` truly is a root, the return is zero.\n * @param root root to remove\n */\n public deflateRoot(root: number): number {\n const orderA = this.order;\n const orderC = orderA - 1; // the order of the deflated bezier.\n if (orderA === 1) {\n this._order = 0;\n return this.coffs[0];\n }\n if (orderA < 1) {\n this._order = 0;\n return 0.0;\n }\n const pascalA = PascalCoefficients.getRow(orderA - 1);\n const pascalC = PascalCoefficients.getRow(orderC - 1);\n const b0 = -root;\n const b1 = 1.0 - root;\n let remainder = 0;\n if (root > 0.5) {\n let c0 = this.coffs[0] / b0;\n let c1;\n this.coffs[0] = c0;\n let a1;\n for (let i = 1; i < orderC; i++) {\n a1 = this.coffs[i] * pascalA[i];\n c1 = (a1 - c0 * b1) / b0;\n this.coffs[i] = c1 / pascalC[i];\n c0 = c1;\n }\n remainder = this.coffs[orderA - 1] - c0 * b1;\n } else {\n // work backwards (to get division by larger of b0, b1)\n // replace coefficients of a starting with orderA -1 --\n // at end move them all forward.\n let c1 = this.coffs[orderA - 1] / b1;\n let c0;\n this.coffs[orderA - 1] = c1;\n let a1;\n for (let i = orderA - 2; i > 0; i--) {\n a1 = this.coffs[i] * pascalA[i];\n c0 = (a1 - c1 * b0) / b1;\n this.coffs[i] = c0 / pascalC[i - 1]; // pascalC index is from destination, which is not shifted.\n c1 = c0;\n }\n remainder = (this.coffs[0] - c1 * b0);\n for (let i = 0; i < orderC; i++)\n this.coffs[i] = this.coffs[i + 1];\n }\n this._order = orderC;\n // This should be zero !!!! (If not, `root` was not really a root!!)\n return remainder;\n }\n private static _basisBuffer?: Float64Array;\n private static _basisBuffer1?: Float64Array;\n /**\n * Run a Newton iteration from startFraction.\n * @param startFraction [in] fraction for first iteration\n * @param tolerance [in] convergence tolerance. The iteration is considered converged on the\n * second time the tolerance is satisfied. For a typical iteration (not double root), the extra pass\n * will double the number of digits. Hence this tolerance is normally set to 10 to 12 digits, trusting\n * that the final iteration will clean it up to nearly machine precision.\n * @returns final fraction of iteration if converged. undefined if iteration failed to converge.\n */\n public runNewton(startFraction: number, tolerance: number = 1.0e-11): number | undefined {\n const derivativeFactor = this.order - 1;\n let numConverged = 0;\n let u = startFraction;\n let f, df;\n const bigStep = 10.0;\n const order = this.order;\n const coffs = this.coffs;\n const orderD = order - 1;\n for (let iterations = 0; iterations++ < 20;) {\n UnivariateBezier._basisBuffer = PascalCoefficients.getBezierBasisValues(order, u, UnivariateBezier._basisBuffer);\n f = 0;\n for (let i = 0; i < order; i++)\n f += coffs[i] * UnivariateBezier._basisBuffer[i];\n UnivariateBezier._basisBuffer1 = PascalCoefficients.getBezierBasisValues(orderD, u, UnivariateBezier._basisBuffer1);\n df = 0;\n for (let i = 0; i < orderD; i++)\n df += (coffs[i + 1] - coffs[i]) * UnivariateBezier._basisBuffer1[i];\n df *= derivativeFactor;\n if (Math.abs(f) > bigStep * Math.abs(df))\n return undefined;\n const du = f / df;\n if (Math.abs(du) < tolerance) {\n numConverged++;\n if (numConverged >= 2)\n return u - du;\n } else {\n numConverged = 0;\n }\n u -= du;\n }\n return undefined;\n }\n\n // Deflation table. b0, b1 are coefficients of term being divided out\n // Pascal coffs for b0,b1 are just 1.\n // Each ai is a coefficient of the (known) input, with its Pascal coefficient blended in.\n // each ci is a coefficient of the (unknown) result, with its coefficient blended in.\n // note b0, b1 are both nonzero, so the divisions are safe.\n // within the products, each c[i]*b0 pairs with c[i-1]*b1 (above and right diagonally) to make a[i]\n // first and last c0*b0 and c[orderC-1]*b1 make a0 and a[orderA-1]\n // | | b0 | b1 | equivalence | solve moving down\n // | c0 | c0* b0 | c0 * b1 | a0 = c0 * b0 | c0 = a0 / b0\n // | c1 | c1* b0 | c1 * b1 | a1 = c1 * b0 + c0 * b1 | c1 = (a1 - c0 * b1) / b0\n // | c2 | c2* b0 | c2 * b1\n // Each internal ci = (ai - c[i-1] * b1) /b0\n // first c0*b0 = a0\n // last c[orderC-1]*b1 = a[orderA-1]\n /** Find roots of a bezier polynomial\n * * As roots are found, deflate the polynomial.\n * * bezier coffs are changed (and order reduced) at each step.\n */\n public static deflateRoots(bezier: UnivariateBezier): number[] | undefined {\n const roots = [];\n const coffs = bezier.coffs;\n let a0, a1, segmentFraction, globalStartFraction, newtonFraction;\n while (bezier.order > 1) {\n const order = bezier.order;\n // Find any crossing\n if (coffs[0] === 0.0) {\n bezier.deflateLeft();\n roots.push(0.0);\n continue;\n }\n let numCrossing = 0;\n let numNewtonOK = 0;\n for (let i = 1; i < order; i++) {\n a0 = coffs[i - 1];\n a1 = coffs[i];\n if (a0 * a1 <= 0.0) {\n numCrossing++;\n segmentFraction = -a0 / (a1 - a0);\n globalStartFraction = (i - 1 + segmentFraction) / (order - 1);\n newtonFraction = bezier.runNewton(globalStartFraction, 1.0e-10);\n if (newtonFraction !== undefined) {\n roots.push(newtonFraction);\n bezier.deflateRoot(newtonFraction);\n numNewtonOK++;\n break;\n }\n }\n }\n if (numNewtonOK)\n continue; // crossing and convergence; proceed to deflate order-1 Bezier\n if (numCrossing === 0)\n break; // no crossing, no root; further deflation impossible\n break; // crossing, no root. Local min? Glacial convergence?\n }\n return roots.length > 0 ? roots : undefined;\n }\n}\n/** Bezier polynomial specialized to order 2 (2 coefficients, straight line function)\\\n * @internal\n */\nexport class Order2Bezier extends BezierCoffs {\n constructor(f0: number = 0.0, f1: number = 0.0) {\n super(2);\n this.coffs[0] = f0;\n this.coffs[1] = f1;\n }\n /** return an Order2Bezier (linear) with the two coefficients from this Order2Bezier */\n public clone(): Order2Bezier {\n return new Order2Bezier(this.coffs[0], this.coffs[1]);\n }\n\n /** normally, return fractional coordinate where bezier (a0,a1) has a root.\n * but if the fraction would exceed Geometry.largeFractionResult, return undefined.\n */\n public static solveCoffs(a0: number, a1: number): number | undefined {\n return Geometry.conditionalDivideFraction(-a0, (a1 - a0));\n }\n /**\n * Evaluate the basis functions at specified u.\n * @param u bezier parameter for evaluation.\n * @param result optional destination of length 2. If insufficient length, a new array is returned.\n * @returns array of 2 basis function values.\n */\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\n if (!result || result.length < 2)\n result = new Float64Array(2);\n result[0] = 1.0 - u;\n result[1] = u;\n return result;\n }\n /**\n * Sum the control points weighted by the basis function values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\n * @returns array of `n` summed basis function values.\n */\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\n if (!result || result.length < n)\n result = new Float64Array(n);\n const v = 1.0 - u;\n for (let i = 0; i < n; i++) {\n result[i] = v * polygon[i] + u * polygon[i + n];\n }\n return result;\n }\n\n /**\n * Sum the control points weighted by the basis function derivative values at parameter u.\n * @param _u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\n * @returns array of `n` summed basis function derivative values.\n */\n public sumBasisFunctionDerivatives(_u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\n if (!result || result.length < n)\n result = new Float64Array(n);\n for (let i = 0; i < n; i++) {\n result[i] = polygon[i + n] - polygon[i];\n }\n return result;\n }\n /**\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\n * @param u parameter for evaluation\n */\n public evaluate(u: number): number {\n return (1.0 - u) * this.coffs[0] + u * this.coffs[1];\n }\n /** Same as `roots` method but returns single numeric value instead of array. */\n public solve(rightHandSide: number): number | undefined {\n const df = this.coffs[1] - this.coffs[0];\n return Geometry.conditionalDivideFraction(rightHandSide - this.coffs[0], df);\n }\n /**\n * Concrete implementation of the abstract roots method\n * @param targetValue target function value.\n * @param restrictTo01 flag for optional second step to eliminate root outside 0..1.\n * @returns If no roots, return undefined. If single root, return an array with the root.\n */\n public override roots(targetValue: number, restrictTo01: boolean): number[] | undefined {\n const x = this.solve(targetValue);\n if (x === undefined)\n return undefined;\n if (!restrictTo01 || Geometry.isIn01(x))\n return [x];\n return undefined;\n }\n}\n\n/** Bezier polynomial specialized to order 3 (3 coefficients, parabola function)\n * @internal\n */\nexport class Order3Bezier extends BezierCoffs {\n public constructor(f0: number = 0, f1: number = 0, f2: number = 0) {\n super(3);\n this.coffs[0] = f0;\n this.coffs[1] = f1;\n this.coffs[2] = f2;\n }\n /** Return a deep copy. */\n public clone(): Order3Bezier {\n return new Order3Bezier(this.coffs[0], this.coffs[1], this.coffs[2]);\n }\n\n /**\n * Evaluate the basis functions at specified u.\n * @param u bezier parameter for evaluation.\n * @param result optional destination of length 3. If insufficient length, a new array is returned.\n * @returns array of 3 basis function values.\n */\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\n if (!result || result.length < 3)\n result = new Float64Array(3);\n const v = 1.0 - u;\n result[0] = v * v;\n result[1] = 2.0 * u * v;\n result[2] = u * u;\n return result;\n }\n /**\n * Sum the control points weighted by the basis function values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\n * @returns array of `n` summed basis function values.\n */\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\n if (!result || result.length < n)\n result = new Float64Array(n);\n const v = 1 - u;\n const b0 = v * v;\n const b1 = 2 * u * v;\n const b2 = u * u;\n for (let i = 0; i < n; i++) {\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n];\n }\n return result;\n }\n\n /**\n * Sum the control points weighted by the basis function derivative values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\n * @returns array of `n` summed basis function derivative values.\n */\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\n if (!result || result.length < n)\n result = new Float64Array(n);\n const f0 = 2 * (1 - u);\n const f1 = 2 * u;\n const n2 = 2 * n;\n for (let i = 0; i < n; i++) {\n const q = polygon[i + n];\n result[i] = f0 * (q - polygon[i]) + f1 * (polygon[i + n2] - q);\n }\n return result;\n }\n\n /**\n * Add the square of a linear bezier.\n * @param f0 linear factor value at u=0.\n * @param f1 linear factor value at u=1.\n * @param a scale factor.\n */\n public addSquareLinear(f0: number, f1: number, a: number) {\n this.coffs[0] += a * f0 * f0;\n this.coffs[1] += a * f0 * f1;\n this.coffs[2] += a * f1 * f1;\n }\n /**\n * Concrete implementation of the abstract roots method\n * @param targetValue target function value.\n * @param restrictTo01 flag for optional second step to eliminate root outside 0..1.\n * @returns If no roots, return undefined. If roots exist, return as numeric array.\n */\n public override roots(targetValue: number, restrictTo01: boolean): number[] | undefined {\n const a0 = this.coffs[0] - targetValue;\n const a1 = this.coffs[1] - targetValue;\n const a2 = this.coffs[2] - targetValue;\n const a01 = a1 - a0;\n const a12 = a2 - a1;\n const a012 = a12 - a01;\n const roots = Degree2PowerPolynomial.solveQuadratic(a012, 2.0 * a01, a0);\n return super.filter01(roots, restrictTo01);\n }\n /**\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\n * @param u parameter for evaluation\n */\n public evaluate(u: number): number {\n const v = 1.0 - u;\n return this.coffs[0] * v * v + u * (2.0 * this.coffs[1] * v + this.coffs[2] * u);\n }\n}\n\n/** Bezier polynomial specialized to order 4 (4 coefficients, cubic function)\n * @internal\n */\nexport class Order4Bezier extends BezierCoffs {\n public constructor(f0: number = 0, f1: number = 0, f2: number = 0, f3: number = 0) {\n super(4);\n this.coffs[0] = f0;\n this.coffs[1] = f1;\n this.coffs[2] = f2;\n this.coffs[3] = f3;\n }\n /** return a deep copy */\n public clone(): Order4Bezier {\n return new Order4Bezier(this.coffs[0], this.coffs[1], this.coffs[2], this.coffs[3]);\n }\n /** Create a product of a quadratic and a cubic. */\n public static createProductOrder3Order2(factorA: Order3Bezier, factorB: Order2Bezier): Order4Bezier {\n return new Order4Bezier(\n factorA.coffs[0] * factorB.coffs[0],\n (factorA.coffs[0] * factorB.coffs[1] + 2.0 * factorA.coffs[1] * factorB.coffs[0]) / 3.0,\n (2.0 * factorA.coffs[1] * factorB.coffs[1] + factorA.coffs[2] * factorB.coffs[0]) / 3.0,\n factorA.coffs[2] * factorB.coffs[1]);\n }\n /**\n * Evaluate the basis functions at specified u.\n * @param u bezier parameter for evaluation.\n * @param result optional destination of length 4. If insufficient length, a new array is returned.\n * @returns array of 4 basis function values.\n */\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\n if (!result || result.length < 4)\n result = new Float64Array(4);\n const v = 1.0 - u;\n const uu = u * u;\n const vv = v * v;\n result[0] = vv * v;\n result[1] = 3.0 * vv * u;\n result[2] = 3.0 * v * uu;\n result[3] = u * uu;\n return result;\n }\n /**\n * Sum the control points weighted by the basis function values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\n * @returns array of `n` summed basis function values.\n */\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\n if (!result || result.length < n)\n result = new Float64Array(n);\n const v = 1 - u;\n const uu = u * u;\n const vv = v * v;\n const b0 = v * vv;\n const b1 = 3 * u * vv;\n const b2 = 3 * uu * v;\n const b3 = u * uu;\n for (let i = 0; i < n; i++) {\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n] + b3 * polygon[i + 3 * n];\n }\n return result;\n }\n /**\n * Sum the control points weighted by the basis function derivative values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\n * @returns array of `n` summed basis function derivative values.\n */\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\n if (!result || result.length < n)\n result = new Float64Array(n);\n const v = 1 - u;\n // QUADRATIC basis functions applied to differences ... (with factor 3 for derivative)\n const f0 = 3 * (v * v);\n const f1 = 6 * u * v;\n const f2 = 3 * u * u;\n for (let i = 0; i < n; i++) {\n const q0 = polygon[i];\n const q1 = polygon[i + n];\n const q2 = polygon[i + 2 * n];\n const q3 = polygon[i + 3 * n];\n result[i] = f0 * (q1 - q0) + f1 * (q2 - q1) + f2 * (q3 - q2);\n }\n return result;\n }\n /**\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\n * @param u parameter for evaluation\n */\n public evaluate(u: number): number {\n const v1 = 1.0 - u;\n const v2 = v1 * v1;\n const v3 = v2 * v1;\n return this.coffs[0] * v3\n + u * (3.0 * this.coffs[1] * v2\n + u * (3.0 * this.coffs[2] * v1\n + u * this.coffs[3]));\n }\n /**\n * convert a power polynomial to bezier\n */\n public static createFromDegree3PowerPolynomial(source: Degree3PowerPolynomial): Order4Bezier {\n const f0 = source.evaluate(0.0);\n const d0 = source.evaluateDerivative(0.0);\n const d1 = source.evaluateDerivative(1.0);\n const f1 = source.evaluate(1.0);\n const a = 3.0;\n\n return new Order4Bezier(f0, f0 + d0 / a, f1 - d1 / a, f1);\n }\n /** Find real roots, return in caller-allocated array. */\n public realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array) {\n // Get direct solutions in standard basis\n roots.clear();\n const cc = new Float64Array(4);\n const y0 = this.coffs[0];\n const y1 = this.coffs[1];\n const y2 = this.coffs[2];\n const y3 = this.coffs[3];\n const yMax = Math.max(y0, y1, y2, y3);\n const yMin = Math.min(y0, y1, y2, y3);\n const smallValue = Geometry.smallMetricDistance;\n if (yMin > smallValue)\n return undefined;\n if (yMax < -smallValue)\n return undefined;\n\n if (yMin >= -smallValue && yMax < smallValue) {\n // all 4 are near zero . ..\n roots.push(0);\n roots.push(1.0 / 3.0);\n roots.push(2.0 / 3.0);\n roots.push(1.0);\n return; // p(x) == 0 has infinite roots .... return 4, which is a red flag for cubic\n }\n cc[0] = (y0 - e);\n cc[1] = 3.0 * (y1 - y0);\n cc[2] = 3.0 * (y0 - 2.0 * y1 + y2);\n cc[3] = - y0 + 3.0 * y1 - 3.0 * y2 + y3;\n AnalyticRoots.appendCubicRoots(cc, roots); // can't have zero solutions after passing min/max conditions . . .\n if (restrictTo01)\n roots.reassign(0, 1);\n return;\n }\n\n}\n/** Bezier polynomial specialized to order 5 (5 coefficients, quartic function)\n * @internal\n */\nexport class Order5Bezier extends BezierCoffs {\n constructor(f0: number = 0, f1: number = 0, f2: number = 0, f3: number = 0, f4: number = 0) {\n super(5);\n this.coffs[0] = f0;\n this.coffs[1] = f1;\n this.coffs[2] = f2;\n this.coffs[3] = f3;\n this.coffs[4] = f4;\n }\n /** Return a deep copy */\n public clone(): Order5Bezier {\n return new Order5Bezier(this.coffs[0], this.coffs[1], this.coffs[2], this.coffs[3], this.coffs[4]);\n }\n /**\n * convert a power polynomial to bezier\n */\n public static createFromDegree4PowerPolynomial(source: Degree4PowerPolynomial): Order5Bezier {\n const f0 = source.evaluate(0.0);\n const d0 = source.evaluateDerivative(0.0);\n const d4 = source.evaluateDerivative(1.0);\n const f4 = source.evaluate(1.0);\n const a = 0.25;\n const d0a = a * d0;\n const fa = f0 + d0a;\n const fm = 2.0 * fa - f0 + source.coffs[2] / 6.0;\n return new Order5Bezier(f0, fa, fm, f4 - d4 * a, f4);\n }\n\n /** evaluate the basis functions at specified u.\n * @param u bezier parameter for evaluation.\n * @param result optional destination of length 5. If insufficient length, a new array is returned.\n * @returns array of 5 basis function values.\n */\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\n if (!result || result.length < 5)\n result = new Float64Array(5);\n const v = 1.0 - u;\n const uu = u * u;\n const uuu = uu * u;\n const vv = v * v;\n const vvv = vv * v;\n result[0] = vv * vv;\n result[1] = 4.0 * vvv * u;\n result[2] = 6.0 * vv * uu;\n result[3] = 4.0 * v * uuu;\n result[4] = uu * uu;\n return result;\n }\n /**\n * Sum the control points weighted by the basis function values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\n * @returns array of `n` summed basis function values.\n */\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\n if (!result || result.length < n)\n result = new Float64Array(n);\n const v = 1.0 - u;\n const uu = u * u;\n const uuu = uu * u;\n const vv = v * v;\n const vvv = vv * v;\n const b0 = vv * vv;\n const b1 = 4.0 * vvv * u;\n const b2 = 6.0 * vv * uu;\n const b3 = 4.0 * v * uuu;\n const b4 = uu * uu;\n for (let i = 0; i < n; i++) {\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n] + b3 * polygon[i + 3 * n] + b4 * polygon[i + 4 * n];\n }\n return result;\n }\n /**\n * Sum the control points weighted by the basis function derivative values at parameter u.\n * @param u bezier parameter for evaluation.\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\n * @param n dimension of control points.\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\n * @returns array of `n` summed basis function derivative values.\n */\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\n if (!result || result.length < n)\n result = new Float64Array(n);\n const v = 1 - u;\n // CUBIC basis functions applied to differences ...\n const uu = u * u;\n const vv = v * v;\n const f0 = 4 * v * vv;\n const f1 = 12 * u * vv;\n const f2 = 12 * uu * v;\n const f3 = 4 * u * uu;\n for (let i = 0; i < n; i++) {\n const q0 = polygon[i];\n const q1 = polygon[i + n];\n const q2 = polygon[i + 2 * n];\n const q3 = polygon[i + 3 * n];\n const q4 = polygon[i + 4 * n];\n result[i] = f0 * (q1 - q0) + f1 * (q2 - q1) + f2 * (q3 - q2) + f3 * (q4 - q3);\n }\n return result;\n }\n\n /**\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\n * @param u parameter for evaluation\n */\n public evaluate(u: number): number {\n const v1 = 1.0 - u;\n const v2 = v1 * v1;\n const v3 = v2 * v1;\n const v4 = v2 * v2;\n return this.coffs[0] * v4\n + u * (4.0 * this.coffs[1] * v3\n + u * (6.0 * this.coffs[2] * v2\n + u * (4.0 * this.coffs[3] * v1\n + u * this.coffs[4])));\n }\n /** Add the product of a pair of Order3Bezier to this one. */\n public addProductOrder3BezierOrder3Bezier(f: Order3Bezier, g: Order3Bezier, a: number) {\n this.coffs[0] += a * f.coffs[0] * g.coffs[0];\n this.coffs[1] += a * (f.coffs[0] * g.coffs[1] + f.coffs[1] * g.coffs[0]) * 0.5;\n this.coffs[2] += a * (f.coffs[0] * g.coffs[2] + 4.0 * f.coffs[1] * g.coffs[1] + f.coffs[2] * g.coffs[0]) / 6.0;\n this.coffs[3] += a * (f.coffs[1] * g.coffs[2] + f.coffs[2] * g.coffs[1]) * 0.5;\n this.coffs[4] += a * f.coffs[2] * g.coffs[2];\n }\n /** Add a constant to all coefficients (thereby adding the constant to the evaluated bezier) */\n public addConstant(a: number): void {\n for (let i = 0; i < 5; i++) this.coffs[i] += a;\n }\n /** Find real roots, return in caller-allocated array. */\n public realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array): void {\n roots.clear();\n const y0 = this.coffs[0] - e;\n const y1 = this.coffs[1] - e;\n const y2 = this.coffs[2] - e;\n const y3 = this.coffs[3] - e;\n const y4 = this.coffs[4] - e;\n // Get direct solutions in standard basis\n const yMax = Math.max(y0, y1, y2, y3, y4);\n const yMin = Math.min(y0, y1, y2, y3, y4);\n const smallValue = Geometry.smallMetricDistance;\n if (yMin > smallValue)\n return undefined;\n if (yMax < -smallValue)\n return undefined;\n\n if (yMin >= -smallValue && yMax < smallValue) {\n // all 4 are near zero . ..\n roots.push(0);\n roots.push(0.25);\n roots.push(0.5);\n roots.push(0.75);\n roots.push(1.0);\n return; // p(x) == 0 has infinite roots .... return 5, which is a red flag for cubic ...\n }\n\n const cc = new Float64Array(5);\n\n cc[0] = (y0 - e);\n cc[1] = 4.0 * (-y0 + y1);\n cc[2] = 6.0 * (y0 - 2.0 * y1 + y2);\n cc[3] = 4.0 * (-y0 + 3.0 * y1 - 3.0 * y2 + y3);\n cc[4] = (y0 - 4.0 * y1 + 6.0 * y2 - 4.0 * y3 + y4);\n\n AnalyticRoots.appendQuarticRoots(cc, roots);\n if (restrictTo01)\n roots.reassign(0, 1);\n return;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"BezierPolynomials.js","sourceRoot":"","sources":["../../../src/numerics/BezierPolynomials.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\n// import { Angle, AngleSweep, Geometry } from \"../Geometry\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { GrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { PascalCoefficients } from \"./PascalCoefficients\";\r\nimport { AnalyticRoots, Degree2PowerPolynomial, Degree3PowerPolynomial, Degree4PowerPolynomial } from \"./Polynomials\";\r\n\r\n/**\r\n * * BezierCoffs is an abstract base class for one-dimensional (u to f(u)) Bezier polynomials.\r\n * * The base class carries a Float64Array with coefficients.\r\n * * The Float64Array is NOT Growable unless derived classes add logic to do so. Its length is the Bezier polynomial order.\r\n * * The family of derived classes is starts with low order (at least linear through cubic) with highly optimized calculations.\r\n * * The general degree Bezier class also uses this as its base class.\r\n * * The length of the coefficient array is NOT always the bezier order. Use the `order` property to access the order.\r\n * @internal\r\n */\r\nexport abstract class BezierCoffs {\r\n /** Array of coefficients.\r\n * * The number of coefficients is the order of the Bezier polynomial.\r\n */\r\n public coffs: Float64Array;\r\n /**\r\n * * If `data` is a number, an array of that size is created with zeros.\r\n * * If `data` is a Float64Array, it is cloned (NOT CAPTURED)\r\n * * If `data` is a number array, its values are copied.\r\n */\r\n constructor(data: number | Float64Array | number[]) {\r\n if (data instanceof Float64Array) {\r\n this.coffs = data.slice();\r\n } else if (Array.isArray(data)) {\r\n this.coffs = new Float64Array(data.length);\r\n let i = 0;\r\n for (const a of data) this.coffs[i++] = a;\r\n } else {\r\n this.coffs = new Float64Array(data);\r\n }\r\n }\r\n /**\r\n * * Ensure the coefficient array size matches order. (Reallocate as needed)\r\n * * fill with zeros.\r\n * @param order required order\r\n */\r\n protected allocateToOrder(order: number) {\r\n if (this.coffs.length !== order) {\r\n this.coffs = new Float64Array(order);\r\n } else {\r\n this.coffs.fill(0);\r\n }\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length `order`. If insufficient length, a new array is returned.\r\n * @returns array of `order` basis function values.\r\n */\r\n public abstract basisFunctions(u: number, result?: Float64Array): Float64Array;\r\n\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public abstract sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array;\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public abstract sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array;\r\n\r\n /** Return a deep clone of this bezier. */\r\n public abstract clone(): BezierCoffs;\r\n /**\r\n * create an object of same order with zero coefficients.\r\n * The base implementation makes a generic Bezier of the same order.\r\n */\r\n public createPeer(): BezierCoffs {\r\n const peer = new UnivariateBezier(this.order);\r\n return peer;\r\n }\r\n /** Evaluate the polynomial at u.\r\n * @param u bezier parameter for evaluation.\r\n */\r\n public abstract evaluate(u: number): number;\r\n /** The order (number of coefficients) as a readable property */\r\n public get order(): number { return this.coffs.length; }\r\n /** Copy coefficients from other Bezier. Note that the coefficient count (order) of \"this\" can change. */\r\n public copyFrom(other: BezierCoffs): void {\r\n if (this.order === other.order)\r\n for (let i = 0; i < this.coffs.length; i++) { this.coffs[i] = other.coffs[i]; }\r\n else this.coffs = other.coffs.slice();\r\n }\r\n /**\r\n * Apply a scale factor to all coefficients.\r\n * @param scale scale factor to apply to all coefficients.\r\n */\r\n public scaleInPlace(scale: number): void {\r\n for (let i = 0; i < this.coffs.length; i++)\r\n this.coffs[i] *= scale;\r\n }\r\n /** add a constant to each coefficient.\r\n * @param a constant to add.\r\n */\r\n public addInPlace(a: number): void {\r\n for (let i = 0; i < this.coffs.length; i++)\r\n this.coffs[i] += a;\r\n }\r\n /** Compute parameter values where the bezier value matches targetValue.\r\n * * The base class finds roots only in 01. (i.e. ignores _restrictTo01)\r\n * * Order-specific implementations apply special case analytic logic, e.g. for degree 1,2,3,4.\r\n */\r\n public roots(targetValue: number, _restrictTo01: boolean): number[] | undefined {\r\n const bezier = UnivariateBezier.create(this);\r\n bezier.addInPlace(- targetValue);\r\n bezier.clampZero();\r\n const roots = UnivariateBezier.deflateRoots(bezier);\r\n return this.filter01(roots, true);\r\n }\r\n /** Given an array of numbers, optionally remove those not in the 0..1 interval.\r\n * @param roots candidate values\r\n * @param restrictTo01 If false, no filtering occurs and the pointer to the original array is unchanged.\r\n * If true, filtering is done and values are returned, possibly in a new array and possibly in the original.\r\n */\r\n public filter01(roots: number[] | undefined, restrictTo01 = false): number[] | undefined {\r\n if (!roots || !restrictTo01)\r\n return roots;\r\n let anyFound = false;\r\n for (const r of roots) {\r\n if (Geometry.isIn01(r)) {\r\n anyFound = true;\r\n break;\r\n }\r\n }\r\n if (anyFound) {\r\n const roots01: number[] = [];\r\n for (const r of roots) {\r\n if (Geometry.isIn01(r))\r\n roots01.push(r);\r\n }\r\n return roots01;\r\n }\r\n return undefined;\r\n }\r\n /** zero out all coefficients. */\r\n public zero(): void {\r\n this.coffs.fill(0);\r\n }\r\n /** Subdivide -- write results into caller-supplied bezier coffs (which must be of the same order) */\r\n public subdivide(u: number, left: BezierCoffs, right: BezierCoffs): boolean {\r\n const order = this.order;\r\n if (left.order !== order || right.order !== order)\r\n return false;\r\n const v = 1.0 - u;\r\n right.copyFrom(this);\r\n // each left will be filled in directly, so there is no need to initialize it.\r\n let n1 = order - 1; // number of interpolations in inner loop.\r\n for (let i0 = 0; i0 < order; i0++) {\r\n left.coffs[i0] = right.coffs[0];\r\n for (let i = 0; i < n1; i++)\r\n right.coffs[i] = v * right.coffs[i] + u * right.coffs[i + 1];\r\n n1--;\r\n }\r\n return true;\r\n }\r\n /** Return the maximum absolute difference between coefficients of two sets of BezierCoffs */\r\n public static maxAbsDiff(dataA: BezierCoffs, dataB: BezierCoffs): number | undefined {\r\n const order = dataA.order;\r\n if (dataB.order !== order)\r\n return undefined;\r\n let d = 0.0;\r\n let d1;\r\n for (let i = 0; i < order; i++) {\r\n d1 = Math.abs(dataA.coffs[i] - dataB.coffs[i]);\r\n if (d1 > d)\r\n d = d1;\r\n }\r\n return d;\r\n }\r\n /** Assist Newton with slow-to-converge roots at e.g., Bezier endpoints. */\r\n public clampZero(maxAbs: number = Geometry.smallFloatingPoint): void {\r\n if (maxAbs > 0) {\r\n for (let i = 0; i < this.coffs.length; ++i) {\r\n const coff = this.coffs[i];\r\n if (coff && Math.abs(coff) < maxAbs)\r\n this.coffs[i] = 0.0;\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Static methods to operate on univariate bezier polynomials, with coefficients in simple Float64Array or as components of blocked arrays.\r\n * @internal\r\n */\r\nexport class BezierPolynomialAlgebra {\r\n /**\r\n * * Univariate bezierA has its coefficients at offset indexA in each block within the array of blocks.\r\n * * Symbolically: `product(s) += scale * (constA - polynomialA(s)) *polynomialB(s)`\r\n * * Where coefficients of polynomialA(s) are in column indexA and coefficients of polynomialB(s) are differences within column indexB.\r\n * * Treating data as 2-dimensional array: `product = sum (iA) sum (iB) (constA - basisFunction[iA} data[indexA][iA]) * basisFunction[iB] * (dataOrder-1)(data[iB + 1][indexB] - data[iB][indexB])`\r\n * * Take no action if product length is other than `dataOrder + dataOrder - 2`\r\n */\r\n public static accumulateScaledShiftedComponentTimesComponentDelta(\r\n product: Float64Array,\r\n data: Float64Array,\r\n dataBlockSize: number,\r\n dataOrder: number,\r\n scale: number,\r\n indexA: number,\r\n constA: number,\r\n indexB: number) {\r\n const orderB = dataOrder - 1; // coefficients of the first difference are implicitly present as differences of adjacent entries.\r\n const orderA = dataOrder;\r\n const orderC = dataOrder + orderB - 1;\r\n if (product.length !== orderC) return;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n let qA;\r\n for (let a = 0; a < orderA; a++) {\r\n qA = scale * (constA + data[indexA + a * dataBlockSize]) * coffA[a];\r\n for (let b = 0, k = indexB; b < orderB; b++, k += dataBlockSize) {\r\n product[a + b] += qA * coffB[b] * (data[k + dataBlockSize] - data[k]) / coffC[a + b];\r\n }\r\n }\r\n }\r\n /**\r\n * * Univariate bezierA has its coefficients at offset indexA in each block within the array of blocks.\r\n * * Univariate bezierB has its coefficients at offset indexB in each block within the array of blocks.\r\n * * return the sum coefficients for `constA * polynomialA + constB * polynomialB`\r\n * * Symbolically: `product(s) = (constA * polynomialA(s) + constB * polynomialB(s)`\r\n * * The two polynomials are the same order, so this just direct sum of scaled coefficients.\r\n *\r\n * * Take no action if product length is other than `dataOrder + dataOrder - 2`\r\n */\r\n public static scaledComponentSum(sum: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, indexA: number, constA: number, indexB: number, constB: number) {\r\n const orderA = dataOrder;\r\n if (sum.length !== orderA) return;\r\n for (let a = 0, rowBase = 0; a < orderA; a++, rowBase += dataBlockSize) {\r\n sum[a] = constA * data[rowBase + indexA] + constB * data[rowBase + indexB];\r\n }\r\n }\r\n /**\r\n * * Univariate bezier has its coefficients at offset index in each block within the array of blocks.\r\n * * return the (dataOrder - 1) differences,\r\n *\r\n * * Take no action if difference length is other than `dataOrder - 1`\r\n */\r\n public static componentDifference(difference: Float64Array, data: Float64Array, dataBlockSize: number, dataOrder: number, index: number) {\r\n const orderA = dataOrder;\r\n const orderDiff = orderA - 1;\r\n if (difference.length !== orderDiff) return;\r\n for (let i = 0, k = index; i < orderDiff; k += dataBlockSize, i++)\r\n difference[i] = data[k + dataBlockSize] - data[k];\r\n }\r\n\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in dataB[i]\r\n * * return the product coefficients for polynomialA(s) * polynomialB(s) * scale\r\n * * Take no action if product length is other than `orderA + orderB - 1`\r\n */\r\n public static accumulateProduct(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale: number = 1.0) {\r\n const orderA = dataA.length;\r\n const orderB = dataB.length;\r\n const orderC = orderA + orderB - 1;\r\n if (product.length !== orderC) return;\r\n let a: number;\r\n let b: number;\r\n let qA: number;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n for (a = 0; a < orderA; a++) {\r\n qA = scale * coffA[a] * dataA[a];\r\n for (b = 0; b < orderB; b++) {\r\n product[a + b] += qA * coffB[b] * dataB[b] / coffC[a + b];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in dataB[i]\r\n * * return the product coefficients for polynomialADifferences(s) * polynomialB(s) * scale\r\n * * Take no action if product length is other than `orderA + orderB - 2`\r\n */\r\n public static accumulateProductWithDifferences(product: Float64Array, dataA: Float64Array, dataB: Float64Array, scale: number = 1.0) {\r\n const orderA = dataA.length - 1; // We deal with its differences, which are lower order !!!\r\n const orderB = dataB.length;\r\n const orderC = orderA + orderB - 1;\r\n if (product.length !== orderC) return;\r\n let a: number;\r\n let b: number;\r\n let qA: number;\r\n const coffA = PascalCoefficients.getRow(orderA - 1);\r\n const coffB = PascalCoefficients.getRow(orderB - 1);\r\n const coffC = PascalCoefficients.getRow(orderC - 1);\r\n for (a = 0; a < orderA; a++) {\r\n qA = scale * coffA[a] * (dataA[a + 1] - dataA[a]);\r\n for (b = 0; b < orderB; b++) {\r\n product[a + b] += qA * coffB[b] * dataB[b] / coffC[a + b];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * * Univariate bezier has its coefficients in data[i]\r\n * * return the difference data[i+1]-data[i] in difference.\r\n * * Take no action if product length is other than `orderA + orderB - 1`\r\n */\r\n public static univariateDifference(data: Float64Array, difference: Float64Array) {\r\n const differenceOrder = difference.length;\r\n if (difference.length + 1 !== differenceOrder)\r\n for (let i = 0; i < differenceOrder; i++) {\r\n difference[i] = data[i + 1] - data[i];\r\n }\r\n }\r\n /**\r\n * * Univariate bezierA has its coefficients in dataA[i]\r\n * * Univariate bezierB has its coefficients in resultB[i]\r\n * * add (with no scaling) bezierA to bezierB\r\n * * Take no action if resultB.length is other than dataA.length.\r\n */\r\n public static accumulate(dataA: Float64Array, orderA: number, resultB: Float64Array) {\r\n if (resultB.length !== orderA) return;\r\n for (let i = 0; i < orderA; i++) {\r\n resultB[i] += dataA[i];\r\n }\r\n }\r\n\r\n}\r\n/**\r\n * * The UnivariateBezier class is a univariate bezier polynomial with no particular order.\r\n * * More specific classes -- Order2Bezier, Order3Bezier, Order4Bezier -- can be used when a fixed order is known and the more specialized implementations are appropriate.\r\n * * When working with xy and xyz curves whose order is the common 2,3,4, various queries (e.g. project point to curve)\r\n * generate higher order one-dimensional bezier polynomials with order that is a small multiple of the\r\n * curve order. Hence those polynomials commonly reach degree 8 to 12.\r\n * * Higher order bezier polynomials are possible, but performance and accuracy issues become significant.\r\n * * Some machine-level constraints apply for curves of extremely high order, e.g. 70. For instance, at that level use of\r\n * Pascal triangle coefficients becomes inaccurate because IEEE doubles cannot represent integers that\r\n * large.\r\n * @internal\r\n */\r\nexport class UnivariateBezier extends BezierCoffs {\r\n private _order: number;\r\n /** Query the order of this bezier. */\r\n public override get order() { return this._order; }\r\n public constructor(data: number | Float64Array | number[]) {\r\n super(data);\r\n this._order = super.order;\r\n }\r\n\r\n /** (Re) initialize with given order (and all coffs zero) */\r\n public allocateOrder(order: number) {\r\n if (this._order !== order) {\r\n super.allocateToOrder(order);\r\n this._order = order;\r\n }\r\n this.coffs.fill(0);\r\n }\r\n /** Return a copy, optionally with coffs array length reduced to actual order. */\r\n public clone(compressToMinimalAllocation: boolean = false): UnivariateBezier {\r\n if (compressToMinimalAllocation) {\r\n const result1 = new UnivariateBezier(this.order);\r\n result1.coffs = this.coffs.slice(0, this.order);\r\n return result1;\r\n }\r\n const result = new UnivariateBezier(this.coffs.length);\r\n result._order = this._order;\r\n result.coffs = this.coffs.slice();\r\n return result;\r\n }\r\n /** Create a new bezier which is a copy of other.\r\n * * Note that `other` may be a more specialized class such as `Order2Bezier`, but the result is general `Bezier`\r\n * @param other coefficients to copy.\r\n */\r\n public static create(other: BezierCoffs): UnivariateBezier {\r\n const result = new UnivariateBezier(other.order);\r\n result.coffs = other.coffs.slice();\r\n return result;\r\n }\r\n /**\r\n * copy coefficients into a new bezier.\r\n * @param coffs coefficients for bezier\r\n */\r\n public static createCoffs(data: number | number[] | Float64Array): UnivariateBezier {\r\n return new UnivariateBezier(data);\r\n }\r\n /**\r\n * copy coefficients into a new bezier.\r\n * * if result is omitted, a new UnivariateBezier is allocated and returned.\r\n * * if result is present but has other order, its coefficients are reallocated\r\n * * if result is present and has matching order, the values are replace.\r\n * @param coffs coefficients for bezier\r\n * @param index0 first index to access\r\n * @param order number of coefficients, i.e. order for the result\r\n * @param result optional result.\r\n *\r\n */\r\n public static createArraySubset(coffs: number[] | Float64Array, index0: number, order: number, result?: UnivariateBezier): UnivariateBezier {\r\n if (!result)\r\n result = new UnivariateBezier(order);\r\n else if (result.order !== order)\r\n result.allocateToOrder(order);\r\n for (let i = 0; i < order; i++)\r\n result.coffs[i] = coffs[index0 + i];\r\n return result;\r\n }\r\n\r\n /**\r\n * Create a product of 2 bezier polynomials.\r\n * @param bezierA\r\n * @param bezierB\r\n */\r\n public static createProduct(bezierA: BezierCoffs, bezierB: BezierCoffs): UnivariateBezier {\r\n const result = new UnivariateBezier(bezierA.order + bezierB.order - 1);\r\n const pascalA = PascalCoefficients.getRow(bezierA.order - 1);\r\n const pascalB = PascalCoefficients.getRow(bezierB.order - 1);\r\n const pascalC = PascalCoefficients.getRow(bezierA.order + bezierB.order - 2);\r\n for (let iA = 0; iA < bezierA.order; iA++) {\r\n const a = bezierA.coffs[iA] * pascalA[iA];\r\n for (let iB = 0; iB < bezierB.order; iB++) {\r\n const b = bezierB.coffs[iB] * pascalB[iB];\r\n const iC = iA + iB;\r\n const c = pascalC[iC];\r\n result.coffs[iC] += a * b / c;\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Add a squared bezier polynomial (given as simple coffs)\r\n * @param coffA coefficients of bezier to square\r\n * @param scale scale factor\r\n * @return false if order mismatch -- must have `2 * bezierA.length === this.order + 1`\r\n */\r\n public addSquaredSquaredBezier(coffA: Float64Array, scale: number): boolean {\r\n const orderA = coffA.length;\r\n const orderC = this.order;\r\n if (orderA * 2 !== orderC + 1) return false;\r\n const pascalA = PascalCoefficients.getRow(orderA - 1);\r\n const pascalC = PascalCoefficients.getRow(orderC - 1);\r\n const coffC = this.coffs;\r\n for (let iA = 0; iA < orderA; iA++) {\r\n const a = coffA[iA] * pascalA[iA] * scale;\r\n for (let iB = 0; iB < orderA; iB++) {\r\n const b = coffA[iB] * pascalA[iB];\r\n const iC = iA + iB;\r\n const c = pascalC[iC];\r\n coffC[iC] += a * b / c;\r\n }\r\n }\r\n return true;\r\n }\r\n /** Add a constant to each coefficient */\r\n public addConstant(a: number) {\r\n for (let i = 0; i < this.coffs.length; i++) {\r\n this.coffs[i] += a;\r\n }\r\n }\r\n private _basisValues?: Float64Array;\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length `order`. If insufficient length, a new array is returned.\r\n * @returns array of `order` basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n if (!result || result.length < this.order)\r\n result = new Float64Array(this.order);\r\n let i = 0;\r\n for (const a of this._basisValues)\r\n result[i++] = a;\r\n return result;\r\n }\r\n /**\r\n * Sum weights[i] * data[...] in blocks of numPerBlock.\r\n * This is for low level use -- counts are not checked.\r\n * @param weights input array of length `numWeights`\r\n * @param numWeights number of weights\r\n * @param data input array of length `numWeights * numPerBlock`\r\n * @param numPerBlock control point dimension\r\n * @param result output array of length `numPerBlock`\r\n */\r\n private static sumWeightedBlocks(weights: Float64Array, numWeights: number, data: Float64Array, numPerBlock: number, result: Float64Array) {\r\n for (let k0 = 0; k0 < numPerBlock; k0++) {\r\n result[k0] = 0;\r\n }\r\n let k = 0;\r\n let i;\r\n for (let iWeight = 0; iWeight < numWeights; iWeight++) {\r\n const w = weights[iWeight];\r\n for (i = 0; i < numPerBlock; i++) {\r\n result[i] += w * data[k++];\r\n }\r\n }\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter\r\n * @param polygon packed multidimensional control points. ASSUMED contains `blockSize*order` values.\r\n * @param blockSize dimension of control points\r\n * @param result optional preallocated array of length `blockSize` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `blockSize` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < blockSize)\r\n result = new Float64Array(blockSize);\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n UnivariateBezier.sumWeightedBlocks(this._basisValues, this.order, polygon, blockSize, result);\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter\r\n * @param polygon packed multidimensional control points. ASSUMED contains `blockSize*order` values.\r\n * @param blockSize dimension of control points\r\n * @param result optional preallocated array of length `blockSize` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `blockSize` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, blockSize: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < blockSize)\r\n result = new Float64Array(blockSize);\r\n this._basisValues = PascalCoefficients.getBezierBasisDerivatives(this.order, u, this._basisValues);\r\n UnivariateBezier.sumWeightedBlocks(this._basisValues, this.order, polygon, blockSize, result);\r\n return result;\r\n }\r\n\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n this._basisValues = PascalCoefficients.getBezierBasisValues(this.order, u, this._basisValues);\r\n let sum = 0;\r\n for (let i = 0; i < this.order; i++)\r\n sum += this._basisValues[i] * this.coffs[i];\r\n return sum;\r\n }\r\n /**\r\n * Apply deflation from the left to a bezier.\r\n * * This assumes that the left coefficient is zero.\r\n */\r\n public deflateLeft() {\r\n // coefficient 0 is zero (caller promises.)\r\n // get bezier coffs for both orders ...\r\n const order1 = this.order;\r\n const order0 = order1 - 1;\r\n const coff0 = PascalCoefficients.getRow(order0 - 1);\r\n const coff1 = PascalCoefficients.getRow(order1 - 1);\r\n let a;\r\n for (let i = 0; i < order0; i++) {\r\n a = this.coffs[i + 1];\r\n this.coffs[i] = a * coff1[i + 1] / coff0[i];\r\n }\r\n this._order--;\r\n }\r\n\r\n /**\r\n * Apply deflation from the right to a frame.\r\n * * This assumes that the right coefficient is zero.\r\n * @param frame frame description\r\n */\r\n public deflateRight() {\r\n // final coefficient is zero (caller promises.)\r\n // get bezier coffs for both orders ...\r\n const order1 = this.order;\r\n const order0 = order1 - 1;\r\n const coff0 = PascalCoefficients.getRow(order0 - 1);\r\n const coff1 = PascalCoefficients.getRow(order1 - 1);\r\n let a, b;\r\n for (let i = 0; i < order0; i++) {\r\n a = this.coffs[i];\r\n b = a * coff1[i] / coff0[i];\r\n this.coffs[i] = b;\r\n }\r\n this._order--;\r\n }\r\n /**\r\n * * divide the polynomial by `(x-root)`.\r\n * * return the remainder\r\n * * If `root` truly is a root, the return is zero.\r\n * @param root root to remove\r\n */\r\n public deflateRoot(root: number): number {\r\n const orderA = this.order;\r\n const orderC = orderA - 1; // the order of the deflated bezier.\r\n if (orderA === 1) {\r\n this._order = 0;\r\n return this.coffs[0];\r\n }\r\n if (orderA < 1) {\r\n this._order = 0;\r\n return 0.0;\r\n }\r\n const pascalA = PascalCoefficients.getRow(orderA - 1);\r\n const pascalC = PascalCoefficients.getRow(orderC - 1);\r\n const b0 = -root;\r\n const b1 = 1.0 - root;\r\n let remainder = 0;\r\n if (root > 0.5) {\r\n let c0 = this.coffs[0] / b0;\r\n let c1;\r\n this.coffs[0] = c0;\r\n let a1;\r\n for (let i = 1; i < orderC; i++) {\r\n a1 = this.coffs[i] * pascalA[i];\r\n c1 = (a1 - c0 * b1) / b0;\r\n this.coffs[i] = c1 / pascalC[i];\r\n c0 = c1;\r\n }\r\n remainder = this.coffs[orderA - 1] - c0 * b1;\r\n } else {\r\n // work backwards (to get division by larger of b0, b1)\r\n // replace coefficients of a starting with orderA -1 --\r\n // at end move them all forward.\r\n let c1 = this.coffs[orderA - 1] / b1;\r\n let c0;\r\n this.coffs[orderA - 1] = c1;\r\n let a1;\r\n for (let i = orderA - 2; i > 0; i--) {\r\n a1 = this.coffs[i] * pascalA[i];\r\n c0 = (a1 - c1 * b0) / b1;\r\n this.coffs[i] = c0 / pascalC[i - 1]; // pascalC index is from destination, which is not shifted.\r\n c1 = c0;\r\n }\r\n remainder = (this.coffs[0] - c1 * b0);\r\n for (let i = 0; i < orderC; i++)\r\n this.coffs[i] = this.coffs[i + 1];\r\n }\r\n this._order = orderC;\r\n // This should be zero !!!! (If not, `root` was not really a root!!)\r\n return remainder;\r\n }\r\n private static _basisBuffer?: Float64Array;\r\n private static _basisBuffer1?: Float64Array;\r\n /**\r\n * Run a Newton iteration from startFraction.\r\n * @param startFraction [in] fraction for first iteration\r\n * @param tolerance [in] convergence tolerance. The iteration is considered converged on the\r\n * second time the tolerance is satisfied. For a typical iteration (not double root), the extra pass\r\n * will double the number of digits. Hence this tolerance is normally set to 10 to 12 digits, trusting\r\n * that the final iteration will clean it up to nearly machine precision.\r\n * @returns final fraction of iteration if converged. undefined if iteration failed to converge.\r\n */\r\n public runNewton(startFraction: number, tolerance: number = 1.0e-11): number | undefined {\r\n const derivativeFactor = this.order - 1;\r\n let numConverged = 0;\r\n let u = startFraction;\r\n let f, df;\r\n const bigStep = 10.0;\r\n const order = this.order;\r\n const coffs = this.coffs;\r\n const orderD = order - 1;\r\n for (let iterations = 0; iterations++ < 20;) {\r\n UnivariateBezier._basisBuffer = PascalCoefficients.getBezierBasisValues(order, u, UnivariateBezier._basisBuffer);\r\n f = 0;\r\n for (let i = 0; i < order; i++)\r\n f += coffs[i] * UnivariateBezier._basisBuffer[i];\r\n UnivariateBezier._basisBuffer1 = PascalCoefficients.getBezierBasisValues(orderD, u, UnivariateBezier._basisBuffer1);\r\n df = 0;\r\n for (let i = 0; i < orderD; i++)\r\n df += (coffs[i + 1] - coffs[i]) * UnivariateBezier._basisBuffer1[i];\r\n df *= derivativeFactor;\r\n if (Math.abs(f) > bigStep * Math.abs(df))\r\n return undefined;\r\n const du = f / df;\r\n if (Math.abs(du) < tolerance) {\r\n numConverged++;\r\n if (numConverged >= 2)\r\n return u - du;\r\n } else {\r\n numConverged = 0;\r\n }\r\n u -= du;\r\n }\r\n return undefined;\r\n }\r\n\r\n // Deflation table. b0, b1 are coefficients of term being divided out\r\n // Pascal coffs for b0,b1 are just 1.\r\n // Each ai is a coefficient of the (known) input, with its Pascal coefficient blended in.\r\n // each ci is a coefficient of the (unknown) result, with its coefficient blended in.\r\n // note b0, b1 are both nonzero, so the divisions are safe.\r\n // within the products, each c[i]*b0 pairs with c[i-1]*b1 (above and right diagonally) to make a[i]\r\n // first and last c0*b0 and c[orderC-1]*b1 make a0 and a[orderA-1]\r\n // | | b0 | b1 | equivalence | solve moving down\r\n // | c0 | c0* b0 | c0 * b1 | a0 = c0 * b0 | c0 = a0 / b0\r\n // | c1 | c1* b0 | c1 * b1 | a1 = c1 * b0 + c0 * b1 | c1 = (a1 - c0 * b1) / b0\r\n // | c2 | c2* b0 | c2 * b1\r\n // Each internal ci = (ai - c[i-1] * b1) /b0\r\n // first c0*b0 = a0\r\n // last c[orderC-1]*b1 = a[orderA-1]\r\n /** Find roots of a bezier polynomial\r\n * * As roots are found, deflate the polynomial.\r\n * * bezier coffs are changed (and order reduced) at each step.\r\n */\r\n public static deflateRoots(bezier: UnivariateBezier): number[] | undefined {\r\n const roots = [];\r\n const coffs = bezier.coffs;\r\n let a0, a1, segmentFraction, globalStartFraction, newtonFraction;\r\n while (bezier.order > 1) {\r\n const order = bezier.order;\r\n // Find any crossing\r\n if (coffs[0] === 0.0) {\r\n bezier.deflateLeft();\r\n roots.push(0.0);\r\n continue;\r\n }\r\n let numCrossing = 0;\r\n let numNewtonOK = 0;\r\n for (let i = 1; i < order; i++) {\r\n a0 = coffs[i - 1];\r\n a1 = coffs[i];\r\n if (a0 * a1 <= 0.0) {\r\n numCrossing++;\r\n segmentFraction = -a0 / (a1 - a0);\r\n globalStartFraction = (i - 1 + segmentFraction) / (order - 1);\r\n newtonFraction = bezier.runNewton(globalStartFraction, 1.0e-10);\r\n if (newtonFraction !== undefined) {\r\n roots.push(newtonFraction);\r\n bezier.deflateRoot(newtonFraction);\r\n numNewtonOK++;\r\n break;\r\n }\r\n }\r\n }\r\n if (numNewtonOK)\r\n continue; // crossing and convergence; proceed to deflate order-1 Bezier\r\n if (numCrossing === 0)\r\n break; // no crossing, no root; further deflation impossible\r\n break; // crossing, no root. Local min? Glacial convergence?\r\n }\r\n return roots.length > 0 ? roots : undefined;\r\n }\r\n}\r\n/** Bezier polynomial specialized to order 2 (2 coefficients, straight line function)\\\r\n * @internal\r\n */\r\nexport class Order2Bezier extends BezierCoffs {\r\n constructor(f0: number = 0.0, f1: number = 0.0) {\r\n super(2);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n }\r\n /** return an Order2Bezier (linear) with the two coefficients from this Order2Bezier */\r\n public clone(): Order2Bezier {\r\n return new Order2Bezier(this.coffs[0], this.coffs[1]);\r\n }\r\n\r\n /** normally, return fractional coordinate where bezier (a0,a1) has a root.\r\n * but if the fraction would exceed Geometry.largeFractionResult, return undefined.\r\n */\r\n public static solveCoffs(a0: number, a1: number): number | undefined {\r\n return Geometry.conditionalDivideFraction(-a0, (a1 - a0));\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 2. If insufficient length, a new array is returned.\r\n * @returns array of 2 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 2)\r\n result = new Float64Array(2);\r\n result[0] = 1.0 - u;\r\n result[1] = u;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1.0 - u;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = v * polygon[i] + u * polygon[i + n];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param _u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(_u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n for (let i = 0; i < n; i++) {\r\n result[i] = polygon[i + n] - polygon[i];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n return (1.0 - u) * this.coffs[0] + u * this.coffs[1];\r\n }\r\n /** Same as `roots` method but returns single numeric value instead of array. */\r\n public solve(rightHandSide: number): number | undefined {\r\n const df = this.coffs[1] - this.coffs[0];\r\n return Geometry.conditionalDivideFraction(rightHandSide - this.coffs[0], df);\r\n }\r\n /**\r\n * Concrete implementation of the abstract roots method\r\n * @param targetValue target function value.\r\n * @param restrictTo01 flag for optional second step to eliminate root outside 0..1.\r\n * @returns If no roots, return undefined. If single root, return an array with the root.\r\n */\r\n public override roots(targetValue: number, restrictTo01: boolean): number[] | undefined {\r\n const x = this.solve(targetValue);\r\n if (x === undefined)\r\n return undefined;\r\n if (!restrictTo01 || Geometry.isIn01(x))\r\n return [x];\r\n return undefined;\r\n }\r\n}\r\n\r\n/** Bezier polynomial specialized to order 3 (3 coefficients, parabola function)\r\n * @internal\r\n */\r\nexport class Order3Bezier extends BezierCoffs {\r\n public constructor(f0: number = 0, f1: number = 0, f2: number = 0) {\r\n super(3);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n }\r\n /** Return a deep copy. */\r\n public clone(): Order3Bezier {\r\n return new Order3Bezier(this.coffs[0], this.coffs[1], this.coffs[2]);\r\n }\r\n\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 3. If insufficient length, a new array is returned.\r\n * @returns array of 3 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 3)\r\n result = new Float64Array(3);\r\n const v = 1.0 - u;\r\n result[0] = v * v;\r\n result[1] = 2.0 * u * v;\r\n result[2] = u * u;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n const b0 = v * v;\r\n const b1 = 2 * u * v;\r\n const b2 = u * u;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n];\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const f0 = 2 * (1 - u);\r\n const f1 = 2 * u;\r\n const n2 = 2 * n;\r\n for (let i = 0; i < n; i++) {\r\n const q = polygon[i + n];\r\n result[i] = f0 * (q - polygon[i]) + f1 * (polygon[i + n2] - q);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Add the square of a linear bezier.\r\n * @param f0 linear factor value at u=0.\r\n * @param f1 linear factor value at u=1.\r\n * @param a scale factor.\r\n */\r\n public addSquareLinear(f0: number, f1: number, a: number) {\r\n this.coffs[0] += a * f0 * f0;\r\n this.coffs[1] += a * f0 * f1;\r\n this.coffs[2] += a * f1 * f1;\r\n }\r\n /**\r\n * Concrete implementation of the abstract roots method\r\n * @param targetValue target function value.\r\n * @param restrictTo01 flag for optional second step to eliminate root outside 0..1.\r\n * @returns If no roots, return undefined. If roots exist, return as numeric array.\r\n */\r\n public override roots(targetValue: number, restrictTo01: boolean): number[] | undefined {\r\n const a0 = this.coffs[0] - targetValue;\r\n const a1 = this.coffs[1] - targetValue;\r\n const a2 = this.coffs[2] - targetValue;\r\n const a01 = a1 - a0;\r\n const a12 = a2 - a1;\r\n const a012 = a12 - a01;\r\n const roots = Degree2PowerPolynomial.solveQuadratic(a012, 2.0 * a01, a0);\r\n return super.filter01(roots, restrictTo01);\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v = 1.0 - u;\r\n return this.coffs[0] * v * v + u * (2.0 * this.coffs[1] * v + this.coffs[2] * u);\r\n }\r\n}\r\n\r\n/** Bezier polynomial specialized to order 4 (4 coefficients, cubic function)\r\n * @internal\r\n */\r\nexport class Order4Bezier extends BezierCoffs {\r\n public constructor(f0: number = 0, f1: number = 0, f2: number = 0, f3: number = 0) {\r\n super(4);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n this.coffs[3] = f3;\r\n }\r\n /** return a deep copy */\r\n public clone(): Order4Bezier {\r\n return new Order4Bezier(this.coffs[0], this.coffs[1], this.coffs[2], this.coffs[3]);\r\n }\r\n /** Create a product of a quadratic and a cubic. */\r\n public static createProductOrder3Order2(factorA: Order3Bezier, factorB: Order2Bezier): Order4Bezier {\r\n return new Order4Bezier(\r\n factorA.coffs[0] * factorB.coffs[0],\r\n (factorA.coffs[0] * factorB.coffs[1] + 2.0 * factorA.coffs[1] * factorB.coffs[0]) / 3.0,\r\n (2.0 * factorA.coffs[1] * factorB.coffs[1] + factorA.coffs[2] * factorB.coffs[0]) / 3.0,\r\n factorA.coffs[2] * factorB.coffs[1]);\r\n }\r\n /**\r\n * Evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 4. If insufficient length, a new array is returned.\r\n * @returns array of 4 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 4)\r\n result = new Float64Array(4);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const vv = v * v;\r\n result[0] = vv * v;\r\n result[1] = 3.0 * vv * u;\r\n result[2] = 3.0 * v * uu;\r\n result[3] = u * uu;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n const uu = u * u;\r\n const vv = v * v;\r\n const b0 = v * vv;\r\n const b1 = 3 * u * vv;\r\n const b2 = 3 * uu * v;\r\n const b3 = u * uu;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n] + b3 * polygon[i + 3 * n];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n // QUADRATIC basis functions applied to differences ... (with factor 3 for derivative)\r\n const f0 = 3 * (v * v);\r\n const f1 = 6 * u * v;\r\n const f2 = 3 * u * u;\r\n for (let i = 0; i < n; i++) {\r\n const q0 = polygon[i];\r\n const q1 = polygon[i + n];\r\n const q2 = polygon[i + 2 * n];\r\n const q3 = polygon[i + 3 * n];\r\n result[i] = f0 * (q1 - q0) + f1 * (q2 - q1) + f2 * (q3 - q2);\r\n }\r\n return result;\r\n }\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v1 = 1.0 - u;\r\n const v2 = v1 * v1;\r\n const v3 = v2 * v1;\r\n return this.coffs[0] * v3\r\n + u * (3.0 * this.coffs[1] * v2\r\n + u * (3.0 * this.coffs[2] * v1\r\n + u * this.coffs[3]));\r\n }\r\n /**\r\n * convert a power polynomial to bezier\r\n */\r\n public static createFromDegree3PowerPolynomial(source: Degree3PowerPolynomial): Order4Bezier {\r\n const f0 = source.evaluate(0.0);\r\n const d0 = source.evaluateDerivative(0.0);\r\n const d1 = source.evaluateDerivative(1.0);\r\n const f1 = source.evaluate(1.0);\r\n const a = 3.0;\r\n\r\n return new Order4Bezier(f0, f0 + d0 / a, f1 - d1 / a, f1);\r\n }\r\n /** Find real roots, return in caller-allocated array. */\r\n public realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array) {\r\n // Get direct solutions in standard basis\r\n roots.clear();\r\n const cc = new Float64Array(4);\r\n const y0 = this.coffs[0];\r\n const y1 = this.coffs[1];\r\n const y2 = this.coffs[2];\r\n const y3 = this.coffs[3];\r\n const yMax = Math.max(y0, y1, y2, y3);\r\n const yMin = Math.min(y0, y1, y2, y3);\r\n const smallValue = Geometry.smallMetricDistance;\r\n if (yMin > smallValue)\r\n return undefined;\r\n if (yMax < -smallValue)\r\n return undefined;\r\n\r\n if (yMin >= -smallValue && yMax < smallValue) {\r\n // all 4 are near zero . ..\r\n roots.push(0);\r\n roots.push(1.0 / 3.0);\r\n roots.push(2.0 / 3.0);\r\n roots.push(1.0);\r\n return; // p(x) == 0 has infinite roots .... return 4, which is a red flag for cubic\r\n }\r\n cc[0] = (y0 - e);\r\n cc[1] = 3.0 * (y1 - y0);\r\n cc[2] = 3.0 * (y0 - 2.0 * y1 + y2);\r\n cc[3] = - y0 + 3.0 * y1 - 3.0 * y2 + y3;\r\n AnalyticRoots.appendCubicRoots(cc, roots); // can't have zero solutions after passing min/max conditions . . .\r\n if (restrictTo01)\r\n roots.reassign(0, 1);\r\n return;\r\n }\r\n\r\n}\r\n/** Bezier polynomial specialized to order 5 (5 coefficients, quartic function)\r\n * @internal\r\n */\r\nexport class Order5Bezier extends BezierCoffs {\r\n constructor(f0: number = 0, f1: number = 0, f2: number = 0, f3: number = 0, f4: number = 0) {\r\n super(5);\r\n this.coffs[0] = f0;\r\n this.coffs[1] = f1;\r\n this.coffs[2] = f2;\r\n this.coffs[3] = f3;\r\n this.coffs[4] = f4;\r\n }\r\n /** Return a deep copy */\r\n public clone(): Order5Bezier {\r\n return new Order5Bezier(this.coffs[0], this.coffs[1], this.coffs[2], this.coffs[3], this.coffs[4]);\r\n }\r\n /**\r\n * convert a power polynomial to bezier\r\n */\r\n public static createFromDegree4PowerPolynomial(source: Degree4PowerPolynomial): Order5Bezier {\r\n const f0 = source.evaluate(0.0);\r\n const d0 = source.evaluateDerivative(0.0);\r\n const d4 = source.evaluateDerivative(1.0);\r\n const f4 = source.evaluate(1.0);\r\n const a = 0.25;\r\n const d0a = a * d0;\r\n const fa = f0 + d0a;\r\n const fm = 2.0 * fa - f0 + source.coffs[2] / 6.0;\r\n return new Order5Bezier(f0, fa, fm, f4 - d4 * a, f4);\r\n }\r\n\r\n /** evaluate the basis functions at specified u.\r\n * @param u bezier parameter for evaluation.\r\n * @param result optional destination of length 5. If insufficient length, a new array is returned.\r\n * @returns array of 5 basis function values.\r\n */\r\n public basisFunctions(u: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < 5)\r\n result = new Float64Array(5);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const uuu = uu * u;\r\n const vv = v * v;\r\n const vvv = vv * v;\r\n result[0] = vv * vv;\r\n result[1] = 4.0 * vvv * u;\r\n result[2] = 6.0 * vv * uu;\r\n result[3] = 4.0 * v * uuu;\r\n result[4] = uu * uu;\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional preallocated array of length `n` to fill and return. If insufficient length, a newly created array is returned.\r\n * @returns array of `n` summed basis function values.\r\n */\r\n public sumBasisFunctions(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1.0 - u;\r\n const uu = u * u;\r\n const uuu = uu * u;\r\n const vv = v * v;\r\n const vvv = vv * v;\r\n const b0 = vv * vv;\r\n const b1 = 4.0 * vvv * u;\r\n const b2 = 6.0 * vv * uu;\r\n const b3 = 4.0 * v * uuu;\r\n const b4 = uu * uu;\r\n for (let i = 0; i < n; i++) {\r\n result[i] = b0 * polygon[i] + b1 * polygon[i + n] + b2 * polygon[i + 2 * n] + b3 * polygon[i + 3 * n] + b4 * polygon[i + 4 * n];\r\n }\r\n return result;\r\n }\r\n /**\r\n * Sum the control points weighted by the basis function derivative values at parameter u.\r\n * @param u bezier parameter for evaluation.\r\n * @param polygon packed multidimensional control points. ASSUMED contains `n*order` values.\r\n * @param n dimension of control points.\r\n * @param result optional destination of length `n`. If insufficient length, a new array is returned.\r\n * @returns array of `n` summed basis function derivative values.\r\n */\r\n public sumBasisFunctionDerivatives(u: number, polygon: Float64Array, n: number, result?: Float64Array): Float64Array {\r\n if (!result || result.length < n)\r\n result = new Float64Array(n);\r\n const v = 1 - u;\r\n // CUBIC basis functions applied to differences ...\r\n const uu = u * u;\r\n const vv = v * v;\r\n const f0 = 4 * v * vv;\r\n const f1 = 12 * u * vv;\r\n const f2 = 12 * uu * v;\r\n const f3 = 4 * u * uu;\r\n for (let i = 0; i < n; i++) {\r\n const q0 = polygon[i];\r\n const q1 = polygon[i + n];\r\n const q2 = polygon[i + 2 * n];\r\n const q3 = polygon[i + 3 * n];\r\n const q4 = polygon[i + 4 * n];\r\n result[i] = f0 * (q1 - q0) + f1 * (q2 - q1) + f2 * (q3 - q2) + f3 * (q4 - q3);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Evaluate the bezier function at a parameter value. (i.e. sum the basis functions times coefficients)\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(u: number): number {\r\n const v1 = 1.0 - u;\r\n const v2 = v1 * v1;\r\n const v3 = v2 * v1;\r\n const v4 = v2 * v2;\r\n return this.coffs[0] * v4\r\n + u * (4.0 * this.coffs[1] * v3\r\n + u * (6.0 * this.coffs[2] * v2\r\n + u * (4.0 * this.coffs[3] * v1\r\n + u * this.coffs[4])));\r\n }\r\n /** Add the product of a pair of Order3Bezier to this one. */\r\n public addProductOrder3BezierOrder3Bezier(f: Order3Bezier, g: Order3Bezier, a: number) {\r\n this.coffs[0] += a * f.coffs[0] * g.coffs[0];\r\n this.coffs[1] += a * (f.coffs[0] * g.coffs[1] + f.coffs[1] * g.coffs[0]) * 0.5;\r\n this.coffs[2] += a * (f.coffs[0] * g.coffs[2] + 4.0 * f.coffs[1] * g.coffs[1] + f.coffs[2] * g.coffs[0]) / 6.0;\r\n this.coffs[3] += a * (f.coffs[1] * g.coffs[2] + f.coffs[2] * g.coffs[1]) * 0.5;\r\n this.coffs[4] += a * f.coffs[2] * g.coffs[2];\r\n }\r\n /** Add a constant to all coefficients (thereby adding the constant to the evaluated bezier) */\r\n public addConstant(a: number): void {\r\n for (let i = 0; i < 5; i++) this.coffs[i] += a;\r\n }\r\n /** Find real roots, return in caller-allocated array. */\r\n public realRoots(e: number, restrictTo01: boolean, roots: GrowableFloat64Array): void {\r\n roots.clear();\r\n const y0 = this.coffs[0] - e;\r\n const y1 = this.coffs[1] - e;\r\n const y2 = this.coffs[2] - e;\r\n const y3 = this.coffs[3] - e;\r\n const y4 = this.coffs[4] - e;\r\n // Get direct solutions in standard basis\r\n const yMax = Math.max(y0, y1, y2, y3, y4);\r\n const yMin = Math.min(y0, y1, y2, y3, y4);\r\n const smallValue = Geometry.smallMetricDistance;\r\n if (yMin > smallValue)\r\n return undefined;\r\n if (yMax < -smallValue)\r\n return undefined;\r\n\r\n if (yMin >= -smallValue && yMax < smallValue) {\r\n // all 4 are near zero . ..\r\n roots.push(0);\r\n roots.push(0.25);\r\n roots.push(0.5);\r\n roots.push(0.75);\r\n roots.push(1.0);\r\n return; // p(x) == 0 has infinite roots .... return 5, which is a red flag for cubic ...\r\n }\r\n\r\n const cc = new Float64Array(5);\r\n\r\n cc[0] = (y0 - e);\r\n cc[1] = 4.0 * (-y0 + y1);\r\n cc[2] = 6.0 * (y0 - 2.0 * y1 + y2);\r\n cc[3] = 4.0 * (-y0 + 3.0 * y1 - 3.0 * y2 + y3);\r\n cc[4] = (y0 - 4.0 * y1 + 6.0 * y2 - 4.0 * y3 + y4);\r\n\r\n AnalyticRoots.appendQuarticRoots(cc, roots);\r\n if (restrictTo01)\r\n roots.reassign(0, 1);\r\n return;\r\n }\r\n}\r\n"]}
|