@itwin/core-geometry 5.2.3 → 5.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/Constant.js.map +1 -1
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
- package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
- package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
- package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
- package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
- package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
- package/lib/cjs/clipping/ClipPlane.js.map +1 -1
- package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
- package/lib/cjs/clipping/ClipUtils.js.map +1 -1
- package/lib/cjs/clipping/ClipVector.js.map +1 -1
- package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
- package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
- package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
- package/lib/cjs/core-geometry.js.map +1 -1
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
- package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurve.js.map +1 -1
- package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
- package/lib/cjs/curve/CurveFactory.js.map +1 -1
- package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
- package/lib/cjs/curve/CurveOps.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/CurveProcessor.js.map +1 -1
- package/lib/cjs/curve/CurveTypes.js.map +1 -1
- package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
- package/lib/cjs/curve/GeometryQuery.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/Loop.js.map +1 -1
- package/lib/cjs/curve/OffsetOptions.js.map +1 -1
- package/lib/cjs/curve/ParityRegion.js.map +1 -1
- package/lib/cjs/curve/Path.js.map +1 -1
- package/lib/cjs/curve/PointString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
- package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
- package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
- package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
- package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
- package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/StrokeOptions.js.map +1 -1
- package/lib/cjs/curve/UnionRegion.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AnnounceTangentStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransferWithSplitArcs.js.map +1 -1
- package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
- package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
- package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
- package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
- package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
- package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
- package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
- package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
- package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
- package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
- package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
- package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
- package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
- package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
- package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
- package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
- package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
- package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
- package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
- package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
- package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
- package/lib/cjs/geometry4d/Map4d.js.map +1 -1
- package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
- package/lib/cjs/geometry4d/MomentData.js.map +1 -1
- package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
- package/lib/cjs/geometry4d/Point4d.js.map +1 -1
- package/lib/cjs/numerics/BandedSystem.js.map +1 -1
- package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
- package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
- package/lib/cjs/numerics/Complex.js.map +1 -1
- package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
- package/lib/cjs/numerics/Newton.js.map +1 -1
- package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
- package/lib/cjs/numerics/PolarData.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/numerics/Quadrature.js.map +1 -1
- package/lib/cjs/numerics/Range1dArray.js.map +1 -1
- package/lib/cjs/numerics/SmallSystem.js.map +1 -1
- package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
- package/lib/cjs/numerics/UnionFind.js.map +1 -1
- package/lib/cjs/numerics/UsageSums.js.map +1 -1
- package/lib/cjs/polyface/AuxData.js.map +1 -1
- package/lib/cjs/polyface/BoxTopology.js.map +1 -1
- package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
- package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
- package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
- package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
- package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
- package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
- package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
- package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
- package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
- package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
- package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
- package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
- package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
- package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
- package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
- package/lib/cjs/serialization/BGFBReader.js.map +1 -1
- package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
- package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
- package/lib/cjs/serialization/DeepCompare.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
- package/lib/cjs/solid/Box.js.map +1 -1
- package/lib/cjs/solid/Cone.js.map +1 -1
- package/lib/cjs/solid/LinearSweep.js.map +1 -1
- package/lib/cjs/solid/RotationalSweep.js.map +1 -1
- package/lib/cjs/solid/RuledSweep.js.map +1 -1
- package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/SweepContour.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/ChainMerge.js.map +1 -1
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
- package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
- package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
- package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
- package/lib/cjs/topology/MaskManager.js.map +1 -1
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/RegularizeFace.js.map +1 -1
- package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
- package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/cjs/topology/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":"Polynomials.js","sourceRoot":"","sources":["../../../src/numerics/Polynomials.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Numerics\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\nimport { GrowableFloat64Array, OptionalGrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\nimport { LongitudeLatitudeNumber } from \"../geometry3d/LongitudeLatitudeAltitude\";\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { XAndY } from \"../geometry3d/XYZProps\";\n\n// cspell:words Cardano internaldocs\n\n/**\n * degree 2 (quadratic) polynomial in for y = c0 + c1*x + c2*x^2\n * @internal\n */\nexport class Degree2PowerPolynomial {\n /** The three coefficients for the quadratic */\n public coffs: number[];\n\n constructor(c0: number = 0, c1: number = 0, c2: number = 0) {\n this.coffs = [c0, c1, c2];\n }\n\n /**\n * * Return 2 duplicate roots in double root case.\n * * The solutions are always in algebraic order.\n * @returns 0, 1, or 2 solutions of the usual quadratic (a*x*x + b * x + c = 0)\n */\n public static solveQuadratic(a: number, b: number, c: number): number[] | undefined {\n const b1 = Geometry.conditionalDivideFraction(b, a);\n const c1 = Geometry.conditionalDivideFraction(c, a);\n if (b1 !== undefined && c1 !== undefined) {\n // now solving xx + b1*x + c1 = 0 -- i.e. implied \"a\" coefficient is 1 . .\n const q = b1 * b1 - 4 * c1;\n if (q > 0) {\n const e = Math.sqrt(q);\n // e is positive, so this sorts algebraically\n return [0.5 * (-b1 - e), 0.5 * (-b1 + e)];\n }\n if (q < 0)\n return undefined;\n const root = -0.5 * b1;\n return [root, root];\n }\n // \"divide by a\" failed. solve bx + c = 0\n const x = Geometry.conditionalDivideFraction(-c, b);\n if (x !== undefined)\n return [x];\n return undefined;\n }\n /** Add `a` to the constant term. */\n public addConstant(a: number) {\n this.coffs[0] += a;\n }\n\n /** Add `s * (a + b*x)^2` to the quadratic coefficients */\n public addSquaredLinearTerm(a: number, b: number, s: number = 1): void {\n this.coffs[0] += s * (a * a);\n this.coffs[1] += s * (2.0 * a * b);\n this.coffs[2] += s * (b * b);\n }\n /** Return the real roots of this polynomial */\n public realRoots(): number[] | undefined {\n const ss = Degree2PowerPolynomial.solveQuadratic(this.coffs[2], this.coffs[1], this.coffs[0]);\n if (ss && ss.length > 1) {\n if (ss[0] > ss[1]) {\n const temp = ss[0];\n ss[0] = ss[1];\n ss[1] = temp;\n }\n }\n return ss;\n }\n\n /** Evaluate the quadratic at x. */\n public evaluate(x: number): number {\n return this.coffs[0] + x * (this.coffs[1] + x * this.coffs[2]);\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 evaluateDerivative(x: number): number {\n return this.coffs[1] + 2 * x * this.coffs[2];\n }\n\n /** Factor the polynomial in to the form `y0 + c * (x-x0)^2)`, i.e. complete the square. */\n public tryGetVertexFactorization(): { x0: number, y0: number, c: number } | undefined {\n const x = Geometry.conditionalDivideFraction(-this.coffs[1], 2.0 * this.coffs[2]);\n if (x !== undefined) {\n const y = this.evaluate(x);\n return { c: this.coffs[2], x0: x, y0: y };\n }\n return undefined;\n }\n /** Construct a quadratic from input form `c2 * (x-root0) * (x-root1)` */\n public static fromRootsAndC2(root0: number, root1: number, c2: number = 1): Degree2PowerPolynomial {\n return new Degree2PowerPolynomial(\n c2 * root0 * root1,\n - c2 * (root0 + root1),\n c2);\n }\n\n}\n/**\n * degree 3 (cubic) polynomial in for y = c0 + c1*x + c2*x^2 + c3*x^3\n * @internal\n */\nexport class Degree3PowerPolynomial {\n /** polynomial coefficients, index corresponds to power */\n public coffs: number[];\n\n constructor(c0: number = 0, c1: number = 0, c2: number = 0, c3: number = 1) {\n this.coffs = [c0, c1, c2, c3];\n }\n /** Add `a` to the constant term. */\n public addConstant(a: number) {\n this.coffs[0] += a;\n }\n\n /** Add `s * (a + b*x)^2` to the cubic */\n public addSquaredLinearTerm(a: number, b: number, s: number = 1): void {\n this.coffs[0] += s * (a * a);\n this.coffs[1] += s * (2.0 * a * b);\n this.coffs[2] += s * (b * b);\n }\n\n /**\n * Evaluate the polynomial at x\n * @param u parameter for evaluation\n */\n public evaluate(x: number): number {\n return this.coffs[0] + x * (this.coffs[1] + x * (this.coffs[2] + x * this.coffs[3]));\n }\n\n /**\n * Evaluate the polynomial derivative\n * @param u parameter for evaluation\n */\n public evaluateDerivative(x: number): number {\n return this.coffs[1] + x * (2.0 * this.coffs[2] + x * 3.0 * this.coffs[3]);\n }\n /** Construct a cubic from the form `c3 * (x-root0) * (x - root1) * (x- root2)` */\n public static fromRootsAndC3(root0: number, root1: number, root2: number, c3: number = 1.0): Degree3PowerPolynomial {\n return new Degree3PowerPolynomial(\n -c3 * root0 * root1 * root2,\n c3 * (root0 * root1 + root1 * root2 + root0 * root2),\n - c3 * (root0 + root1 + root2),\n c3);\n }\n}\n/**\n * degree 4 (quartic) polynomial in for y = c0 + c1*x + c2*x^2 + c4*x^4\n * @internal\n */\nexport class Degree4PowerPolynomial {\n /** polynomial coefficients, index corresponds to power */\n public coffs: number[];\n\n constructor(c0: number = 0, c1: number = 0, c2: number = 0, c3: number = 0, c4: number = 0) {\n this.coffs = [c0, c1, c2, c3, c4];\n }\n /** Add `a` to the constant term. */\n public addConstant(a: number) {\n this.coffs[0] += a;\n }\n\n /**\n * Evaluate the polynomial\n * @param x x coordinate for evaluation\n */\n public evaluate(x: number): number {\n return this.coffs[0] + x * (this.coffs[1] + x * (this.coffs[2] + x * (this.coffs[3] + x * this.coffs[4])));\n }\n\n /**\n * Evaluate the derivative\n * @param x x coordinate for evaluation\n */\n public evaluateDerivative(x: number): number {\n return (this.coffs[1] + x * (2.0 * this.coffs[2] + x * (3.0 * this.coffs[3] + x * 4.0 * this.coffs[4])));\n }\n\n /** Construct a quartic from the form `c3 * (x-root0) * (x - root1) * (x- root2) * (x-root3)` */\n public static fromRootsAndC4(root0: number, root1: number, root2: number, root3: number, c4: number = 1): Degree4PowerPolynomial {\n return new Degree4PowerPolynomial(\n c4 * (root0 * root1 * root2 * root3),\n -c4 * (root0 * root1 * root2 + root0 * root1 * root3 + root0 * root2 * root3 + root1 * root2 * root3),\n c4 * (root0 * root1 + root0 * root2 + root0 * root3 + root1 * root2 + root1 * root3 + root2 * root3),\n -c4 * (root0 + root1 + root2 + root3),\n c4);\n }\n\n}\n/**\n * polynomial services for an implicit torus with\n * * z axis is \"through the donut hole\"\n * * `majorRadius` is the radius of the circle \"around the z axis\"\n * * `minorRadius` is the radius of circles around the major circle\n * * for simple xyz the implicit form is\n * * `(x^2+y^2+z^2+(R^2-r^2))^2 = 4 R^2(x^2+y^2)`\n * * In weighted form\n * * `(x^2+y^2+z^2+(R^2-r^2)w^2)^2 = 4 R^2 w^2 (x^2+y^2)`\n * @internal\n */\nexport class TorusImplicit {\n /** major (xy plane) radius */\n public majorRadius: number;\n /** hoop (perpendicular to major circle) radius */\n public minorRadius: number;\n\n constructor(majorRadius: number, minorRadius: number) {\n this.majorRadius = majorRadius;\n this.minorRadius = minorRadius;\n }\n\n /** Return sum of (absolute) major and minor radii, which is (half) the box size in x and y directions */\n public boxSize() {\n return (Math.abs(this.majorRadius) + Math.abs(this.minorRadius));\n }\n /** Return scale factor appropriate to control the magnitude of the implicit function. */\n public implicitFunctionScale(): number {\n const a = this.boxSize();\n if (a === 0.0)\n return 1.0;\n return 1.0 / (a * a * a * a);\n }\n\n /**\n * At space point (x,y,z) evaluate the implicit form of the torus (See `ImplicitTorus`)\n */\n public evaluateImplicitFunctionXYZ(x: number, y: number, z: number): number {\n const rho2 = x * x + y * y;\n const z2 = z * z;\n const R2 = this.majorRadius * this.majorRadius;\n const r2 = this.minorRadius * this.minorRadius;\n const f = rho2 + z2 + (R2 - r2);\n const g = 4.0 * R2 * rho2;\n return (f * f - g) * this.implicitFunctionScale();\n }\n /** Evaluate the implicit function at a point. */\n public evaluateImplicitFunctionPoint(xyz: Point3d): number {\n return this.evaluateImplicitFunctionXYZ(xyz.x, xyz.y, xyz.z);\n }\n /** Evaluate the implicit function at homogeneous coordinates */\n public evaluateImplicitFunctionXYZW(x: number, y: number, z: number, w: number) {\n const rho2 = x * x + y * y;\n const z2 = z * z;\n const w2 = w * w;\n const R2 = this.majorRadius * this.majorRadius;\n const r2 = this.minorRadius * this.minorRadius;\n const f = rho2 + z2 + w2 * (R2 - r2);\n const g = w2 * 4.0 * R2 * rho2;\n return (f * f - g) * this.implicitFunctionScale();\n }\n\n /** Evaluate the surface point at angles (in radians) on the major and minor circles. */\n public evaluateThetaPhi(thetaRadians: number, phiRadians: number): Point3d {\n const c = Math.cos(thetaRadians);\n const s = Math.sin(thetaRadians);\n // theta=0 point\n const x0 = this.majorRadius + this.minorRadius * Math.cos(phiRadians);\n const z0 = this.minorRadius * Math.sin(phiRadians);\n return Point3d.create(c * x0, s * x0, z0);\n }\n\n /** Evaluate partial derivatives at angles (int radians) on major and minor circles. */\n public evaluateDerivativesThetaPhi(thetaRadians: number, phiRadians: number, dxdTheta: Vector3d, dxdPhi: Vector3d) {\n const cTheta = Math.cos(thetaRadians);\n const sTheta = Math.sin(thetaRadians);\n const bx = this.minorRadius * Math.cos(phiRadians);\n const bz = this.minorRadius * Math.sin(phiRadians);\n const x0 = this.majorRadius + bx;\n Vector3d.create(-x0 * sTheta, x0 * cTheta, 0.0, dxdTheta);\n Vector3d.create(-cTheta * bz, -sTheta * bz, bx, dxdPhi);\n }\n\n /** Evaluate space point at major and minor angles (in radians) and distance from major hoop. */\n public evaluateThetaPhiDistance(thetaRadians: number, phiRadians: number, distance: number): Point3d {\n const c = Math.cos(thetaRadians);\n const s = Math.sin(thetaRadians);\n // theta=0 point\n const x0 = this.majorRadius + distance * Math.cos(phiRadians);\n const z0 = distance * Math.sin(phiRadians);\n return Point3d.create(c * x0, s * x0, z0);\n }\n /** Given an xyz coordinate in the local system of the toroid, compute the torus parametrization\n * * theta = angular coordinate in xy plane\n * * phi = angular coordinate in minor circle.\n * * distance = distance from major circle\n * * rho = distance from origin to xy part of the input.\n * @param xyz space point in local coordinates.\n * @return object with properties theta, phi, distance, rho\n */\n public xyzToThetaPhiDistance(xyz: Point3d): { theta: number, phi: number, distance: number, rho: number, safePhi: boolean } {\n const rho = xyz.magnitudeXY();\n const majorRadiusFactor = Geometry.conditionalDivideFraction(this.majorRadius, rho);\n let safeMajor;\n let majorCirclePoint;\n if (majorRadiusFactor) {\n safeMajor = true;\n majorCirclePoint = Point3d.create(majorRadiusFactor * xyz.x, majorRadiusFactor * xyz.y, 0.0);\n } else {\n safeMajor = false;\n majorCirclePoint = Point3d.create(xyz.x, xyz.y, 0.0);\n }\n const theta = safeMajor ? Math.atan2(xyz.y, xyz.x) : 0.0;\n const vectorFromMajorCircle = Vector3d.createStartEnd(majorCirclePoint, xyz);\n const distance = vectorFromMajorCircle.magnitude();\n const dRho = rho - this.majorRadius;\n let safePhi;\n let phi;\n if (xyz.z === 0.0 && dRho === 0.0) {\n phi = 0.0;\n safePhi = false;\n } else {\n phi = Math.atan2(xyz.z, dRho);\n safePhi = true;\n }\n return { theta, phi, distance, rho, safePhi: safeMajor && safePhi };\n }\n /*\n public minorCircle(theta: Angle): Arc3d {\n const c = Math.cos(theta.radians);\n const s = Math.sin(theta.radians);\n return Arc3d.create(\n Point3d.create(c * this.majorRadius, s * this.majorRadius, 0.0),\n Vector3d.create(c * this.minorRadius, s * this.minorRadius, 0.0),\n Vector3d.create(0.0, 0.0, this.minorRadius),\n AngleSweep.create360()) as Arc3d;\n }\n\n public majorCircle(phi: Angle): Arc3d {\n const c = Math.cos(phi.radians);\n const s = Math.sin(phi.radians);\n const a = this.majorRadius + c * this.minorRadius;\n return Arc3d.create(\n Point3d.create(0.0, 0.0, this.minorRadius * s),\n Vector3d.create(a, 0.0, 0.0),\n Vector3d.create(0.0, a, 0.0),\n AngleSweep.create360()) as Arc3d;\n }\n */\n}\n/**\n * evaluation methods for an implicit sphere\n * * xyz function `x*x + y*y + z*z - r*r = 0`.\n * * xyzw function `x*x + y*y + z*z - r*r*w*w = 0`.\n * @internal\n */\nexport class SphereImplicit {\n /** Radius of sphere. */\n public radius: number;\n constructor(r: number) { this.radius = r; }\n\n /** Evaluate the implicit function at coordinates x,y,z */\n public evaluateImplicitFunction(x: number, y: number, z: number): number {\n return x * x + y * y + z * z - this.radius * this.radius;\n }\n\n /** Evaluate the implicit function at homogeneous coordinates x,y,z,w */\n public evaluateImplicitFunctionXYZW(wx: number, wy: number, wz: number, w: number): number {\n return (wx * wx + wy * wy + wz * wz) - this.radius * this.radius * w * w;\n }\n\n /** Given an xyz coordinate in the local system of the toroid, compute the sphere parametrization\n * * theta = angular coordinate in xy plane\n * * phi = rotation from xy plane towards z axis.\n * @param xyz space point in local coordinates.\n * @return object with properties thetaRadians, phi, r\n */\n public xyzToThetaPhiR(xyz: Point3d): { thetaRadians: number, phiRadians: number, r: number, valid: boolean } {\n const rhoSquared = xyz.x * xyz.x + xyz.y * xyz.y;\n const rho = Math.sqrt(rhoSquared);\n const r = Math.sqrt(rhoSquared + xyz.z * xyz.z);\n let theta;\n let phi;\n let valid;\n if (r === 0.0) {\n theta = phi = 0.0;\n valid = false;\n } else {\n phi = Math.atan2(xyz.z, rho); // At least one of these is nonzero\n if (rhoSquared !== 0.0) {\n theta = Math.atan2(xyz.y, xyz.x);\n valid = true;\n } else {\n theta = 0.0;\n valid = false;\n }\n }\n return { thetaRadians: (theta), phiRadians: (phi), r, valid };\n }\n /** Return the range of a uv-aligned patch of the sphere. */\n public static patchRangeStartEndRadians(center: Point3d, radius: number, theta0Radians: number, theta1Radians: number, phi0Radians: number, phi1Radians: number, result?: Range3d): Range3d {\n const thetaSweep = AngleSweep.createStartEndRadians(theta0Radians, theta1Radians);\n const phiSweep = AngleSweep.createStartEndRadians(phi0Radians, phi1Radians);\n const range = Range3d.createNull(result);\n const xyz = Point3d.create();\n if (thetaSweep.isFullCircle && phiSweep.isFullLatitudeSweep) {\n // full sphere, no trimming -- build directly\n range.extendPoint(center);\n range.expandInPlace(Math.abs(radius));\n } else {\n const sphere = new SphereImplicit(radius);\n // construct range for ORIGIN CENTERED sphere ...\n const pi = Math.PI;\n const piOver2 = 0.5 * Math.PI;\n let phi, theta;\n // 6 candidate interior extreme points on equator and 0, 90 degree meridians\n for (const thetaPhi of [\n [0.0, 0.0],\n [pi, 0.0],\n [piOver2, 0.0],\n [-piOver2, 0.0],\n [theta0Radians, piOver2],\n [theta0Radians, -piOver2]]) {\n theta = thetaPhi[0];\n phi = thetaPhi[1];\n if (thetaSweep.isRadiansInSweep(theta) && phiSweep.isRadiansInSweep(phi))\n range.extendPoint(sphere.evaluateThetaPhi(theta, phi, xyz));\n }\n\n // 4 boundary curves, each with 3 components ...\n // BUT: phi should not extend beyond poles. Hence z extremes on constant theta curve will never be different from z of constant phi curve or of poles as tested above.\n const axisRange = Range1d.createNull();\n const cosPhi0 = Math.cos(phi0Radians);\n const cosPhi1 = Math.cos(phi1Radians);\n const sinPhi0 = Math.sin(phi0Radians);\n const sinPhi1 = Math.sin(phi1Radians);\n const trigForm = new SineCosinePolynomial(0, 0, 0);\n // constant phi curves at phi0 and phi1\n for (const cosPhi of [cosPhi0, cosPhi1]) {\n trigForm.set(0, cosPhi * radius, 0);\n trigForm.rangeInSweep(thetaSweep, axisRange);\n range.extendXOnly(axisRange.low); range.extendXOnly(axisRange.high);\n trigForm.set(0, 0, cosPhi * radius);\n trigForm.rangeInSweep(thetaSweep, axisRange);\n range.extendYOnly(axisRange.low); range.extendYOnly(axisRange.high);\n }\n range.extendZOnly(sinPhi0 * radius);\n range.extendZOnly(sinPhi1 * radius);\n\n // constant theta curves as theta0 and theta1:\n for (const thetaRadians of [theta0Radians, theta1Radians]) {\n const cosThetaR = Math.cos(thetaRadians) * radius;\n const sinThetaR = Math.sin(thetaRadians) * radius;\n trigForm.set(0, cosThetaR, 0);\n trigForm.rangeInSweep(phiSweep, axisRange);\n range.extendXOnly(axisRange.low); range.extendXOnly(axisRange.high);\n\n trigForm.set(0, sinThetaR, 0);\n trigForm.rangeInSweep(phiSweep, axisRange);\n range.extendYOnly(axisRange.low); range.extendYOnly(axisRange.high);\n }\n range.cloneTranslated(center, range);\n }\n return range;\n }\n /** Compute intersections with a ray.\n * * Return the number of intersections\n * * Fill any combinations of arrays of\n * * rayFractions = fractions along the ray\n * * xyz = xyz intersection coordinates points in space\n * * thetaPhiRadians = sphere longitude and latitude in radians.\n * * For each optional array, caller must of course initialize an array (usually empty)\n */\n public static intersectSphereRay(center: Point3d, radius: number, ray: Ray3d, rayFractions: number[] | undefined, xyz: Point3d[] | undefined, thetaPhiRadians: LongitudeLatitudeNumber[] | undefined): number {\n const vx = ray.origin.x - center.x;\n const vy = ray.origin.y - center.y;\n const vz = ray.origin.z - center.z;\n const ux = ray.direction.x;\n const uy = ray.direction.y;\n const uz = ray.direction.z;\n const a0 = Geometry.hypotenuseSquaredXYZ(vx, vy, vz) - radius * radius;\n const a1 = 2.0 * Geometry.dotProductXYZXYZ(ux, uy, uz, vx, vy, vz);\n const a2 = Geometry.hypotenuseSquaredXYZ(ux, uy, uz);\n const parameters = Degree2PowerPolynomial.solveQuadratic(a2, a1, a0);\n if (rayFractions !== undefined)\n rayFractions.length = 0;\n if (xyz !== undefined)\n xyz.length = 0;\n if (thetaPhiRadians !== undefined)\n thetaPhiRadians.length = 0;\n\n if (parameters === undefined) {\n return 0;\n }\n const sphere = new SphereImplicit(radius);\n if (rayFractions !== undefined)\n for (const f of parameters) rayFractions.push(f);\n if (xyz !== undefined || thetaPhiRadians !== undefined) {\n for (const f of parameters) {\n const point = ray.fractionToPoint(f);\n if (xyz !== undefined)\n xyz.push(point);\n if (thetaPhiRadians !== undefined) {\n const data = sphere.xyzToThetaPhiR(point);\n thetaPhiRadians.push(LongitudeLatitudeNumber.createRadians(data.thetaRadians, data.phiRadians));\n }\n }\n }\n return parameters.length;\n }\n\n // public intersectRay(ray: Ray3d, maxHit: number): {rayFractions: number, points: Point3d} {\n // const q = new Degree2PowerPolynomial();\n // // Ray is (origin.x + s * direction.x, etc)\n // // squared distance from origin is (origin.x + s*direction.x)^2 + etc\n // // sphere radius in local system is 1.\n // q.addSquaredLinearTerm(ray.origin.x, ray.direction.x);\n // q.addSquaredLinearTerm(ray.origin.y, ray.direction.y);\n // q.addSquaredLinearTerm(ray.origin.z, ray.direction.z);\n // q.addConstant(-this.radius * this.radius);\n // let ss = [];\n // let n = q.realRoots(ss);\n // if (n > maxHit)\n // n = maxHit;\n // let rayFractions;\n // let points;\n // for (let i = 0; i < n; i++) {\n // rayFractions[i] = ss[i];\n // points[i] = Point3d. // What is the equivalent of FromSumOf in TS?\n // }\n /** Compute the point on a sphere at angular coordinates.\n * @param thetaRadians latitude angle\n * @param phiRadians longitude angle\n */\n public evaluateThetaPhi(thetaRadians: number, phiRadians: number, result?: Point3d): Point3d {\n const rc = this.radius * Math.cos(thetaRadians);\n const rs = this.radius * Math.sin(thetaRadians);\n const cosPhi = Math.cos(phiRadians);\n const sinPhi = Math.sin(phiRadians);\n return Point3d.create(rc * cosPhi, rs * cosPhi, this.radius * sinPhi, result);\n }\n /**\n * * convert radians to xyz on unit sphere\n * * Note that there is no radius used -- implicitly radius is 1\n * * Evaluation is always to a preallocated xyz.\n */\n public static radiansToUnitSphereXYZ(thetaRadians: number, phiRadians: number, xyz: XYZ) {\n const cosTheta = Math.cos(thetaRadians);\n const sinTheta = Math.sin(thetaRadians);\n const cosPhi = Math.cos(phiRadians);\n const sinPhi = Math.sin(phiRadians);\n xyz.x = cosTheta * cosPhi;\n xyz.y = sinTheta * cosPhi;\n xyz.z = sinPhi;\n }\n /** Compute the derivatives with respect to spherical angles.\n * @param thetaRadians latitude angle\n * @param phiRadians longitude angle\n */\n public evaluateDerivativesThetaPhi(thetaRadians: number, phiRadians: number, dxdTheta: Vector3d, dxdPhi: Vector3d) {\n const rc = this.radius * Math.cos(thetaRadians);\n const rs = this.radius * Math.sin(thetaRadians);\n const cosPhi = Math.cos(phiRadians);\n const sinPhi = Math.sin(phiRadians);\n Vector3d.create(-rs * cosPhi, rc * cosPhi, 0.0, dxdTheta);\n Vector3d.create(-rc * sinPhi, -rs * sinPhi, this.radius * cosPhi, dxdPhi);\n }\n /*\n public meridianCircle(theta: number): Arc3d {\n const rc = this.radius * Math.cos(theta);\n const rs = this.radius * Math.sin(theta);\n return Arc3d.create(\n Point3d.create(0.0, 0.0, 0.0),\n Vector3d.create(rc, rs, 0),\n Vector3d.create(0, 0, this.radius),\n AngleSweep.create360()) as Arc3d;\n }\n\n public parallelCircle(phi: number): Arc3d {\n const cr = this.radius * Math.cos(phi);\n const sr = this.radius * Math.sin(phi);\n return Arc3d.create(\n Point3d.create(0, 0, sr),\n Vector3d.create(cr, 0, 0),\n Vector3d.create(0, cr, 0),\n AngleSweep.create360()) as Arc3d;\n }\n */\n}\n/** AnalyticRoots has static methods for solving quadratic, cubic, and quartic equations.\n * @internal\n *\n */\nexport class AnalyticRoots {\n private static readonly _EQN_EPS = 1.0e-9;\n private static readonly _safeDivideFactor = 1.0e-14;\n /** Absolute zero test with a tolerance that has worked well for the analytic root use case . . . */\n private static isZero(x: number): boolean {\n return Math.abs(x) < this._EQN_EPS;\n }\n /** Without actually doing a division, test if (x/y) is small.\n * @param x numerator\n * @param y denominator\n * @param absTol absolute tolerance\n * @param relTol relative tolerance\n */\n private static isSmallRatio(x: number, y: number, absTol: number = 1.0e-9, relTol: number = 8.0e-16) {\n return Math.abs(x) <= absTol || Math.abs(x) < relTol * Math.abs(y);\n }\n /** Return the (real, signed) principal cube root of x */\n public static cbrt(x: number): number {\n return ((x) > 0.0\n ? Math.pow((x), 1.0 / 3.0)\n : ((x) < 0.0\n ? -Math.pow(-(x), 1.0 / 3.0)\n : 0.0));\n }\n /**\n * Try to divide `numerator/denominator` and place the result (or defaultValue) in `values[offset]`\n * @param values array of values. `values[offset]` will be replaced.\n * @param numerator numerator for division.\n * @param denominator denominator for division.\n * @param defaultValue value to save if denominator is too small to divide.\n * @param offset index of value to replace.\n */\n private static safeDivide(values: Float64Array, numerator: number, denominator: number, defaultValue: number = 0.0, offset: number): boolean {\n if (Math.abs(denominator) > (this._safeDivideFactor * Math.abs(numerator))) {\n values[offset] = numerator / denominator;\n return true;\n }\n values[offset] = defaultValue;\n return false;\n }\n // Used in NewtonMethod for testing if a root has been adjusted past its bounding region\n private static checkRootProximity(roots: GrowableFloat64Array, i: number): boolean {\n if (i === 0) { // Case 1: Beginning Root (check root following it)\n return roots.atUncheckedIndex(i) < roots.atUncheckedIndex(i + 1);\n } else if (i > 0 && i + 1 < roots.length) { // Case 2: Middle Root (check roots before and after)\n return (roots.atUncheckedIndex(i) > roots.atUncheckedIndex(i - 1)) && (roots.atUncheckedIndex(i) < roots.atUncheckedIndex(i + 1));\n } else { // Case 3: End root (check preceding root)\n return (roots.atUncheckedIndex(i) > roots.atUncheckedIndex(i - 1));\n }\n }\n private static newtonMethodAdjustment(coffs: Float64Array | number[], root: number, degree: number): number | undefined {\n let p = coffs[degree];\n let q = 0.0;\n for (let i = degree - 1; i >= 0; i--) {\n q = p + root * q;\n p = coffs[i] + root * p;\n }\n if (Math.abs(q) >= 1.0e-14 * (1.0 + Math.abs(root))) {\n return p / q;\n }\n return undefined;\n }\n private static improveRoots(\n coffs: Float64Array | number[], degree: number, roots: GrowableFloat64Array, restrictOrderChanges: boolean,\n ) {\n const relTol = 1.0e-10;\n // Loop through each root\n for (let i = 0; i < roots.length; i++) {\n let dx = this.newtonMethodAdjustment(coffs, roots.atUncheckedIndex(i), degree);\n if (dx === undefined || dx === 0.0) continue; // skip if newton step had divide by zero.\n const originalValue = roots.atUncheckedIndex(i);\n let counter = 0;\n let convergenceCounter = 0;\n // Loop through applying changes to found root until dx is diminished or counter is hit\n while (dx !== undefined && dx !== 0.0 && (counter < 12)) {\n // consider it converged if two successive iterations satisfy the (not too demanding) tolerance.\n if (Math.abs(dx) < relTol * (1.0 + Math.abs(roots.atUncheckedIndex(i)))) {\n if (++convergenceCounter > 1)\n break;\n } else {\n convergenceCounter = 0;\n }\n const rootDX = roots.atUncheckedIndex(i) - dx;\n roots.reassign(i, rootDX);\n // If root is thrown past one of its neighboring roots, unstable condition is assumed.. revert\n // to originally found root\n if (restrictOrderChanges && !this.checkRootProximity(roots, i)) {\n roots.reassign(i, originalValue);\n break;\n }\n dx = this.newtonMethodAdjustment(coffs, roots.atUncheckedIndex(i), degree);\n counter++;\n }\n }\n }\n /**\n * Append (if defined) value to results.\n * @param value optional value to append\n * @param results growing array\n */\n private static appendSolution(value: number | undefined, results: GrowableFloat64Array) {\n if (value !== undefined) {\n results.push(value);\n }\n }\n /**\n * Append 2 solutions -- note that both are required args, no option of omitting as in single solution case\n * @param value1\n * @param value2\n * @param results\n */\n private static append2Solutions(valueA: number, valueB: number, results: GrowableFloat64Array) {\n results.push(valueA);\n results.push(valueB);\n }\n\n /**\n * If `co/c1` is a safe division, append it to the values array.\n * @param c0 numerator\n * @param c1 denominator\n * @param values array to expand\n */\n public static appendLinearRoot(c0: number, c1: number, values: GrowableFloat64Array) {\n AnalyticRoots.appendSolution(Geometry.conditionalDivideFraction(-c0, c1), values);\n }\n /**\n * * Compute the mean of all the entries in `data`\n * * Return the data value that is farthest away\n */\n public static mostDistantFromMean(data: GrowableFloat64Array | undefined): number {\n if (!data || data.length === 0) return 0;\n let a = 0.0; // to become the sum and finally the average.\n for (let i = 0; i < data.length; i++) a += data.atUncheckedIndex(i);\n a /= data.length;\n let dMax = 0.0;\n let result = data.atUncheckedIndex(0);\n for (let i = 0; i < data.length; i++) {\n const d = Math.abs(data.atUncheckedIndex(i) - a);\n if (d > dMax) {\n dMax = d;\n result = data.atUncheckedIndex(i);\n }\n }\n return result;\n }\n /**\n * Append 0, 1, or 2 solutions of a quadratic to the values array.\n * @param c array of coefficients for quadratic `c[0] + c[1] * x + c[2] * x*x`\n * @param values array to be expanded.\n */\n public static appendQuadraticRoots(c: Float64Array | number[], values: GrowableFloat64Array) {\n // Normal form: x^2 + 2px + q = 0\n\n const divFactor = Geometry.conditionalDivideFraction(1.0, c[2]);\n if (!divFactor) {\n this.appendLinearRoot(c[0], c[1], values);\n return;\n }\n\n const p = 0.5 * c[1] * divFactor;\n const q = c[0] * divFactor;\n\n const D = p * p - q;\n\n if (this.isZero(D)) {\n this.appendSolution(-p, values);\n return;\n } else if (D < 0) {\n return;\n } else if (D > 0) {\n const sqrtD = Math.sqrt(D);\n this.append2Solutions(sqrtD - p, - sqrtD - p, values);\n return;\n }\n return;\n }\n /** Add `a` to the constant term. */\n private static addConstant(value: number, data: GrowableFloat64Array) {\n for (let i = 0; i < data.length; i++) data.reassign(i, data.atUncheckedIndex(i) + value);\n }\n\n private static signedCubeRoot(y: number): number {\n if (y >= 0.0)\n return Math.pow(y, 1.0 / 3.0);\n return -Math.pow(-y, 1.0 / 3.0);\n }\n /**\n * RWD Nickalls Cubic solution\n * The Mathematical Gazette (1993) (vol 77) pp 354-359\n * * ASSUME a is nonzero.\n */\n // Solve full cubic ASSUMING a3 is nonzero.\n private static appendFullCubicSolutions(a: number, b: number, c: number, d: number, result: GrowableFloat64Array) {\n const q = b * b - 3.0 * a * c;\n const aa = a * a;\n const delta2 = q / (9.0 * aa);\n const xN = - b / (3.0 * a);\n const yN = d + xN * (c + xN * (b + xN * a));\n const yN2 = yN * yN;\n const h2 = 4.0 * a * a * delta2 * delta2 * delta2;\n const discriminant = yN2 - h2;\n if (discriminant > 0) {\n // 1 real root\n const r = Math.sqrt(discriminant);\n const f = 0.5 / a;\n result.push(xN + this.signedCubeRoot(f * (-yN + r)) + this.signedCubeRoot(f * (-yN - r)));\n } else if (discriminant < 0) {\n // 3 real roots\n let h = Math.sqrt(h2);\n // I don't see comment in Nickalls about sign of h -- but this sign change is needed ...\n if (a < 0)\n h = -h;\n // sign of h?\n const thetaRadians = Math.acos(-yN / h) / 3.0;\n const g = 2.0 * Math.sqrt(delta2);\n const shift = 2.0 * Math.PI / 3.0;\n result.push(xN + g * Math.cos(thetaRadians));\n result.push(xN + g * Math.cos(thetaRadians + shift));\n result.push(xN + g * Math.cos(thetaRadians - shift));\n } else {\n // NOTE: The double-root case is not toleranced.\n // double root + single root\n const delta = this.signedCubeRoot(0.5 * yN / a);\n const minMaxRoot = xN + delta;\n result.push(xN - 2 * delta);\n result.push(minMaxRoot);\n result.push(minMaxRoot);\n }\n }\n\n /* return roots of a cubic c0 + c1 *x + c2 * x^2 + c2 * x3.\n * In the usual case where c0 is non-zero, there are either 1 or 3 roots.\n * But if c0 is zero the (0, 1, or 2) roots of the lower order equation\n */\n /*\n private static _appendCubicRootsUnsorted(c: Float64Array | number[], results: GrowableFloat64Array) {\n let AA: number;\n let p: number;\n let q: number;\n\n // normal form: x^3 + Ax^2 + Bx + C = 0\n\n const scaleFactor = Geometry.conditionalDivideFraction(1.0, c[3]);\n if (!scaleFactor) {\n this.appendQuadraticRoots(c, results);\n return;\n }\n // It is a real cubic. There MUST be at least one real solution . . .\n const A: number = c[2] * scaleFactor;\n const B: number = c[1] * scaleFactor;\n const C: number = c[0] * scaleFactor;\n\n // substitute x = y - A/3 to eliminate quadric term:\n // f = y^3 +3py + 2q = 0\n // f' = 3y^2 + p\n // local min/max at Y = +-sqrt (-p)\n // f(+Y) = -p sqrt(-p) + 3p sqrt (-p) + 2q = 2 p sqrt (-p) + 2q\n AA = A * A;\n p = (3.0 * B - AA) / 9.0;\n q = 1.0 / 2 * (2.0 / 27 * A * AA - 1.0 / 3 * A * B + C);\n\n // Use Cardano formula\n const cb_p: number = p * p * p;\n const D: number = q * q + cb_p;\n const origin = A / (-3.0);\n if (D >= 0.0 && this.isZero(D)) {\n if (this.isZero(q)) {\n // One triple solution\n results.push(origin);\n results.push(origin);\n results.push(origin);\n return;\n } else {\n // One single and one double solution\n const u = this.cbrt(-q);\n if (u < 0) {\n results.push(origin + 2 * u);\n results.push(origin - u);\n results.push(origin - u);\n return;\n } else {\n results.push(origin - u);\n results.push(origin - u);\n results.push(origin + 2 * u);\n return;\n }\n }\n } else if (D <= 0) { // three real solutions\n const phi = 1.0 / 3 * Math.acos(-q / Math.sqrt(-cb_p));\n const t = 2 * Math.sqrt(-p);\n results.push(origin + t * Math.cos(phi));\n results.push(origin - t * Math.cos(phi + Math.PI / 3));\n results.push(origin - t * Math.cos(phi - Math.PI / 3));\n this.improveRoots(c, 3, results, false);\n\n return;\n } else { // One real solution\n const sqrtD = Math.sqrt(D);\n const u = this.cbrt(sqrtD - q);\n const v = -(this.cbrt(sqrtD + q));\n results.push(origin + u + v);\n this.improveRoots(c, 3, results, false);\n return;\n }\n }\n */\n /** Compute roots of cubic 'c[0] + c[1] * x + c[2] * x^2 + c[3] * x^3 */\n public static appendCubicRoots(c: Float64Array | number[], results: GrowableFloat64Array) {\n if (Geometry.conditionalDivideCoordinate(1.0, c[3]) !== undefined) {\n this.appendFullCubicSolutions(c[3], c[2], c[1], c[0], results);\n // EDL April 5, 2020 replace classic GraphicsGems solver by RWDNickalls.\n // Don't know if improveRoots is needed.\n // Breaks in AnalyticRoots.test.ts checkQuartic suggest it indeed converts many e-16 errors to zero.\n // e-13 cases are unaffected\n this.improveRoots(c, 3, results, false);\n } else {\n this.appendQuadraticRoots(c, results);\n }\n // this.appendCubicRootsUnsorted(c, results);\n results.sort();\n }\n /** Compute roots of quartic `c[0] + c[1] * x + c[2] * x^2 + c[3] * x^3 + c[4] * x^4` */\n public static appendQuarticRoots(c: Float64Array | number[], results: GrowableFloat64Array) {\n // for details, see core\\geometry\\internaldocs\\quarticRoots.md\n const coffs = new Float64Array(4);\n let u: number;\n let v: number;\n const coffScale = new Float64Array(1);\n if (!this.safeDivide(coffScale, 1.0, c[4], 0.0, 0)) {\n this.appendCubicRoots(c, results);\n return;\n }\n // normal form: x^4 + Ax^3 + Bx^2 + Cx + D = 0\n const A: number = c[3] * coffScale[0];\n const B: number = c[2] * coffScale[0];\n const C: number = c[1] * coffScale[0];\n const D: number = c[0] * coffScale[0];\n const origin = -0.25 * A;\n // substitute x = y - A/4 to eliminate cubic term: y^4 + py^2 + qy + r = 0\n const AA: number = A * A;\n const p: number = -0.375 * AA + B;\n const q: number = 0.125 * AA * A - 0.5 * A * B + C;\n const r: number = -0.01171875 * AA * AA + 0.0625 * AA * B - 0.25 * A * C + D;\n const cubicSolutions = new GrowableFloat64Array();\n if (this.isZero(r)) { // no absolute term: y(y^3 + py + q) = 0\n coffs[0] = q;\n coffs[1] = p;\n coffs[2] = 0;\n coffs[3] = 1;\n this.appendCubicRoots(coffs, results);\n results.push(0);\n this.addConstant(origin, results); // apply origin\n return;\n } else { // solve the resolvent cubic\n coffs[0] = 0.5 * r * p - 0.125 * q * q;\n coffs[1] = -r;\n coffs[2] = -0.5 * p;\n coffs[3] = 1;\n this.appendCubicRoots(coffs, cubicSolutions);\n const z = this.mostDistantFromMean(cubicSolutions);\n u = z * z - r;\n v = 2 * z - p;\n if (this.isSmallRatio(u, r)) {\n u = 0;\n } else if (u > 0) {\n u = Math.sqrt(u);\n } else {\n return;\n }\n if (this.isSmallRatio(v, p)) {\n v = 0;\n } else if (v > 0) {\n v = Math.sqrt(v);\n } else {\n return;\n }\n // the two quadratic equations\n coffs[0] = z - u;\n coffs[1] = ((q < 0) ? (-v) : (v));\n coffs[2] = 1;\n this.appendQuadraticRoots(coffs, results);\n coffs[0] = z + u;\n coffs[1] = ((q < 0) ? (v) : (-v));\n coffs[2] = 1;\n this.appendQuadraticRoots(coffs, results);\n }\n this.addConstant(origin, results); // apply origin\n results.sort();\n this.improveRoots(c, 4, results, true);\n return;\n }\n\n private static appendCosSinRadians(c: number, s: number, cosValues: OptionalGrowableFloat64Array, sinValues: OptionalGrowableFloat64Array,\n radiansValues: OptionalGrowableFloat64Array) {\n if (cosValues) cosValues.push(c);\n if (sinValues) sinValues.push(s);\n if (radiansValues) radiansValues.push(Math.atan2(s, c));\n }\n\n /**\n * * Solve the simultaneous equations in variables`c` and`s`:\n * * A line: `alpha + beta*c + gamma*s = 0`\n * * The unit circle `c*c + s*s = 1`\n * * Solution values are returned as 0, 1, or 2(c, s) pairs\n * * Return value indicates one of these solution states:\n * * -2 -- all coefficients identically 0. The entire c, s plane-- and therefore the entire unit circle-- is a solution.\n * * -1 -- beta, gamma are zero, alpha is not.There is no line defined.There are no solutions.\n * * 0 -- the line is well defined, but passes completely outside the unit circle.\n * * In this case, (c1, s1) is the circle point closest to the line and(c2, s2) is the line point closest to the circle.\n * * 1 -- the line is tangent to the unit circle.\n * * Tangency is determined by tolerances, which calls a \"close approach\" point a tangency.\n * * (c1, s1) is the closest circle point\n * * (c2, s2) is the line point.\n * * 2 -- two simple intersections.\n * @param alpha constant coefficient on line\n * @param beta x cosine coefficient on line\n * @param gamma y sine coefficient on line\n * @param relTol relative tolerance for tangencies\n * @param cosValues (caller allocated) array to receive solution `c` values\n * @param sinValues (caller allocated) array to receive solution `s` values\n * @param radiansValues (caller allocated) array to receive solution radians values.\n */\n public static appendImplicitLineUnitCircleIntersections(\n alpha: number,\n beta: number,\n gamma: number,\n cosValues: OptionalGrowableFloat64Array,\n sinValues: OptionalGrowableFloat64Array,\n radiansValues: OptionalGrowableFloat64Array,\n relTol: number = 1.0e-14,\n ): number {\n let twoTol: number;\n const delta2 = beta * beta + gamma * gamma;\n const alpha2 = alpha * alpha;\n let solutionType = 0;\n if (relTol < 0.0) {\n twoTol = 0.0;\n } else {\n twoTol = 2.0 * relTol;\n }\n if (delta2 <= 0.0) {\n solutionType = (alpha === 0) ? -2 : -1;\n } else {\n const lambda = - alpha / delta2;\n const a2 = alpha2 / delta2;\n const D2 = 1.0 - a2;\n if (D2 < -twoTol) {\n const delta = Math.sqrt(delta2);\n const iota = (alpha < 0) ? (1.0 / delta) : (-1.0 / delta);\n this.appendCosSinRadians(lambda * beta, lambda * gamma, cosValues, sinValues, radiansValues);\n this.appendCosSinRadians(beta * iota, gamma * iota, cosValues, sinValues, radiansValues);\n solutionType = 0;\n } else if (D2 < twoTol) {\n const delta = Math.sqrt(delta2);\n const iota = (alpha < 0) ? (1.0 / delta) : (- 1.0 / delta);\n this.appendCosSinRadians(lambda * beta, lambda * gamma, cosValues, sinValues, radiansValues);\n this.appendCosSinRadians(beta * iota, gamma * iota, cosValues, sinValues, radiansValues);\n solutionType = 1;\n } else {\n const mu = Math.sqrt(D2 / delta2);\n /* c0,s0 = closest approach of line to origin */\n const c0 = lambda * beta;\n const s0 = lambda * gamma;\n this.appendCosSinRadians(c0 - mu * gamma, s0 + mu * beta, cosValues, sinValues, radiansValues);\n this.appendCosSinRadians(c0 + mu * gamma, s0 - mu * beta, cosValues, sinValues, radiansValues);\n solutionType = 2;\n }\n }\n return solutionType;\n }\n}\n/**\n * Manipulations of polynomials with where `coff[i]` multiplies x^i\n * @internal\n */\nexport class PowerPolynomial {\n /** Evaluate a standard basis polynomial at `x`, with `degree` possibly less than `coff.length` */\n public static degreeKnownEvaluate(coff: Float64Array, degree: number, x: number): number {\n if (degree < 0) {\n return 0.0;\n }\n let p = coff[degree];\n for (let i = degree - 1; i >= 0; i--)\n p = x * p + coff[i];\n return p;\n }\n /** Evaluate the standard basis polynomial of degree `coff.length` at `x` */\n public static evaluate(coff: Float64Array, x: number): number {\n const degree = coff.length - 1;\n return this.degreeKnownEvaluate(coff, degree, x);\n }\n /**\n * Accumulate `coffQ*scaleQ` into `coffP`.\n * * The length of `coffP` must be at least length of `coffQ`.\n * * Returns degree of result as determined by comparing trailing coefficients to zero.\n */\n public static accumulate(coffP: Float64Array, coffQ: Float64Array, scaleQ: number): number {\n let degreeP = coffP.length - 1;\n const degreeQ = coffQ.length - 1;\n for (let i = 0; i <= degreeQ; i++)\n coffP[i] += scaleQ * coffQ[i];\n while (degreeP >= 0 && coffP[degreeP] === 0.0)\n degreeP--;\n return degreeP;\n }\n /** Zero all coefficients */\n public static zero(coff: Float64Array) {\n for (let i = 0; i < coff.length; i++) {\n coff[i] = 0.0;\n }\n }\n}\n/**\n * manipulation of polynomials with powers of sine and cosine\n * @internal\n */\nexport class TrigPolynomial {\n // tolerance for small angle decision.\n private static readonly _smallAngle: number = 1.0e-11;\n\n // see core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for derivation of these coefficients.\n /** Standard Basis coefficients for the numerator of the y-coordinate y(t) = S(t)/W(t) in the rational semicircle parameterization. */\n public static readonly S = Float64Array.from([0.0, 2.0, -2.0]);\n /** Standard Basis coefficients for the numerator of the x-coordinate x(t) = C(t)/W(t) in the rational semicircle parameterization. */\n public static readonly C = Float64Array.from([1.0, -2.0]);\n /** Standard Basis coefficients for the denominator of x(t) and y(t) in the rational semicircle parameterization. */\n public static readonly W = Float64Array.from([1.0, -2.0, 2.0]);\n /** Standard Basis coefficients for C(t) * W(t). */\n public static readonly CW = Float64Array.from([1.0, -4.0, 6.0, -4.0]);\n /** Standard Basis coefficients for S(t) * W(t). */\n public static readonly SW = Float64Array.from([0.0, 2.0, -6.0, 8.0, -4.0]);\n /** Standard Basis coefficients for S(t) * C(t). */\n public static readonly SC = Float64Array.from([0.0, 2.0, -6.0, 4.0]);\n /** Standard Basis coefficients for S(t) * S(t). */\n public static readonly SS = Float64Array.from([0.0, 0.0, 4.0, -8.0, 4.0]);\n /** Standard Basis coefficients for C(t) * C(t). */\n public static readonly CC = Float64Array.from([1.0, -4.0, 4.0]);\n /** Standard Basis coefficients for W(t) * W(t). */\n public static readonly WW = Float64Array.from([1.0, -4.0, 8.0, -8.0, 4.0]);\n /** Standard Basis coefficients for C(t) * C(t) - S(t) * S(t). */\n public static readonly CCMinusSS = Float64Array.from([1.0, -4.0, 0.0, 8.0, -4.0]); // eslint-disable-line @typescript-eslint/naming-convention\n\n /**\n * Find the roots of a univariate polynomial created from substituting the rational parameterization of the unit\n * circle into a trigonometric polynomial. Roots are returned as radian angles.\n * * Currently implemented for polynomials of degree <= 4.\n * * For example, the ellipse-ellipse intersection problem reduces to finding the roots of a quartic polynomial:\n * `p(t) = coff[0] + coff[1] t + coff[2] t^2 + coff[3] t^3 + coff[4] t^4`.\n * * Particular care is given to report a root at t = +/-infinity, which corresponds to the returned angle -pi/2.\n * @param coff coefficients in the power basis\n * @param nominalDegree degree of the polynomial under the most complex root case.\n * @param referenceCoefficient a number which represents the size of coefficients at various stages of computation.\n * A small fraction of this number will be used as a zero tolerance.\n * @param radians roots are placed here.\n * @return false if equation is all zeros. This usually means any angle is a solution.\n */\n public static solveAngles(\n coff: Float64Array, nominalDegree: number, referenceCoefficient: number, radians: number[],\n ): boolean {\n let maxCoff = Math.abs(referenceCoefficient);\n let a;\n radians.length = 0;\n const relTol = this._smallAngle;\n for (let i = 0; i <= nominalDegree; i++) {\n a = Math.abs(coff[i]);\n if (a > maxCoff)\n maxCoff = a;\n }\n const coffTol = relTol * maxCoff;\n let degree = nominalDegree;\n while (degree > 0 && (Math.abs(coff[degree]) <= coffTol))\n degree--;\n const roots = new GrowableFloat64Array();\n if (degree === -1) {\n // p(t) is identically zero (degenerate); do nothing.\n } else {\n if (degree === 0) {\n // p(t) is a nonzero constant; no roots but not degenerate.\n } else if (degree === 1) {\n roots.push(-coff[0] / coff[1]); // p(t) = coff[0] + coff[1] * t\n } else if (degree === 2) {\n AnalyticRoots.appendQuadraticRoots(coff, roots);\n } else if (degree === 3) {\n AnalyticRoots.appendCubicRoots(coff, roots);\n } else if (degree === 4) {\n AnalyticRoots.appendQuarticRoots(coff, roots);\n } else {\n // TODO: WORK WITH BEZIER SOLVER\n assert(false, \"Unimplemented degree in trig solver\");\n }\n if (roots.length > 0) {\n // each solution t represents an angle with Math.Cos(theta) = C(t)/W(t) and sin(theta) = S(t)/W(t)\n // division by W has no effect on atan2 calculations, so we just compute S(t),C(t)\n for (let i = 0; i < roots.length; i++) {\n const ss = PowerPolynomial.evaluate(this.S, roots.atUncheckedIndex(i));\n const cc = PowerPolynomial.evaluate(this.C, roots.atUncheckedIndex(i));\n radians.push(Math.atan2(ss, cc));\n }\n }\n // If the tail of the coff array is zero, we solved a polynomial of lesser degree above, and\n // we report the skipped \"root at infinity\" as the corresponding angle -pi/2 (without multiplicity).\n // See core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for details.\n if (degree < nominalDegree)\n radians.push(-0.5 * Math.PI);\n }\n return radians.length > 0;\n }\n private static readonly _coefficientRelTol = 1.0e-12;\n /**\n * Compute intersections of the unit circle `x^2 + y^2 = 1` with the general quadric (conic)\n * `axx x^2 + axy xy + ayy y^2 + ax x + ay y + a = 0`.\n * @param axx coefficient of x^2\n * @param axy coefficient of xy\n * @param ayy coefficient of y^2\n * @param ax coefficient of x\n * @param ay coefficient of y\n * @param a constant coefficient\n * @param radians up to 4 solution angles t in the quadric parameterization: x = cos(t), y = sin(t)\n */\n public static solveUnitCircleImplicitQuadricIntersection(\n axx: number, axy: number, ayy: number, ax: number, ay: number, a: number, radians: number[],\n ): boolean {\n const coffs = new Float64Array(5);\n PowerPolynomial.zero(coffs);\n let degree;\n // see core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for derivation of these coefficients\n if (Geometry.hypotenuseXYZ(axx, axy, ayy) > TrigPolynomial._coefficientRelTol * Geometry.hypotenuseXYZ(ax, ay, a)) {\n PowerPolynomial.accumulate(coffs, this.CW, ax);\n PowerPolynomial.accumulate(coffs, this.SW, ay);\n PowerPolynomial.accumulate(coffs, this.WW, a);\n PowerPolynomial.accumulate(coffs, this.SS, ayy);\n PowerPolynomial.accumulate(coffs, this.CC, axx);\n PowerPolynomial.accumulate(coffs, this.SC, axy);\n degree = 4;\n } else {\n PowerPolynomial.accumulate(coffs, this.C, ax);\n PowerPolynomial.accumulate(coffs, this.S, ay);\n PowerPolynomial.accumulate(coffs, this.W, a);\n degree = 2;\n }\n const maxCoff = Math.max(Math.abs(axx), Math.abs(ayy), Math.abs(axy), Math.abs(ax), Math.abs(ay), Math.abs(a));\n const b = this.solveAngles(coffs, degree, maxCoff, radians);\n /*\n for (const theta of angles) {\n const c = theta.cos();\n const s = theta.sin();\n GeometryCoreTestIO.consoleLog({\n angle: theta, co: c, si: s,\n f: axx * c * c + axy * c * s + ayy * s * s + ax * c + ay * s + a,\n });\n } */\n return b;\n }\n /**\n * Compute intersections of unit circle x^2 + y 2 = 1 with the ellipse\n * (x,y) = (cx + ux Math.Cos + vx sin, cy + uy Math.Cos + vy sin)\n * Solutions are returned as angles in the ellipse space.\n * @param cx center x\n * @param cy center y\n * @param ux 0 degree vector x\n * @param uy 0 degree vector y\n * @param vx 90 degree vector x\n * @param vy 90 degree vector y\n * @param ellipseRadians solution angles in ellipse parameter space\n * @param circleRadians solution angles in circle parameter space\n */\n public static solveUnitCircleEllipseIntersection(\n cx: number, cy: number,\n ux: number, uy: number,\n vx: number, vy: number,\n ellipseRadians: number[], circleRadians: number[],\n ): boolean {\n circleRadians.length = 0;\n // see core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for derivation of these coefficients:\n const acc = ux * ux + uy * uy;\n const acs = 2.0 * (ux * vx + uy * vy);\n const ass = vx * vx + vy * vy;\n const ac = 2.0 * (ux * cx + uy * cy);\n const as = 2.0 * (vx * cx + vy * cy);\n const a = cx * cx + cy * cy - 1.0;\n const status = this.solveUnitCircleImplicitQuadricIntersection(acc, acs, ass, ac, as, a, ellipseRadians);\n for (const radians of ellipseRadians) {\n const cc = Math.cos(radians);\n const ss = Math.sin(radians);\n const x = cx + ux * cc + vx * ss;\n const y = cy + uy * cc + vy * ss;\n circleRadians.push(Math.atan2(y, x));\n }\n return status;\n }\n /**\n * Compute intersections of unit circle `x^2 + y^2 = w^2` (in homogeneous coordinates) with the ellipse\n * `F(t) = (cx + ux cos(t) + vx sin(t), cy + uy cos(t) + vy sin(t)) / (cw + uw cos(t) + vw sin(t))`.\n * @param cx center x\n * @param cy center y\n * @param cw center w\n * @param ux 0 degree vector x\n * @param uy 0 degree vector y\n * @param uw 0 degree vector w\n * @param vx 90 degree vector x\n * @param vy 90 degree vector y\n * @param vw 90 degree vector w\n * @param ellipseRadians solution angles in ellipse parameter space\n * @param circleRadians solution angles in circle parameter space\n */\n public static solveUnitCircleHomogeneousEllipseIntersection(\n cx: number, cy: number, cw: number,\n ux: number, uy: number, uw: number,\n vx: number, vy: number, vw: number,\n ellipseRadians: number[], circleRadians: number[],\n ): boolean {\n circleRadians.length = 0;\n // see core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for derivation of these coefficients:\n const acc = ux * ux + uy * uy - uw * uw;\n const acs = 2.0 * (ux * vx + uy * vy - uw * vw);\n const ass = vx * vx + vy * vy - vw * vw;\n const ac = 2.0 * (ux * cx + uy * cy - uw * cw);\n const as = 2.0 * (vx * cx + vy * cy - vw * cw);\n const a = cx * cx + cy * cy - cw * cw;\n const status = this.solveUnitCircleImplicitQuadricIntersection(\n acc, acs, ass, ac, as, a, ellipseRadians,\n );\n for (const radians of ellipseRadians) {\n const cc = Math.cos(radians);\n const ss = Math.sin(radians);\n const x = cx + ux * cc + vx * ss;\n const y = cy + uy * cc + vy * ss;\n circleRadians.push(Math.atan2(y, x));\n }\n return status;\n }\n}\n\n/**\n * * bilinear expression\n * * `f(u,v) = a + b * u * c * v + d * u * v`\n * @internal\n */\nexport class BilinearPolynomial {\n /** constant coefficient */\n public a: number;\n /** u coefficient */\n public b: number;\n /** v coefficient */\n public c: number;\n /** uv coefficient */\n public d: number;\n /**\n *\n * @param a constant coefficient\n * @param b `u` coefficient\n * @param c `v` coefficient\n * @param d `u*v` coefficient\n */\n public constructor(a: number, b: number, c: number, d: number) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n }\n /**\n * Evaluate the bilinear expression at u,v\n */\n public evaluate(u: number, v: number): number {\n return this.a + this.b * u + v * (this.c + this.d * u);\n }\n /** Create a bilinear polynomial z=f(u,v) given z values at 00, 10, 01, 11.\n */\n public static createUnitSquareValues(f00: number, f10: number, f01: number, f11: number): BilinearPolynomial {\n return new BilinearPolynomial(f00, f10, f10, f11 - f10 - f01);\n }\n /**\n * Solve a pair of bilinear equations\n * * First equation: `a0 + b0 * u + c0 * v + d0 * u * v = 0`\n * * Second equation: `a1 + b1 * u + c1 * v + d1 * u * v = 0`\n */\n public static solveBilinearPair(\n a0: number, b0: number, c0: number, d0: number,\n a1: number, b1: number, c1: number, d1: number,\n ): Point2d[] | undefined {\n // constant linear, and quadratic coefficients for c0 + c1 * u + c2 * u*u = 0\n const e0 = Geometry.crossProductXYXY(a0, a1, c0, c1);\n const e1 = Geometry.crossProductXYXY(b0, b1, c0, c1) + Geometry.crossProductXYXY(a0, a1, d0, d1);\n const e2 = Geometry.crossProductXYXY(b0, b1, d0, d1);\n const uRoots = Degree2PowerPolynomial.solveQuadratic(e2, e1, e0);\n if (uRoots === undefined)\n return undefined;\n const uv = [];\n for (const u of uRoots) {\n const v0 = Geometry.conditionalDivideFraction(-(a0 + b0 * u), c0 + d0 * u);\n const v1 = Geometry.conditionalDivideFraction(-(a1 + b1 * u), c1 + d1 * u);\n if (v0 !== undefined)\n uv.push(Point2d.create(u, v0));\n else if (v1 !== undefined)\n uv.push(Point2d.create(u, v1));\n }\n return uv;\n }\n /**\n * Solve the simultaneous equations\n * * `p(u,v) = pValue`\n * * `q(u,v) = qValue`\n * @param p\n * @param pValue\n * @param q\n * @param qValue\n */\n public static solvePair(p: BilinearPolynomial, pValue: number, q: BilinearPolynomial, qValue: number): Point2d[] | undefined {\n return BilinearPolynomial.solveBilinearPair(p.a - pValue, p.b, p.c, p.d, q.a - qValue, q.b, q.c, q.d);\n }\n}\n\n/**\n * * trigonometric expresses `f(theta) = a + cosineCoff * cos(theta) + sineCoff * sin(theta)`\n * @internal\n */\nexport class SineCosinePolynomial {\n /** constant coefficient */\n public a: number;\n /** cosine coefficient */\n public cosineCoff: number;\n /** sine coefficient */\n public sineCoff: number;\n /**\n *\n * @param a constant coefficient\n * @param cosineCoff `cos(theta)` coefficient\n * @param sinCoff `sin(theta)` coefficient\n */\n public constructor(a: number, cosCoff: number, sinCoff: number) {\n this.a = a;\n this.cosineCoff = cosCoff;\n this.sineCoff = sinCoff;\n }\n /** set all coefficients */\n public set(a: number, cosCoff: number, sinCoff: number) {\n this.a = a;\n this.cosineCoff = cosCoff;\n this.sineCoff = sinCoff;\n }\n /** Return the function value at given angle in radians */\n public evaluateRadians(theta: number): number {\n return this.a + this.cosineCoff * Math.cos(theta) + this.sineCoff * Math.sin(theta);\n }\n /** Return the range of function values over the entire angle range. */\n public range(result?: Range1d): Range1d {\n const q = Geometry.hypotenuseXY(this.cosineCoff, this.sineCoff);\n return Range1d.createXX(this.a - q, this.a + q, result);\n }\n /** Return the min and max values of the function over theta range from radians0 to radians1 inclusive. */\n public rangeInStartEndRadians(radians0: number, radians1: number, result?: Range1d): Range1d {\n if (Angle.isFullCircleRadians(radians1 - radians0))\n return this.range(result);\n result = Range1d.createXX(this.evaluateRadians(radians0), this.evaluateRadians(radians1), result);\n // angles of min and max ...\n // angles for min and max of the sine wave . ..\n const alphaA = Math.atan2(this.sineCoff, this.cosineCoff);\n const alphaB = alphaA + Math.PI;\n if (AngleSweep.isRadiansInStartEnd(alphaA, radians0, radians1))\n result.extendX(this.evaluateRadians(alphaA));\n if (AngleSweep.isRadiansInStartEnd(alphaB, radians0, radians1))\n result.extendX(this.evaluateRadians(alphaB));\n return result;\n }\n /** Return the min and max values of the function over theta range from radians0 to radians1 inclusive. */\n public rangeInSweep(sweep: AngleSweep, result?: Range1d): Range1d {\n return this.rangeInStartEndRadians(sweep.startRadians, sweep.endRadians, result);\n }\n /**\n * Return a representative angle (in radians) for min and max values.\n * * The radians value is atan2(sineCoff, cosineCoff)\n * * Hence the candidates for min and max of the function are at this value and this value plus PI\n */\n public referenceMinMaxRadians(): number {\n return Math.atan2(this.sineCoff, this.cosineCoff);\n }\n}\n/**\n * Support for an implicit linear equation (half space)\n * f(x,y) = a0 + x * ax + y * ay\n * @internal\n */\nexport class ImplicitLineXY {\n /**\n * constant coefficient\n */\n public a: number;\n /**\n * x coefficient\n */\n public ax: number;\n /**\n * y coefficient\n */\n public ay: number;\n /** construct the ImplicitLineXY from coefficients */\n public constructor(a: number, ax: number, ay: number) {\n this.a = a;\n this.ax = ax;\n this.ay = ay;\n }\n /** Compute 2 points of a line segment with\n * * the segment is on the zero-line of this ImplicitLineXY\n * * the start and endpoints are distance `b` from the projection of the origin onto the ImplicitLineXY\n * @returns undefined if ax,ay are both zero. Otherwise the two points of the segment.\n */\n public convertToSegmentPoints(b: number): Point3d[] | undefined {\n const q = Math.sqrt(this.ax * this.ax + this.ay * this.ay);\n const alpha = Geometry.conditionalDivideCoordinate(1.0, q, 1.0e10);\n if (alpha === undefined)\n return undefined;\n const ux = alpha * this.ax;\n const uy = alpha * this.ay;\n const px = -alpha * ux;\n const py = -alpha * uy;\n return [Point3d.create(px - b * uy, py + b * ux), Point3d.create(px + b * uy, py - b * ux)];\n }\n /**\n * Evaluate the half-space function at an xy point\n * @param xy xy values for evaluation\n * @returns evaluation.\n */\n public evaluatePoint(xy: XAndY): number {\n return this.a + xy.x * this.ax + xy.y * this.ay;\n }\n /**\n * add scale * (a,ax,ay) to the respective coefficients.\n */\n public addScaledCoefficientsInPlace(a: number, ax: number, ay: number, scale: number) {\n this.a += scale * a;\n this.ax += scale * ax;\n this.ay += scale * ay;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Polynomials.js","sourceRoot":"","sources":["../../../src/numerics/Polynomials.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAgC,MAAM,oCAAoC,CAAC;AACxG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAO,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAIvD,oCAAoC;AAEpC;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACjC,+CAA+C;IACxC,KAAK,CAAW;IAEvB,YAAY,KAAa,CAAC,EAAE,KAAa,CAAC,EAAE,KAAa,CAAC;QACxD,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC1D,MAAM,EAAE,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACzC,0EAA0E;YAC1E,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvB,6CAA6C;gBAC7C,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,CAAC,GAAG,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;QACD,0CAA0C;QAC1C,MAAM,CAAC,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,SAAS;YACjB,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,oCAAoC;IAC7B,WAAW,CAAC,CAAS;QAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,2DAA2D;IACpD,oBAAoB,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,+CAA+C;IACxC,SAAS;QACd,MAAM,EAAE,GAAG,sBAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACnB,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACd,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YACf,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,mCAAmC;IAC5B,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,CAAS;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,2FAA2F;IACpF,yBAAyB;QAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3B,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC5C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,yEAAyE;IAClE,MAAM,CAAC,cAAc,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,CAAC;QACvE,OAAO,IAAI,sBAAsB,CAC/B,EAAE,GAAG,KAAK,GAAG,KAAK,EAClB,CAAE,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,EACtB,EAAE,CAAC,CAAC;IACR,CAAC;CAEF;AACD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACjC,0DAA0D;IACnD,KAAK,CAAW;IAEvB,YAAY,KAAa,CAAC,EAAE,KAAa,CAAC,EAAE,KAAa,CAAC,EAAE,KAAa,CAAC;QACxE,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,oCAAoC;IAC7B,WAAW,CAAC,CAAS;QAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,yCAAyC;IAClC,oBAAoB,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,CAAS;QACjC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,kFAAkF;IAC3E,MAAM,CAAC,cAAc,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,EAAE,KAAa,GAAG;QACxF,OAAO,IAAI,sBAAsB,CAC/B,CAAC,EAAE,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,EAC3B,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,EACpD,CAAE,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,EAC9B,EAAE,CAAC,CAAC;IACR,CAAC;CACF;AACD;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACjC,0DAA0D;IACnD,KAAK,CAAW;IAEvB,YAAY,KAAa,CAAC,EAAE,KAAa,CAAC,EAAE,KAAa,CAAC,EAAE,KAAa,CAAC,EAAE,KAAa,CAAC;QACxF,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,oCAAoC;IAC7B,WAAW,CAAC,CAAS;QAC1B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,CAAS;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7G,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,CAAS;QACjC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAED,gGAAgG;IACzF,MAAM,CAAC,cAAc,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa,EAAE,KAAa,EAAE,KAAa,CAAC;QACrG,OAAO,IAAI,sBAAsB,CAC/B,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,EACpC,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,EACrG,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,EACpG,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,EACrC,EAAE,CAAC,CAAC;IACR,CAAC;CAEF;AACD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,aAAa;IACxB,8BAA8B;IACvB,WAAW,CAAS;IAC3B,kDAAkD;IAC3C,WAAW,CAAS;IAE3B,YAAY,WAAmB,EAAE,WAAmB;QAClD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,yGAAyG;IAClG,OAAO;QACZ,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,yFAAyF;IAClF,qBAAqB;QAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,GAAG,CAAC;QACb,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACI,2BAA2B,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAChE,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QAC1B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACpD,CAAC;IACD,iDAAiD;IAC1C,6BAA6B,CAAC,GAAY;QAC/C,OAAO,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,gEAAgE;IACzD,4BAA4B,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC5E,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/C,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/C,MAAM,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC;QAC/B,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACpD,CAAC;IAED,wFAAwF;IACjF,gBAAgB,CAAC,YAAoB,EAAE,UAAkB;QAC9D,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjC,gBAAgB;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,uFAAuF;IAChF,2BAA2B,CAAC,YAAoB,EAAE,UAAkB,EAAE,QAAkB,EAAE,MAAgB;QAC/G,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACjC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1D,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,gGAAgG;IACzF,wBAAwB,CAAC,YAAoB,EAAE,UAAkB,EAAE,QAAgB;QACxF,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjC,gBAAgB;QAChB,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5C,CAAC;IACD;;;;;;;OAOG;IACI,qBAAqB,CAAC,GAAY;QACvC,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,iBAAiB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACpF,IAAI,SAAS,CAAC;QACd,IAAI,gBAAgB,CAAC;QACrB,IAAI,iBAAiB,EAAE,CAAC;YACtB,SAAS,GAAG,IAAI,CAAC;YACjB,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC,EAAE,iBAAiB,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/F,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,KAAK,CAAC;YAClB,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACzD,MAAM,qBAAqB,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QAC7E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,OAAO,CAAC;QACZ,IAAI,GAAG,CAAC;QACR,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAClC,GAAG,GAAG,GAAG,CAAC;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,IAAI,OAAO,EAAE,CAAC;IACtE,CAAC;CAuBF;AACD;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACzB,wBAAwB;IACjB,MAAM,CAAS;IACtB,YAAY,CAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAE3C,0DAA0D;IACnD,wBAAwB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC7D,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3D,CAAC;IAED,wEAAwE;IACjE,4BAA4B,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS;QAC/E,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;OAKG;IACI,cAAc,CAAC,GAAY;QAChC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,KAAK,CAAC;QACV,IAAI,GAAG,CAAC;QACR,IAAI,KAAK,CAAC;QACV,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC;YAClB,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,mCAAmC;YACjE,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBACvB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjC,KAAK,GAAG,IAAI,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,GAAG,CAAC;gBACZ,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,EAAE,YAAY,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;IACD,4DAA4D;IACrD,MAAM,CAAC,yBAAyB,CAAC,MAAe,EAAE,MAAc,EAAE,aAAqB,EAAE,aAAqB,EAAE,WAAmB,EAAE,WAAmB,EAAE,MAAgB;QAC/K,MAAM,UAAU,GAAG,UAAU,CAAC,qBAAqB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,UAAU,CAAC,qBAAqB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC7B,IAAI,UAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YAC5D,6CAA6C;YAC7C,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC1B,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;YAC1C,iDAAiD;YACjD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;YAC9B,IAAI,GAAG,EAAE,KAAK,CAAC;YACf,4EAA4E;YAC5E,KAAK,MAAM,QAAQ,IAAI;gBACrB,CAAC,GAAG,EAAE,GAAG,CAAC;gBACV,CAAC,EAAE,EAAE,GAAG,CAAC;gBACT,CAAC,OAAO,EAAE,GAAG,CAAC;gBACd,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;gBACf,CAAC,aAAa,EAAE,OAAO,CAAC;gBACxB,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC;aAAC,EAAE,CAAC;gBAC7B,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpB,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC;oBACtE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;YAED,gDAAgD;YAChD,sKAAsK;YACtK,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnD,uCAAuC;YACvC,KAAK,MAAM,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;gBACxC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;gBACpC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC7C,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACpE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;gBACpC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;gBAC7C,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtE,CAAC;YACD,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;YACpC,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC;YAEpC,8CAA8C;YAC9C,KAAK,MAAM,YAAY,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;gBAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;gBAClD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;gBAClD,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC9B,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC3C,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBAEpE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAC9B,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC3C,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtE,CAAC;YACD,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;;OAOG;IACI,MAAM,CAAC,kBAAkB,CAAC,MAAe,EAAE,MAAc,EAAE,GAAU,EAAE,YAAkC,EAAE,GAA0B,EAAE,eAAsD;QAClM,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;QACvE,MAAM,EAAE,GAAG,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,MAAM,EAAE,GAAG,QAAQ,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,UAAU,GAAG,sBAAsB,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrE,IAAI,YAAY,KAAK,SAAS;YAC5B,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,IAAI,GAAG,KAAK,SAAS;YACnB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACjB,IAAI,eAAe,KAAK,SAAS;YAC/B,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAE7B,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,YAAY,KAAK,SAAS;YAC5B,KAAK,MAAM,CAAC,IAAI,UAAU;gBAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,GAAG,KAAK,SAAS,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YACvD,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACrC,IAAI,GAAG,KAAK,SAAS;oBACnB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;oBAClC,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;oBAC1C,eAAe,CAAC,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAClG,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,6FAA6F;IAC7F,4CAA4C;IAC5C,gDAAgD;IAChD,0EAA0E;IAC1E,2CAA2C;IAC3C,2DAA2D;IAC3D,2DAA2D;IAC3D,2DAA2D;IAC3D,+CAA+C;IAC/C,iBAAiB;IACjB,6BAA6B;IAC7B,oBAAoB;IACpB,kBAAkB;IAClB,sBAAsB;IACtB,gBAAgB;IAChB,kCAAkC;IAClC,+BAA+B;IAC/B,yEAAyE;IACzE,MAAM;IACN;;;OAGG;IACI,gBAAgB,CAAC,YAAoB,EAAE,UAAkB,EAAE,MAAgB;QAChF,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;IAChF,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,sBAAsB,CAAC,YAAoB,EAAE,UAAkB,EAAE,GAAQ;QACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC1B,GAAG,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC;QAC1B,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;IACjB,CAAC;IACD;;;OAGG;IACI,2BAA2B,CAAC,YAAoB,EAAE,UAAkB,EAAE,QAAkB,EAAE,MAAgB;QAC/G,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1D,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC;CAsBF;AACD;;;GAGG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,CAAU,QAAQ,GAAG,MAAM,CAAC;IAClC,MAAM,CAAU,iBAAiB,GAAG,OAAO,CAAC;IACpD,oGAAoG;IAC5F,MAAM,CAAC,MAAM,CAAC,CAAS;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;IACrC,CAAC;IACD;;;;;OAKG;IACK,MAAM,CAAC,YAAY,CAAC,CAAS,EAAE,CAAS,EAAE,SAAiB,MAAM,EAAE,SAAiB,OAAO;QACjG,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,yDAAyD;IAClD,MAAM,CAAC,IAAI,CAAC,CAAS;QAC1B,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;YACf,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;YAC1B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG;gBACV,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;gBAC5B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACd,CAAC;IACD;;;;;;;OAOG;IACK,MAAM,CAAC,UAAU,CAAC,MAAoB,EAAE,SAAiB,EAAE,WAAmB,EAAE,eAAuB,GAAG,EAAE,MAAc;QAChI,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC3E,MAAM,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,WAAW,CAAC;YACzC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,wFAAwF;IAChF,MAAM,CAAC,kBAAkB,CAAC,KAA2B,EAAE,CAAS;QACtE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,mDAAmD;YAChE,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnE,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,qDAAqD;YAC/F,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpI,CAAC;aAAM,CAAC,CAAC,0CAA0C;YACjD,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IACO,MAAM,CAAC,sBAAsB,CAAC,KAA8B,EAAE,IAAY,EAAE,MAAc;QAChG,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,GAAG,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;YACjB,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACO,MAAM,CAAC,YAAY,CACzB,KAA8B,EAAE,MAAc,EAAE,KAA2B,EAAE,oBAA6B;QAE1G,MAAM,MAAM,GAAG,OAAO,CAAC;QACvB,yBAAyB;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC/E,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,GAAG;gBAAE,SAAS,CAAE,0CAA0C;YACzF,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,IAAI,kBAAkB,GAAG,CAAC,CAAC;YAC3B,uFAAuF;YACvF,OAAO,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC;gBACxD,gGAAgG;gBAChG,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,IAAI,EAAE,kBAAkB,GAAG,CAAC;wBAC1B,MAAM;gBACV,CAAC;qBAAM,CAAC;oBACN,kBAAkB,GAAG,CAAC,CAAC;gBACzB,CAAC;gBACD,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;gBAC9C,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC1B,8FAA8F;gBAC9F,2BAA2B;gBAC3B,IAAI,oBAAoB,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC/D,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;oBACjC,MAAM;gBACR,CAAC;gBACD,EAAE,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;gBAC3E,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;IACD;;;;OAIG;IACK,MAAM,CAAC,cAAc,CAAC,KAAyB,EAAE,OAA6B;QACpF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD;;;;;OAKG;IACK,MAAM,CAAC,gBAAgB,CAAC,MAAc,EAAE,MAAc,EAAE,OAA6B;QAC3F,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,EAAU,EAAE,EAAU,EAAE,MAA4B;QACjF,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,yBAAyB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IACpF,CAAC;IACD;;;OAGG;IACI,MAAM,CAAC,mBAAmB,CAAC,IAAsC;QACtE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAE,6CAA6C;QAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC;QACjB,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,CAAC,CAAC;gBACT,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,oBAAoB,CAAC,CAA0B,EAAE,MAA4B;QACzF,iCAAiC;QAEjC,MAAM,SAAS,GAAG,QAAQ,CAAC,yBAAyB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QAED,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QACjC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;QAE3B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpB,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,CAAC,EAAE,CAAE,KAAK,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QACD,OAAO;IACT,CAAC;IACD,oCAAoC;IAC5B,MAAM,CAAC,WAAW,CAAC,KAAa,EAAE,IAA0B;QAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;YAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;IAC3F,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,CAAS;QACrC,IAAI,CAAC,IAAI,GAAG;YACV,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;IAClC,CAAC;IACD;;;;OAIG;IACH,2CAA2C;IACnC,MAAM,CAAC,wBAAwB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,MAA4B;QAC9G,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACjB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,CAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAClD,MAAM,YAAY,GAAG,GAAG,GAAG,EAAE,CAAC;QAC9B,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,cAAc;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAClC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;aAAM,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAC5B,eAAe;YACf,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,wFAAwF;YACxF,IAAI,CAAC,GAAG,CAAC;gBACP,CAAC,GAAG,CAAC,CAAC,CAAC;YACT,aAAa;YACb,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;YAC9C,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,gDAAgD;YAChD,4BAA4B;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,EAAE,GAAG,KAAK,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuEE;IACF,wEAAwE;IACjE,MAAM,CAAC,gBAAgB,CAAC,CAA0B,EAAE,OAA6B;QACtF,IAAI,QAAQ,CAAC,2BAA2B,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAClE,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/D,wEAAwE;YACxE,wCAAwC;YACxC,oGAAoG;YACpG,4BAA4B;YAC5B,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,6CAA6C;QAC7C,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC;IACD,wFAAwF;IACjF,MAAM,CAAC,kBAAkB,CAAC,CAA0B,EAAE,OAA6B;QACxF,8DAA8D;QAC9D,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAS,CAAC;QACd,IAAI,CAAS,CAAC;QACd,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,8CAA8C;QAC9C,MAAM,CAAC,GAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,CAAC,GAAW,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QACzB,0EAA0E;QAC1E,MAAM,EAAE,GAAW,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,CAAC,GAAW,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,CAAC,GAAW,KAAK,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,CAAC,GAAW,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7E,MAAM,cAAc,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,wCAAwC;YAC5D,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe;YAClD,OAAO;QACT,CAAC;aAAM,CAAC,CAAC,4BAA4B;YACnC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACd,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;YACpB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;YAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;YACnD,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC5B,CAAC,GAAG,CAAC,CAAC;YACR,CAAC;iBAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO;YACT,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC5B,CAAC,GAAG,CAAC,CAAC;YACR,CAAC;iBAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO;YACT,CAAC;YACD,8BAA8B;YAC9B,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC1C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjB,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACb,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,eAAe;QAClD,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO;IACT,CAAC;IAEO,MAAM,CAAC,mBAAmB,CAAC,CAAS,EAAE,CAAS,EAAE,SAAuC,EAAE,SAAuC,EACvI,aAA2C;QAC3C,IAAI,SAAS;YAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,SAAS;YAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,aAAa;YAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,MAAM,CAAC,yCAAyC,CACrD,KAAa,EACb,IAAY,EACZ,KAAa,EACb,SAAuC,EACvC,SAAuC,EACvC,aAA2C,EAC3C,SAAiB,OAAO;QAExB,IAAI,MAAc,CAAC;QACnB,MAAM,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;QAC7B,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;YACjB,MAAM,GAAG,GAAG,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;QACxB,CAAC;QACD,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;YAClB,YAAY,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,CAAE,KAAK,GAAG,MAAM,CAAC;YAChC,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;YAC3B,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;YACpB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;gBAC1D,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;gBAC7F,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;gBACzF,YAAY,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAChC,MAAM,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,GAAG,GAAG,KAAK,CAAC,CAAC;gBAC3D,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;gBAC7F,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;gBACzF,YAAY,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;gBAClC,gDAAgD;gBAChD,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;gBACzB,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC;gBAC1B,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;gBAC/F,IAAI,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;gBAC/F,YAAY,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;;AAEH;;;GAGG;AACH,MAAM,OAAO,eAAe;IAC1B,kGAAkG;IAC3F,MAAM,CAAC,mBAAmB,CAAC,IAAkB,EAAE,MAAc,EAAE,CAAS;QAC7E,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAClC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACtB,OAAO,CAAC,CAAC;IACX,CAAC;IACD,4EAA4E;IACrE,MAAM,CAAC,QAAQ,CAAC,IAAkB,EAAE,CAAS;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,UAAU,CAAC,KAAmB,EAAE,KAAmB,EAAE,MAAc;QAC/E,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE;YAC/B,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG;YAC3C,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,4BAA4B;IACrB,MAAM,CAAC,IAAI,CAAC,IAAkB;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAChB,CAAC;IACH,CAAC;CACF;AACD;;;GAGG;AACH,MAAM,OAAO,cAAc;IACzB,sCAAsC;IAC9B,MAAM,CAAU,WAAW,GAAW,OAAO,CAAC;IAEtD,wGAAwG;IACxG,sIAAsI;IAC/H,MAAM,CAAU,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,sIAAsI;IAC/H,MAAM,CAAU,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,oHAAoH;IAC7G,MAAM,CAAU,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/D,mDAAmD;IAC5C,MAAM,CAAU,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,mDAAmD;IAC5C,MAAM,CAAU,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,mDAAmD;IAC5C,MAAM,CAAU,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACrE,mDAAmD;IAC5C,MAAM,CAAU,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC1E,mDAAmD;IAC5C,MAAM,CAAU,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAChE,mDAAmD;IAC5C,MAAM,CAAU,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3E,iEAAiE;IAC1D,MAAM,CAAU,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,2DAA2D;IAE9I;;;;;;;;;;;;;OAaG;IACI,MAAM,CAAC,WAAW,CACvB,IAAkB,EAAE,aAAqB,EAAE,oBAA4B,EAAE,OAAiB;QAE1F,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC7C,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,GAAG,OAAO;gBACb,OAAO,GAAG,CAAC,CAAC;QAChB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;QACjC,IAAI,MAAM,GAAG,aAAa,CAAC;QAC3B,OAAO,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC;YACtD,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,IAAI,oBAAoB,EAAE,CAAC;QACzC,IAAI,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YAClB,qDAAqD;QACvD,CAAC;aAAM,CAAC;YACN,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjB,2DAA2D;YAC7D,CAAC;iBAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,+BAA+B;YACjE,CAAC;iBAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,aAAa,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClD,CAAC;iBAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9C,CAAC;iBAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,aAAa,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,MAAM,CAAC,KAAK,EAAE,qCAAqC,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,kGAAkG;gBAClG,kFAAkF;gBAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvE,MAAM,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YACD,4FAA4F;YAC5F,oGAAoG;YACpG,+EAA+E;YAC/E,IAAI,MAAM,GAAG,aAAa;gBACxB,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;IACO,MAAM,CAAU,kBAAkB,GAAG,OAAO,CAAC;IACrD;;;;;;;;;;OAUG;IACI,MAAM,CAAC,0CAA0C,CACtD,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,EAAU,EAAE,EAAU,EAAE,CAAS,EAAE,OAAiB;QAE3F,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;QAClC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC;QACX,uGAAuG;QACvG,IAAI,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;YAClH,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/C,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC/C,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9C,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAChD,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAChD,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YAChD,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;aAAM,CAAC;YACN,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/G,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5D;;;;;;;;YAQI;QACJ,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;;;;;;;;;OAYG;IACI,MAAM,CAAC,kCAAkC,CAC9C,EAAU,EAAE,EAAU,EACtB,EAAU,EAAE,EAAU,EACtB,EAAU,EAAE,EAAU,EACtB,cAAwB,EAAE,aAAuB;QAEjD,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,wGAAwG;QACxG,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,0CAA0C,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;QACzG,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAC,6CAA6C,CACzD,EAAU,EAAE,EAAU,EAAE,EAAU,EAClC,EAAU,EAAE,EAAU,EAAE,EAAU,EAClC,EAAU,EAAE,EAAU,EAAE,EAAU,EAClC,cAAwB,EAAE,aAAuB;QAEjD,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,wGAAwG;QACxG,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,0CAA0C,CAC5D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,cAAc,CACzC,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACjC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;;AAGH;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IAC7B,2BAA2B;IACpB,CAAC,CAAS;IACjB,oBAAoB;IACb,CAAC,CAAS;IACjB,oBAAoB;IACb,CAAC,CAAS;IACjB,qBAAqB;IACd,CAAC,CAAS;IACjB;;;;;;OAMG;IACH,YAAmB,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;QAC3D,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IACD;;OAEG;IACI,QAAQ,CAAC,CAAS,EAAE,CAAS;QAClC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IACD;OACG;IACI,MAAM,CAAC,sBAAsB,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW,EAAE,GAAW;QACrF,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAChE,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,iBAAiB,CAC7B,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAC9C,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU;QAE9C,6EAA6E;QAC7E,MAAM,EAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjG,MAAM,EAAE,GAAG,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACrD,MAAM,MAAM,GAAG,sBAAsB,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,IAAI,MAAM,KAAK,SAAS;YACtB,OAAO,SAAS,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3E,MAAM,EAAE,GAAG,QAAQ,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3E,IAAI,EAAE,KAAK,SAAS;gBAClB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC5B,IAAI,EAAE,KAAK,SAAS;gBACvB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD;;;;;;;;OAQG;IACI,MAAM,CAAC,SAAS,CAAC,CAAqB,EAAE,MAAc,EAAE,CAAqB,EAAE,MAAc;QAClG,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAC/B,2BAA2B;IACpB,CAAC,CAAS;IACjB,yBAAyB;IAClB,UAAU,CAAS;IAC1B,uBAAuB;IAChB,QAAQ,CAAS;IACxB;;;;;OAKG;IACH,YAAmB,CAAS,EAAE,OAAe,EAAE,OAAe;QAC5D,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,2BAA2B;IACpB,GAAG,CAAC,CAAS,EAAE,OAAe,EAAE,OAAe;QACpD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC1B,CAAC;IACD,0DAA0D;IACnD,eAAe,CAAC,KAAa;QAClC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACtF,CAAC;IACD,uEAAuE;IAChE,KAAK,CAAC,MAAgB;QAC3B,MAAM,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChE,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IACD,2GAA2G;IACpG,sBAAsB,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAAgB;QAChF,IAAI,KAAK,CAAC,mBAAmB,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAChD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;QAClG,4BAA4B;QAC5B,+CAA+C;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QAChC,IAAI,UAAU,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;YAC5D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,IAAI,UAAU,CAAC,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;YAC5D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,2GAA2G;IACpG,YAAY,CAAC,KAAiB,EAAE,MAAgB;QACrD,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;IACD;;;;OAIG;IACI,sBAAsB;QAC3B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACpD,CAAC;CACF;AACD;;;;GAIG;AACH,MAAM,OAAO,cAAc;IACzB;;OAEG;IACI,CAAC,CAAS;IACjB;;MAEE;IACK,EAAE,CAAS;IAClB;;OAEG;IACI,EAAE,CAAS;IAClB,qDAAqD;IACrD,YAAmB,CAAS,EAAE,EAAU,EAAE,EAAU;QAClD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IACD;;;;OAIG;IACI,sBAAsB,CAAC,CAAS;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,2BAA2B,CAAC,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QACnE,IAAI,KAAK,KAAK,SAAS;YACrB,OAAO,SAAS,CAAC;QACnB,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;QACvB,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD;;;;OAIG;IACI,aAAa,CAAC,EAAS;QAC5B,OAAO,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAClD,CAAC;IACD;;OAEG;IACI,4BAA4B,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,KAAa;QAClF,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;IACxB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Numerics\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { AngleSweep } from \"../geometry3d/AngleSweep\";\r\nimport { GrowableFloat64Array, OptionalGrowableFloat64Array } from \"../geometry3d/GrowableFloat64Array\";\r\nimport { LongitudeLatitudeNumber } from \"../geometry3d/LongitudeLatitudeAltitude\";\r\nimport { Point2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d, Vector3d, XYZ } from \"../geometry3d/Point3dVector3d\";\r\nimport { Range1d, Range3d } from \"../geometry3d/Range\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { XAndY } from \"../geometry3d/XYZProps\";\r\n\r\n// cspell:words Cardano internaldocs\r\n\r\n/**\r\n * degree 2 (quadratic) polynomial in for y = c0 + c1*x + c2*x^2\r\n * @internal\r\n */\r\nexport class Degree2PowerPolynomial {\r\n /** The three coefficients for the quadratic */\r\n public coffs: number[];\r\n\r\n constructor(c0: number = 0, c1: number = 0, c2: number = 0) {\r\n this.coffs = [c0, c1, c2];\r\n }\r\n\r\n /**\r\n * * Return 2 duplicate roots in double root case.\r\n * * The solutions are always in algebraic order.\r\n * @returns 0, 1, or 2 solutions of the usual quadratic (a*x*x + b * x + c = 0)\r\n */\r\n public static solveQuadratic(a: number, b: number, c: number): number[] | undefined {\r\n const b1 = Geometry.conditionalDivideFraction(b, a);\r\n const c1 = Geometry.conditionalDivideFraction(c, a);\r\n if (b1 !== undefined && c1 !== undefined) {\r\n // now solving xx + b1*x + c1 = 0 -- i.e. implied \"a\" coefficient is 1 . .\r\n const q = b1 * b1 - 4 * c1;\r\n if (q > 0) {\r\n const e = Math.sqrt(q);\r\n // e is positive, so this sorts algebraically\r\n return [0.5 * (-b1 - e), 0.5 * (-b1 + e)];\r\n }\r\n if (q < 0)\r\n return undefined;\r\n const root = -0.5 * b1;\r\n return [root, root];\r\n }\r\n // \"divide by a\" failed. solve bx + c = 0\r\n const x = Geometry.conditionalDivideFraction(-c, b);\r\n if (x !== undefined)\r\n return [x];\r\n return undefined;\r\n }\r\n /** Add `a` to the constant term. */\r\n public addConstant(a: number) {\r\n this.coffs[0] += a;\r\n }\r\n\r\n /** Add `s * (a + b*x)^2` to the quadratic coefficients */\r\n public addSquaredLinearTerm(a: number, b: number, s: number = 1): void {\r\n this.coffs[0] += s * (a * a);\r\n this.coffs[1] += s * (2.0 * a * b);\r\n this.coffs[2] += s * (b * b);\r\n }\r\n /** Return the real roots of this polynomial */\r\n public realRoots(): number[] | undefined {\r\n const ss = Degree2PowerPolynomial.solveQuadratic(this.coffs[2], this.coffs[1], this.coffs[0]);\r\n if (ss && ss.length > 1) {\r\n if (ss[0] > ss[1]) {\r\n const temp = ss[0];\r\n ss[0] = ss[1];\r\n ss[1] = temp;\r\n }\r\n }\r\n return ss;\r\n }\r\n\r\n /** Evaluate the quadratic at x. */\r\n public evaluate(x: number): number {\r\n return this.coffs[0] + x * (this.coffs[1] + x * this.coffs[2]);\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 evaluateDerivative(x: number): number {\r\n return this.coffs[1] + 2 * x * this.coffs[2];\r\n }\r\n\r\n /** Factor the polynomial in to the form `y0 + c * (x-x0)^2)`, i.e. complete the square. */\r\n public tryGetVertexFactorization(): { x0: number, y0: number, c: number } | undefined {\r\n const x = Geometry.conditionalDivideFraction(-this.coffs[1], 2.0 * this.coffs[2]);\r\n if (x !== undefined) {\r\n const y = this.evaluate(x);\r\n return { c: this.coffs[2], x0: x, y0: y };\r\n }\r\n return undefined;\r\n }\r\n /** Construct a quadratic from input form `c2 * (x-root0) * (x-root1)` */\r\n public static fromRootsAndC2(root0: number, root1: number, c2: number = 1): Degree2PowerPolynomial {\r\n return new Degree2PowerPolynomial(\r\n c2 * root0 * root1,\r\n - c2 * (root0 + root1),\r\n c2);\r\n }\r\n\r\n}\r\n/**\r\n * degree 3 (cubic) polynomial in for y = c0 + c1*x + c2*x^2 + c3*x^3\r\n * @internal\r\n */\r\nexport class Degree3PowerPolynomial {\r\n /** polynomial coefficients, index corresponds to power */\r\n public coffs: number[];\r\n\r\n constructor(c0: number = 0, c1: number = 0, c2: number = 0, c3: number = 1) {\r\n this.coffs = [c0, c1, c2, c3];\r\n }\r\n /** Add `a` to the constant term. */\r\n public addConstant(a: number) {\r\n this.coffs[0] += a;\r\n }\r\n\r\n /** Add `s * (a + b*x)^2` to the cubic */\r\n public addSquaredLinearTerm(a: number, b: number, s: number = 1): void {\r\n this.coffs[0] += s * (a * a);\r\n this.coffs[1] += s * (2.0 * a * b);\r\n this.coffs[2] += s * (b * b);\r\n }\r\n\r\n /**\r\n * Evaluate the polynomial at x\r\n * @param u parameter for evaluation\r\n */\r\n public evaluate(x: number): number {\r\n return this.coffs[0] + x * (this.coffs[1] + x * (this.coffs[2] + x * this.coffs[3]));\r\n }\r\n\r\n /**\r\n * Evaluate the polynomial derivative\r\n * @param u parameter for evaluation\r\n */\r\n public evaluateDerivative(x: number): number {\r\n return this.coffs[1] + x * (2.0 * this.coffs[2] + x * 3.0 * this.coffs[3]);\r\n }\r\n /** Construct a cubic from the form `c3 * (x-root0) * (x - root1) * (x- root2)` */\r\n public static fromRootsAndC3(root0: number, root1: number, root2: number, c3: number = 1.0): Degree3PowerPolynomial {\r\n return new Degree3PowerPolynomial(\r\n -c3 * root0 * root1 * root2,\r\n c3 * (root0 * root1 + root1 * root2 + root0 * root2),\r\n - c3 * (root0 + root1 + root2),\r\n c3);\r\n }\r\n}\r\n/**\r\n * degree 4 (quartic) polynomial in for y = c0 + c1*x + c2*x^2 + c4*x^4\r\n * @internal\r\n */\r\nexport class Degree4PowerPolynomial {\r\n /** polynomial coefficients, index corresponds to power */\r\n public coffs: number[];\r\n\r\n constructor(c0: number = 0, c1: number = 0, c2: number = 0, c3: number = 0, c4: number = 0) {\r\n this.coffs = [c0, c1, c2, c3, c4];\r\n }\r\n /** Add `a` to the constant term. */\r\n public addConstant(a: number) {\r\n this.coffs[0] += a;\r\n }\r\n\r\n /**\r\n * Evaluate the polynomial\r\n * @param x x coordinate for evaluation\r\n */\r\n public evaluate(x: number): number {\r\n return this.coffs[0] + x * (this.coffs[1] + x * (this.coffs[2] + x * (this.coffs[3] + x * this.coffs[4])));\r\n }\r\n\r\n /**\r\n * Evaluate the derivative\r\n * @param x x coordinate for evaluation\r\n */\r\n public evaluateDerivative(x: number): number {\r\n return (this.coffs[1] + x * (2.0 * this.coffs[2] + x * (3.0 * this.coffs[3] + x * 4.0 * this.coffs[4])));\r\n }\r\n\r\n /** Construct a quartic from the form `c3 * (x-root0) * (x - root1) * (x- root2) * (x-root3)` */\r\n public static fromRootsAndC4(root0: number, root1: number, root2: number, root3: number, c4: number = 1): Degree4PowerPolynomial {\r\n return new Degree4PowerPolynomial(\r\n c4 * (root0 * root1 * root2 * root3),\r\n -c4 * (root0 * root1 * root2 + root0 * root1 * root3 + root0 * root2 * root3 + root1 * root2 * root3),\r\n c4 * (root0 * root1 + root0 * root2 + root0 * root3 + root1 * root2 + root1 * root3 + root2 * root3),\r\n -c4 * (root0 + root1 + root2 + root3),\r\n c4);\r\n }\r\n\r\n}\r\n/**\r\n * polynomial services for an implicit torus with\r\n * * z axis is \"through the donut hole\"\r\n * * `majorRadius` is the radius of the circle \"around the z axis\"\r\n * * `minorRadius` is the radius of circles around the major circle\r\n * * for simple xyz the implicit form is\r\n * * `(x^2+y^2+z^2+(R^2-r^2))^2 = 4 R^2(x^2+y^2)`\r\n * * In weighted form\r\n * * `(x^2+y^2+z^2+(R^2-r^2)w^2)^2 = 4 R^2 w^2 (x^2+y^2)`\r\n * @internal\r\n */\r\nexport class TorusImplicit {\r\n /** major (xy plane) radius */\r\n public majorRadius: number;\r\n /** hoop (perpendicular to major circle) radius */\r\n public minorRadius: number;\r\n\r\n constructor(majorRadius: number, minorRadius: number) {\r\n this.majorRadius = majorRadius;\r\n this.minorRadius = minorRadius;\r\n }\r\n\r\n /** Return sum of (absolute) major and minor radii, which is (half) the box size in x and y directions */\r\n public boxSize() {\r\n return (Math.abs(this.majorRadius) + Math.abs(this.minorRadius));\r\n }\r\n /** Return scale factor appropriate to control the magnitude of the implicit function. */\r\n public implicitFunctionScale(): number {\r\n const a = this.boxSize();\r\n if (a === 0.0)\r\n return 1.0;\r\n return 1.0 / (a * a * a * a);\r\n }\r\n\r\n /**\r\n * At space point (x,y,z) evaluate the implicit form of the torus (See `ImplicitTorus`)\r\n */\r\n public evaluateImplicitFunctionXYZ(x: number, y: number, z: number): number {\r\n const rho2 = x * x + y * y;\r\n const z2 = z * z;\r\n const R2 = this.majorRadius * this.majorRadius;\r\n const r2 = this.minorRadius * this.minorRadius;\r\n const f = rho2 + z2 + (R2 - r2);\r\n const g = 4.0 * R2 * rho2;\r\n return (f * f - g) * this.implicitFunctionScale();\r\n }\r\n /** Evaluate the implicit function at a point. */\r\n public evaluateImplicitFunctionPoint(xyz: Point3d): number {\r\n return this.evaluateImplicitFunctionXYZ(xyz.x, xyz.y, xyz.z);\r\n }\r\n /** Evaluate the implicit function at homogeneous coordinates */\r\n public evaluateImplicitFunctionXYZW(x: number, y: number, z: number, w: number) {\r\n const rho2 = x * x + y * y;\r\n const z2 = z * z;\r\n const w2 = w * w;\r\n const R2 = this.majorRadius * this.majorRadius;\r\n const r2 = this.minorRadius * this.minorRadius;\r\n const f = rho2 + z2 + w2 * (R2 - r2);\r\n const g = w2 * 4.0 * R2 * rho2;\r\n return (f * f - g) * this.implicitFunctionScale();\r\n }\r\n\r\n /** Evaluate the surface point at angles (in radians) on the major and minor circles. */\r\n public evaluateThetaPhi(thetaRadians: number, phiRadians: number): Point3d {\r\n const c = Math.cos(thetaRadians);\r\n const s = Math.sin(thetaRadians);\r\n // theta=0 point\r\n const x0 = this.majorRadius + this.minorRadius * Math.cos(phiRadians);\r\n const z0 = this.minorRadius * Math.sin(phiRadians);\r\n return Point3d.create(c * x0, s * x0, z0);\r\n }\r\n\r\n /** Evaluate partial derivatives at angles (int radians) on major and minor circles. */\r\n public evaluateDerivativesThetaPhi(thetaRadians: number, phiRadians: number, dxdTheta: Vector3d, dxdPhi: Vector3d) {\r\n const cTheta = Math.cos(thetaRadians);\r\n const sTheta = Math.sin(thetaRadians);\r\n const bx = this.minorRadius * Math.cos(phiRadians);\r\n const bz = this.minorRadius * Math.sin(phiRadians);\r\n const x0 = this.majorRadius + bx;\r\n Vector3d.create(-x0 * sTheta, x0 * cTheta, 0.0, dxdTheta);\r\n Vector3d.create(-cTheta * bz, -sTheta * bz, bx, dxdPhi);\r\n }\r\n\r\n /** Evaluate space point at major and minor angles (in radians) and distance from major hoop. */\r\n public evaluateThetaPhiDistance(thetaRadians: number, phiRadians: number, distance: number): Point3d {\r\n const c = Math.cos(thetaRadians);\r\n const s = Math.sin(thetaRadians);\r\n // theta=0 point\r\n const x0 = this.majorRadius + distance * Math.cos(phiRadians);\r\n const z0 = distance * Math.sin(phiRadians);\r\n return Point3d.create(c * x0, s * x0, z0);\r\n }\r\n /** Given an xyz coordinate in the local system of the toroid, compute the torus parametrization\r\n * * theta = angular coordinate in xy plane\r\n * * phi = angular coordinate in minor circle.\r\n * * distance = distance from major circle\r\n * * rho = distance from origin to xy part of the input.\r\n * @param xyz space point in local coordinates.\r\n * @return object with properties theta, phi, distance, rho\r\n */\r\n public xyzToThetaPhiDistance(xyz: Point3d): { theta: number, phi: number, distance: number, rho: number, safePhi: boolean } {\r\n const rho = xyz.magnitudeXY();\r\n const majorRadiusFactor = Geometry.conditionalDivideFraction(this.majorRadius, rho);\r\n let safeMajor;\r\n let majorCirclePoint;\r\n if (majorRadiusFactor) {\r\n safeMajor = true;\r\n majorCirclePoint = Point3d.create(majorRadiusFactor * xyz.x, majorRadiusFactor * xyz.y, 0.0);\r\n } else {\r\n safeMajor = false;\r\n majorCirclePoint = Point3d.create(xyz.x, xyz.y, 0.0);\r\n }\r\n const theta = safeMajor ? Math.atan2(xyz.y, xyz.x) : 0.0;\r\n const vectorFromMajorCircle = Vector3d.createStartEnd(majorCirclePoint, xyz);\r\n const distance = vectorFromMajorCircle.magnitude();\r\n const dRho = rho - this.majorRadius;\r\n let safePhi;\r\n let phi;\r\n if (xyz.z === 0.0 && dRho === 0.0) {\r\n phi = 0.0;\r\n safePhi = false;\r\n } else {\r\n phi = Math.atan2(xyz.z, dRho);\r\n safePhi = true;\r\n }\r\n return { theta, phi, distance, rho, safePhi: safeMajor && safePhi };\r\n }\r\n /*\r\n public minorCircle(theta: Angle): Arc3d {\r\n const c = Math.cos(theta.radians);\r\n const s = Math.sin(theta.radians);\r\n return Arc3d.create(\r\n Point3d.create(c * this.majorRadius, s * this.majorRadius, 0.0),\r\n Vector3d.create(c * this.minorRadius, s * this.minorRadius, 0.0),\r\n Vector3d.create(0.0, 0.0, this.minorRadius),\r\n AngleSweep.create360()) as Arc3d;\r\n }\r\n\r\n public majorCircle(phi: Angle): Arc3d {\r\n const c = Math.cos(phi.radians);\r\n const s = Math.sin(phi.radians);\r\n const a = this.majorRadius + c * this.minorRadius;\r\n return Arc3d.create(\r\n Point3d.create(0.0, 0.0, this.minorRadius * s),\r\n Vector3d.create(a, 0.0, 0.0),\r\n Vector3d.create(0.0, a, 0.0),\r\n AngleSweep.create360()) as Arc3d;\r\n }\r\n */\r\n}\r\n/**\r\n * evaluation methods for an implicit sphere\r\n * * xyz function `x*x + y*y + z*z - r*r = 0`.\r\n * * xyzw function `x*x + y*y + z*z - r*r*w*w = 0`.\r\n * @internal\r\n */\r\nexport class SphereImplicit {\r\n /** Radius of sphere. */\r\n public radius: number;\r\n constructor(r: number) { this.radius = r; }\r\n\r\n /** Evaluate the implicit function at coordinates x,y,z */\r\n public evaluateImplicitFunction(x: number, y: number, z: number): number {\r\n return x * x + y * y + z * z - this.radius * this.radius;\r\n }\r\n\r\n /** Evaluate the implicit function at homogeneous coordinates x,y,z,w */\r\n public evaluateImplicitFunctionXYZW(wx: number, wy: number, wz: number, w: number): number {\r\n return (wx * wx + wy * wy + wz * wz) - this.radius * this.radius * w * w;\r\n }\r\n\r\n /** Given an xyz coordinate in the local system of the toroid, compute the sphere parametrization\r\n * * theta = angular coordinate in xy plane\r\n * * phi = rotation from xy plane towards z axis.\r\n * @param xyz space point in local coordinates.\r\n * @return object with properties thetaRadians, phi, r\r\n */\r\n public xyzToThetaPhiR(xyz: Point3d): { thetaRadians: number, phiRadians: number, r: number, valid: boolean } {\r\n const rhoSquared = xyz.x * xyz.x + xyz.y * xyz.y;\r\n const rho = Math.sqrt(rhoSquared);\r\n const r = Math.sqrt(rhoSquared + xyz.z * xyz.z);\r\n let theta;\r\n let phi;\r\n let valid;\r\n if (r === 0.0) {\r\n theta = phi = 0.0;\r\n valid = false;\r\n } else {\r\n phi = Math.atan2(xyz.z, rho); // At least one of these is nonzero\r\n if (rhoSquared !== 0.0) {\r\n theta = Math.atan2(xyz.y, xyz.x);\r\n valid = true;\r\n } else {\r\n theta = 0.0;\r\n valid = false;\r\n }\r\n }\r\n return { thetaRadians: (theta), phiRadians: (phi), r, valid };\r\n }\r\n /** Return the range of a uv-aligned patch of the sphere. */\r\n public static patchRangeStartEndRadians(center: Point3d, radius: number, theta0Radians: number, theta1Radians: number, phi0Radians: number, phi1Radians: number, result?: Range3d): Range3d {\r\n const thetaSweep = AngleSweep.createStartEndRadians(theta0Radians, theta1Radians);\r\n const phiSweep = AngleSweep.createStartEndRadians(phi0Radians, phi1Radians);\r\n const range = Range3d.createNull(result);\r\n const xyz = Point3d.create();\r\n if (thetaSweep.isFullCircle && phiSweep.isFullLatitudeSweep) {\r\n // full sphere, no trimming -- build directly\r\n range.extendPoint(center);\r\n range.expandInPlace(Math.abs(radius));\r\n } else {\r\n const sphere = new SphereImplicit(radius);\r\n // construct range for ORIGIN CENTERED sphere ...\r\n const pi = Math.PI;\r\n const piOver2 = 0.5 * Math.PI;\r\n let phi, theta;\r\n // 6 candidate interior extreme points on equator and 0, 90 degree meridians\r\n for (const thetaPhi of [\r\n [0.0, 0.0],\r\n [pi, 0.0],\r\n [piOver2, 0.0],\r\n [-piOver2, 0.0],\r\n [theta0Radians, piOver2],\r\n [theta0Radians, -piOver2]]) {\r\n theta = thetaPhi[0];\r\n phi = thetaPhi[1];\r\n if (thetaSweep.isRadiansInSweep(theta) && phiSweep.isRadiansInSweep(phi))\r\n range.extendPoint(sphere.evaluateThetaPhi(theta, phi, xyz));\r\n }\r\n\r\n // 4 boundary curves, each with 3 components ...\r\n // BUT: phi should not extend beyond poles. Hence z extremes on constant theta curve will never be different from z of constant phi curve or of poles as tested above.\r\n const axisRange = Range1d.createNull();\r\n const cosPhi0 = Math.cos(phi0Radians);\r\n const cosPhi1 = Math.cos(phi1Radians);\r\n const sinPhi0 = Math.sin(phi0Radians);\r\n const sinPhi1 = Math.sin(phi1Radians);\r\n const trigForm = new SineCosinePolynomial(0, 0, 0);\r\n // constant phi curves at phi0 and phi1\r\n for (const cosPhi of [cosPhi0, cosPhi1]) {\r\n trigForm.set(0, cosPhi * radius, 0);\r\n trigForm.rangeInSweep(thetaSweep, axisRange);\r\n range.extendXOnly(axisRange.low); range.extendXOnly(axisRange.high);\r\n trigForm.set(0, 0, cosPhi * radius);\r\n trigForm.rangeInSweep(thetaSweep, axisRange);\r\n range.extendYOnly(axisRange.low); range.extendYOnly(axisRange.high);\r\n }\r\n range.extendZOnly(sinPhi0 * radius);\r\n range.extendZOnly(sinPhi1 * radius);\r\n\r\n // constant theta curves as theta0 and theta1:\r\n for (const thetaRadians of [theta0Radians, theta1Radians]) {\r\n const cosThetaR = Math.cos(thetaRadians) * radius;\r\n const sinThetaR = Math.sin(thetaRadians) * radius;\r\n trigForm.set(0, cosThetaR, 0);\r\n trigForm.rangeInSweep(phiSweep, axisRange);\r\n range.extendXOnly(axisRange.low); range.extendXOnly(axisRange.high);\r\n\r\n trigForm.set(0, sinThetaR, 0);\r\n trigForm.rangeInSweep(phiSweep, axisRange);\r\n range.extendYOnly(axisRange.low); range.extendYOnly(axisRange.high);\r\n }\r\n range.cloneTranslated(center, range);\r\n }\r\n return range;\r\n }\r\n /** Compute intersections with a ray.\r\n * * Return the number of intersections\r\n * * Fill any combinations of arrays of\r\n * * rayFractions = fractions along the ray\r\n * * xyz = xyz intersection coordinates points in space\r\n * * thetaPhiRadians = sphere longitude and latitude in radians.\r\n * * For each optional array, caller must of course initialize an array (usually empty)\r\n */\r\n public static intersectSphereRay(center: Point3d, radius: number, ray: Ray3d, rayFractions: number[] | undefined, xyz: Point3d[] | undefined, thetaPhiRadians: LongitudeLatitudeNumber[] | undefined): number {\r\n const vx = ray.origin.x - center.x;\r\n const vy = ray.origin.y - center.y;\r\n const vz = ray.origin.z - center.z;\r\n const ux = ray.direction.x;\r\n const uy = ray.direction.y;\r\n const uz = ray.direction.z;\r\n const a0 = Geometry.hypotenuseSquaredXYZ(vx, vy, vz) - radius * radius;\r\n const a1 = 2.0 * Geometry.dotProductXYZXYZ(ux, uy, uz, vx, vy, vz);\r\n const a2 = Geometry.hypotenuseSquaredXYZ(ux, uy, uz);\r\n const parameters = Degree2PowerPolynomial.solveQuadratic(a2, a1, a0);\r\n if (rayFractions !== undefined)\r\n rayFractions.length = 0;\r\n if (xyz !== undefined)\r\n xyz.length = 0;\r\n if (thetaPhiRadians !== undefined)\r\n thetaPhiRadians.length = 0;\r\n\r\n if (parameters === undefined) {\r\n return 0;\r\n }\r\n const sphere = new SphereImplicit(radius);\r\n if (rayFractions !== undefined)\r\n for (const f of parameters) rayFractions.push(f);\r\n if (xyz !== undefined || thetaPhiRadians !== undefined) {\r\n for (const f of parameters) {\r\n const point = ray.fractionToPoint(f);\r\n if (xyz !== undefined)\r\n xyz.push(point);\r\n if (thetaPhiRadians !== undefined) {\r\n const data = sphere.xyzToThetaPhiR(point);\r\n thetaPhiRadians.push(LongitudeLatitudeNumber.createRadians(data.thetaRadians, data.phiRadians));\r\n }\r\n }\r\n }\r\n return parameters.length;\r\n }\r\n\r\n // public intersectRay(ray: Ray3d, maxHit: number): {rayFractions: number, points: Point3d} {\r\n // const q = new Degree2PowerPolynomial();\r\n // // Ray is (origin.x + s * direction.x, etc)\r\n // // squared distance from origin is (origin.x + s*direction.x)^2 + etc\r\n // // sphere radius in local system is 1.\r\n // q.addSquaredLinearTerm(ray.origin.x, ray.direction.x);\r\n // q.addSquaredLinearTerm(ray.origin.y, ray.direction.y);\r\n // q.addSquaredLinearTerm(ray.origin.z, ray.direction.z);\r\n // q.addConstant(-this.radius * this.radius);\r\n // let ss = [];\r\n // let n = q.realRoots(ss);\r\n // if (n > maxHit)\r\n // n = maxHit;\r\n // let rayFractions;\r\n // let points;\r\n // for (let i = 0; i < n; i++) {\r\n // rayFractions[i] = ss[i];\r\n // points[i] = Point3d. // What is the equivalent of FromSumOf in TS?\r\n // }\r\n /** Compute the point on a sphere at angular coordinates.\r\n * @param thetaRadians latitude angle\r\n * @param phiRadians longitude angle\r\n */\r\n public evaluateThetaPhi(thetaRadians: number, phiRadians: number, result?: Point3d): Point3d {\r\n const rc = this.radius * Math.cos(thetaRadians);\r\n const rs = this.radius * Math.sin(thetaRadians);\r\n const cosPhi = Math.cos(phiRadians);\r\n const sinPhi = Math.sin(phiRadians);\r\n return Point3d.create(rc * cosPhi, rs * cosPhi, this.radius * sinPhi, result);\r\n }\r\n /**\r\n * * convert radians to xyz on unit sphere\r\n * * Note that there is no radius used -- implicitly radius is 1\r\n * * Evaluation is always to a preallocated xyz.\r\n */\r\n public static radiansToUnitSphereXYZ(thetaRadians: number, phiRadians: number, xyz: XYZ) {\r\n const cosTheta = Math.cos(thetaRadians);\r\n const sinTheta = Math.sin(thetaRadians);\r\n const cosPhi = Math.cos(phiRadians);\r\n const sinPhi = Math.sin(phiRadians);\r\n xyz.x = cosTheta * cosPhi;\r\n xyz.y = sinTheta * cosPhi;\r\n xyz.z = sinPhi;\r\n }\r\n /** Compute the derivatives with respect to spherical angles.\r\n * @param thetaRadians latitude angle\r\n * @param phiRadians longitude angle\r\n */\r\n public evaluateDerivativesThetaPhi(thetaRadians: number, phiRadians: number, dxdTheta: Vector3d, dxdPhi: Vector3d) {\r\n const rc = this.radius * Math.cos(thetaRadians);\r\n const rs = this.radius * Math.sin(thetaRadians);\r\n const cosPhi = Math.cos(phiRadians);\r\n const sinPhi = Math.sin(phiRadians);\r\n Vector3d.create(-rs * cosPhi, rc * cosPhi, 0.0, dxdTheta);\r\n Vector3d.create(-rc * sinPhi, -rs * sinPhi, this.radius * cosPhi, dxdPhi);\r\n }\r\n /*\r\n public meridianCircle(theta: number): Arc3d {\r\n const rc = this.radius * Math.cos(theta);\r\n const rs = this.radius * Math.sin(theta);\r\n return Arc3d.create(\r\n Point3d.create(0.0, 0.0, 0.0),\r\n Vector3d.create(rc, rs, 0),\r\n Vector3d.create(0, 0, this.radius),\r\n AngleSweep.create360()) as Arc3d;\r\n }\r\n\r\n public parallelCircle(phi: number): Arc3d {\r\n const cr = this.radius * Math.cos(phi);\r\n const sr = this.radius * Math.sin(phi);\r\n return Arc3d.create(\r\n Point3d.create(0, 0, sr),\r\n Vector3d.create(cr, 0, 0),\r\n Vector3d.create(0, cr, 0),\r\n AngleSweep.create360()) as Arc3d;\r\n }\r\n */\r\n}\r\n/** AnalyticRoots has static methods for solving quadratic, cubic, and quartic equations.\r\n * @internal\r\n *\r\n */\r\nexport class AnalyticRoots {\r\n private static readonly _EQN_EPS = 1.0e-9;\r\n private static readonly _safeDivideFactor = 1.0e-14;\r\n /** Absolute zero test with a tolerance that has worked well for the analytic root use case . . . */\r\n private static isZero(x: number): boolean {\r\n return Math.abs(x) < this._EQN_EPS;\r\n }\r\n /** Without actually doing a division, test if (x/y) is small.\r\n * @param x numerator\r\n * @param y denominator\r\n * @param absTol absolute tolerance\r\n * @param relTol relative tolerance\r\n */\r\n private static isSmallRatio(x: number, y: number, absTol: number = 1.0e-9, relTol: number = 8.0e-16) {\r\n return Math.abs(x) <= absTol || Math.abs(x) < relTol * Math.abs(y);\r\n }\r\n /** Return the (real, signed) principal cube root of x */\r\n public static cbrt(x: number): number {\r\n return ((x) > 0.0\r\n ? Math.pow((x), 1.0 / 3.0)\r\n : ((x) < 0.0\r\n ? -Math.pow(-(x), 1.0 / 3.0)\r\n : 0.0));\r\n }\r\n /**\r\n * Try to divide `numerator/denominator` and place the result (or defaultValue) in `values[offset]`\r\n * @param values array of values. `values[offset]` will be replaced.\r\n * @param numerator numerator for division.\r\n * @param denominator denominator for division.\r\n * @param defaultValue value to save if denominator is too small to divide.\r\n * @param offset index of value to replace.\r\n */\r\n private static safeDivide(values: Float64Array, numerator: number, denominator: number, defaultValue: number = 0.0, offset: number): boolean {\r\n if (Math.abs(denominator) > (this._safeDivideFactor * Math.abs(numerator))) {\r\n values[offset] = numerator / denominator;\r\n return true;\r\n }\r\n values[offset] = defaultValue;\r\n return false;\r\n }\r\n // Used in NewtonMethod for testing if a root has been adjusted past its bounding region\r\n private static checkRootProximity(roots: GrowableFloat64Array, i: number): boolean {\r\n if (i === 0) { // Case 1: Beginning Root (check root following it)\r\n return roots.atUncheckedIndex(i) < roots.atUncheckedIndex(i + 1);\r\n } else if (i > 0 && i + 1 < roots.length) { // Case 2: Middle Root (check roots before and after)\r\n return (roots.atUncheckedIndex(i) > roots.atUncheckedIndex(i - 1)) && (roots.atUncheckedIndex(i) < roots.atUncheckedIndex(i + 1));\r\n } else { // Case 3: End root (check preceding root)\r\n return (roots.atUncheckedIndex(i) > roots.atUncheckedIndex(i - 1));\r\n }\r\n }\r\n private static newtonMethodAdjustment(coffs: Float64Array | number[], root: number, degree: number): number | undefined {\r\n let p = coffs[degree];\r\n let q = 0.0;\r\n for (let i = degree - 1; i >= 0; i--) {\r\n q = p + root * q;\r\n p = coffs[i] + root * p;\r\n }\r\n if (Math.abs(q) >= 1.0e-14 * (1.0 + Math.abs(root))) {\r\n return p / q;\r\n }\r\n return undefined;\r\n }\r\n private static improveRoots(\r\n coffs: Float64Array | number[], degree: number, roots: GrowableFloat64Array, restrictOrderChanges: boolean,\r\n ) {\r\n const relTol = 1.0e-10;\r\n // Loop through each root\r\n for (let i = 0; i < roots.length; i++) {\r\n let dx = this.newtonMethodAdjustment(coffs, roots.atUncheckedIndex(i), degree);\r\n if (dx === undefined || dx === 0.0) continue; // skip if newton step had divide by zero.\r\n const originalValue = roots.atUncheckedIndex(i);\r\n let counter = 0;\r\n let convergenceCounter = 0;\r\n // Loop through applying changes to found root until dx is diminished or counter is hit\r\n while (dx !== undefined && dx !== 0.0 && (counter < 12)) {\r\n // consider it converged if two successive iterations satisfy the (not too demanding) tolerance.\r\n if (Math.abs(dx) < relTol * (1.0 + Math.abs(roots.atUncheckedIndex(i)))) {\r\n if (++convergenceCounter > 1)\r\n break;\r\n } else {\r\n convergenceCounter = 0;\r\n }\r\n const rootDX = roots.atUncheckedIndex(i) - dx;\r\n roots.reassign(i, rootDX);\r\n // If root is thrown past one of its neighboring roots, unstable condition is assumed.. revert\r\n // to originally found root\r\n if (restrictOrderChanges && !this.checkRootProximity(roots, i)) {\r\n roots.reassign(i, originalValue);\r\n break;\r\n }\r\n dx = this.newtonMethodAdjustment(coffs, roots.atUncheckedIndex(i), degree);\r\n counter++;\r\n }\r\n }\r\n }\r\n /**\r\n * Append (if defined) value to results.\r\n * @param value optional value to append\r\n * @param results growing array\r\n */\r\n private static appendSolution(value: number | undefined, results: GrowableFloat64Array) {\r\n if (value !== undefined) {\r\n results.push(value);\r\n }\r\n }\r\n /**\r\n * Append 2 solutions -- note that both are required args, no option of omitting as in single solution case\r\n * @param value1\r\n * @param value2\r\n * @param results\r\n */\r\n private static append2Solutions(valueA: number, valueB: number, results: GrowableFloat64Array) {\r\n results.push(valueA);\r\n results.push(valueB);\r\n }\r\n\r\n /**\r\n * If `co/c1` is a safe division, append it to the values array.\r\n * @param c0 numerator\r\n * @param c1 denominator\r\n * @param values array to expand\r\n */\r\n public static appendLinearRoot(c0: number, c1: number, values: GrowableFloat64Array) {\r\n AnalyticRoots.appendSolution(Geometry.conditionalDivideFraction(-c0, c1), values);\r\n }\r\n /**\r\n * * Compute the mean of all the entries in `data`\r\n * * Return the data value that is farthest away\r\n */\r\n public static mostDistantFromMean(data: GrowableFloat64Array | undefined): number {\r\n if (!data || data.length === 0) return 0;\r\n let a = 0.0; // to become the sum and finally the average.\r\n for (let i = 0; i < data.length; i++) a += data.atUncheckedIndex(i);\r\n a /= data.length;\r\n let dMax = 0.0;\r\n let result = data.atUncheckedIndex(0);\r\n for (let i = 0; i < data.length; i++) {\r\n const d = Math.abs(data.atUncheckedIndex(i) - a);\r\n if (d > dMax) {\r\n dMax = d;\r\n result = data.atUncheckedIndex(i);\r\n }\r\n }\r\n return result;\r\n }\r\n /**\r\n * Append 0, 1, or 2 solutions of a quadratic to the values array.\r\n * @param c array of coefficients for quadratic `c[0] + c[1] * x + c[2] * x*x`\r\n * @param values array to be expanded.\r\n */\r\n public static appendQuadraticRoots(c: Float64Array | number[], values: GrowableFloat64Array) {\r\n // Normal form: x^2 + 2px + q = 0\r\n\r\n const divFactor = Geometry.conditionalDivideFraction(1.0, c[2]);\r\n if (!divFactor) {\r\n this.appendLinearRoot(c[0], c[1], values);\r\n return;\r\n }\r\n\r\n const p = 0.5 * c[1] * divFactor;\r\n const q = c[0] * divFactor;\r\n\r\n const D = p * p - q;\r\n\r\n if (this.isZero(D)) {\r\n this.appendSolution(-p, values);\r\n return;\r\n } else if (D < 0) {\r\n return;\r\n } else if (D > 0) {\r\n const sqrtD = Math.sqrt(D);\r\n this.append2Solutions(sqrtD - p, - sqrtD - p, values);\r\n return;\r\n }\r\n return;\r\n }\r\n /** Add `a` to the constant term. */\r\n private static addConstant(value: number, data: GrowableFloat64Array) {\r\n for (let i = 0; i < data.length; i++) data.reassign(i, data.atUncheckedIndex(i) + value);\r\n }\r\n\r\n private static signedCubeRoot(y: number): number {\r\n if (y >= 0.0)\r\n return Math.pow(y, 1.0 / 3.0);\r\n return -Math.pow(-y, 1.0 / 3.0);\r\n }\r\n /**\r\n * RWD Nickalls Cubic solution\r\n * The Mathematical Gazette (1993) (vol 77) pp 354-359\r\n * * ASSUME a is nonzero.\r\n */\r\n // Solve full cubic ASSUMING a3 is nonzero.\r\n private static appendFullCubicSolutions(a: number, b: number, c: number, d: number, result: GrowableFloat64Array) {\r\n const q = b * b - 3.0 * a * c;\r\n const aa = a * a;\r\n const delta2 = q / (9.0 * aa);\r\n const xN = - b / (3.0 * a);\r\n const yN = d + xN * (c + xN * (b + xN * a));\r\n const yN2 = yN * yN;\r\n const h2 = 4.0 * a * a * delta2 * delta2 * delta2;\r\n const discriminant = yN2 - h2;\r\n if (discriminant > 0) {\r\n // 1 real root\r\n const r = Math.sqrt(discriminant);\r\n const f = 0.5 / a;\r\n result.push(xN + this.signedCubeRoot(f * (-yN + r)) + this.signedCubeRoot(f * (-yN - r)));\r\n } else if (discriminant < 0) {\r\n // 3 real roots\r\n let h = Math.sqrt(h2);\r\n // I don't see comment in Nickalls about sign of h -- but this sign change is needed ...\r\n if (a < 0)\r\n h = -h;\r\n // sign of h?\r\n const thetaRadians = Math.acos(-yN / h) / 3.0;\r\n const g = 2.0 * Math.sqrt(delta2);\r\n const shift = 2.0 * Math.PI / 3.0;\r\n result.push(xN + g * Math.cos(thetaRadians));\r\n result.push(xN + g * Math.cos(thetaRadians + shift));\r\n result.push(xN + g * Math.cos(thetaRadians - shift));\r\n } else {\r\n // NOTE: The double-root case is not toleranced.\r\n // double root + single root\r\n const delta = this.signedCubeRoot(0.5 * yN / a);\r\n const minMaxRoot = xN + delta;\r\n result.push(xN - 2 * delta);\r\n result.push(minMaxRoot);\r\n result.push(minMaxRoot);\r\n }\r\n }\r\n\r\n /* return roots of a cubic c0 + c1 *x + c2 * x^2 + c2 * x3.\r\n * In the usual case where c0 is non-zero, there are either 1 or 3 roots.\r\n * But if c0 is zero the (0, 1, or 2) roots of the lower order equation\r\n */\r\n /*\r\n private static _appendCubicRootsUnsorted(c: Float64Array | number[], results: GrowableFloat64Array) {\r\n let AA: number;\r\n let p: number;\r\n let q: number;\r\n\r\n // normal form: x^3 + Ax^2 + Bx + C = 0\r\n\r\n const scaleFactor = Geometry.conditionalDivideFraction(1.0, c[3]);\r\n if (!scaleFactor) {\r\n this.appendQuadraticRoots(c, results);\r\n return;\r\n }\r\n // It is a real cubic. There MUST be at least one real solution . . .\r\n const A: number = c[2] * scaleFactor;\r\n const B: number = c[1] * scaleFactor;\r\n const C: number = c[0] * scaleFactor;\r\n\r\n // substitute x = y - A/3 to eliminate quadric term:\r\n // f = y^3 +3py + 2q = 0\r\n // f' = 3y^2 + p\r\n // local min/max at Y = +-sqrt (-p)\r\n // f(+Y) = -p sqrt(-p) + 3p sqrt (-p) + 2q = 2 p sqrt (-p) + 2q\r\n AA = A * A;\r\n p = (3.0 * B - AA) / 9.0;\r\n q = 1.0 / 2 * (2.0 / 27 * A * AA - 1.0 / 3 * A * B + C);\r\n\r\n // Use Cardano formula\r\n const cb_p: number = p * p * p;\r\n const D: number = q * q + cb_p;\r\n const origin = A / (-3.0);\r\n if (D >= 0.0 && this.isZero(D)) {\r\n if (this.isZero(q)) {\r\n // One triple solution\r\n results.push(origin);\r\n results.push(origin);\r\n results.push(origin);\r\n return;\r\n } else {\r\n // One single and one double solution\r\n const u = this.cbrt(-q);\r\n if (u < 0) {\r\n results.push(origin + 2 * u);\r\n results.push(origin - u);\r\n results.push(origin - u);\r\n return;\r\n } else {\r\n results.push(origin - u);\r\n results.push(origin - u);\r\n results.push(origin + 2 * u);\r\n return;\r\n }\r\n }\r\n } else if (D <= 0) { // three real solutions\r\n const phi = 1.0 / 3 * Math.acos(-q / Math.sqrt(-cb_p));\r\n const t = 2 * Math.sqrt(-p);\r\n results.push(origin + t * Math.cos(phi));\r\n results.push(origin - t * Math.cos(phi + Math.PI / 3));\r\n results.push(origin - t * Math.cos(phi - Math.PI / 3));\r\n this.improveRoots(c, 3, results, false);\r\n\r\n return;\r\n } else { // One real solution\r\n const sqrtD = Math.sqrt(D);\r\n const u = this.cbrt(sqrtD - q);\r\n const v = -(this.cbrt(sqrtD + q));\r\n results.push(origin + u + v);\r\n this.improveRoots(c, 3, results, false);\r\n return;\r\n }\r\n }\r\n */\r\n /** Compute roots of cubic 'c[0] + c[1] * x + c[2] * x^2 + c[3] * x^3 */\r\n public static appendCubicRoots(c: Float64Array | number[], results: GrowableFloat64Array) {\r\n if (Geometry.conditionalDivideCoordinate(1.0, c[3]) !== undefined) {\r\n this.appendFullCubicSolutions(c[3], c[2], c[1], c[0], results);\r\n // EDL April 5, 2020 replace classic GraphicsGems solver by RWDNickalls.\r\n // Don't know if improveRoots is needed.\r\n // Breaks in AnalyticRoots.test.ts checkQuartic suggest it indeed converts many e-16 errors to zero.\r\n // e-13 cases are unaffected\r\n this.improveRoots(c, 3, results, false);\r\n } else {\r\n this.appendQuadraticRoots(c, results);\r\n }\r\n // this.appendCubicRootsUnsorted(c, results);\r\n results.sort();\r\n }\r\n /** Compute roots of quartic `c[0] + c[1] * x + c[2] * x^2 + c[3] * x^3 + c[4] * x^4` */\r\n public static appendQuarticRoots(c: Float64Array | number[], results: GrowableFloat64Array) {\r\n // for details, see core\\geometry\\internaldocs\\quarticRoots.md\r\n const coffs = new Float64Array(4);\r\n let u: number;\r\n let v: number;\r\n const coffScale = new Float64Array(1);\r\n if (!this.safeDivide(coffScale, 1.0, c[4], 0.0, 0)) {\r\n this.appendCubicRoots(c, results);\r\n return;\r\n }\r\n // normal form: x^4 + Ax^3 + Bx^2 + Cx + D = 0\r\n const A: number = c[3] * coffScale[0];\r\n const B: number = c[2] * coffScale[0];\r\n const C: number = c[1] * coffScale[0];\r\n const D: number = c[0] * coffScale[0];\r\n const origin = -0.25 * A;\r\n // substitute x = y - A/4 to eliminate cubic term: y^4 + py^2 + qy + r = 0\r\n const AA: number = A * A;\r\n const p: number = -0.375 * AA + B;\r\n const q: number = 0.125 * AA * A - 0.5 * A * B + C;\r\n const r: number = -0.01171875 * AA * AA + 0.0625 * AA * B - 0.25 * A * C + D;\r\n const cubicSolutions = new GrowableFloat64Array();\r\n if (this.isZero(r)) { // no absolute term: y(y^3 + py + q) = 0\r\n coffs[0] = q;\r\n coffs[1] = p;\r\n coffs[2] = 0;\r\n coffs[3] = 1;\r\n this.appendCubicRoots(coffs, results);\r\n results.push(0);\r\n this.addConstant(origin, results); // apply origin\r\n return;\r\n } else { // solve the resolvent cubic\r\n coffs[0] = 0.5 * r * p - 0.125 * q * q;\r\n coffs[1] = -r;\r\n coffs[2] = -0.5 * p;\r\n coffs[3] = 1;\r\n this.appendCubicRoots(coffs, cubicSolutions);\r\n const z = this.mostDistantFromMean(cubicSolutions);\r\n u = z * z - r;\r\n v = 2 * z - p;\r\n if (this.isSmallRatio(u, r)) {\r\n u = 0;\r\n } else if (u > 0) {\r\n u = Math.sqrt(u);\r\n } else {\r\n return;\r\n }\r\n if (this.isSmallRatio(v, p)) {\r\n v = 0;\r\n } else if (v > 0) {\r\n v = Math.sqrt(v);\r\n } else {\r\n return;\r\n }\r\n // the two quadratic equations\r\n coffs[0] = z - u;\r\n coffs[1] = ((q < 0) ? (-v) : (v));\r\n coffs[2] = 1;\r\n this.appendQuadraticRoots(coffs, results);\r\n coffs[0] = z + u;\r\n coffs[1] = ((q < 0) ? (v) : (-v));\r\n coffs[2] = 1;\r\n this.appendQuadraticRoots(coffs, results);\r\n }\r\n this.addConstant(origin, results); // apply origin\r\n results.sort();\r\n this.improveRoots(c, 4, results, true);\r\n return;\r\n }\r\n\r\n private static appendCosSinRadians(c: number, s: number, cosValues: OptionalGrowableFloat64Array, sinValues: OptionalGrowableFloat64Array,\r\n radiansValues: OptionalGrowableFloat64Array) {\r\n if (cosValues) cosValues.push(c);\r\n if (sinValues) sinValues.push(s);\r\n if (radiansValues) radiansValues.push(Math.atan2(s, c));\r\n }\r\n\r\n /**\r\n * * Solve the simultaneous equations in variables`c` and`s`:\r\n * * A line: `alpha + beta*c + gamma*s = 0`\r\n * * The unit circle `c*c + s*s = 1`\r\n * * Solution values are returned as 0, 1, or 2(c, s) pairs\r\n * * Return value indicates one of these solution states:\r\n * * -2 -- all coefficients identically 0. The entire c, s plane-- and therefore the entire unit circle-- is a solution.\r\n * * -1 -- beta, gamma are zero, alpha is not.There is no line defined.There are no solutions.\r\n * * 0 -- the line is well defined, but passes completely outside the unit circle.\r\n * * In this case, (c1, s1) is the circle point closest to the line and(c2, s2) is the line point closest to the circle.\r\n * * 1 -- the line is tangent to the unit circle.\r\n * * Tangency is determined by tolerances, which calls a \"close approach\" point a tangency.\r\n * * (c1, s1) is the closest circle point\r\n * * (c2, s2) is the line point.\r\n * * 2 -- two simple intersections.\r\n * @param alpha constant coefficient on line\r\n * @param beta x cosine coefficient on line\r\n * @param gamma y sine coefficient on line\r\n * @param relTol relative tolerance for tangencies\r\n * @param cosValues (caller allocated) array to receive solution `c` values\r\n * @param sinValues (caller allocated) array to receive solution `s` values\r\n * @param radiansValues (caller allocated) array to receive solution radians values.\r\n */\r\n public static appendImplicitLineUnitCircleIntersections(\r\n alpha: number,\r\n beta: number,\r\n gamma: number,\r\n cosValues: OptionalGrowableFloat64Array,\r\n sinValues: OptionalGrowableFloat64Array,\r\n radiansValues: OptionalGrowableFloat64Array,\r\n relTol: number = 1.0e-14,\r\n ): number {\r\n let twoTol: number;\r\n const delta2 = beta * beta + gamma * gamma;\r\n const alpha2 = alpha * alpha;\r\n let solutionType = 0;\r\n if (relTol < 0.0) {\r\n twoTol = 0.0;\r\n } else {\r\n twoTol = 2.0 * relTol;\r\n }\r\n if (delta2 <= 0.0) {\r\n solutionType = (alpha === 0) ? -2 : -1;\r\n } else {\r\n const lambda = - alpha / delta2;\r\n const a2 = alpha2 / delta2;\r\n const D2 = 1.0 - a2;\r\n if (D2 < -twoTol) {\r\n const delta = Math.sqrt(delta2);\r\n const iota = (alpha < 0) ? (1.0 / delta) : (-1.0 / delta);\r\n this.appendCosSinRadians(lambda * beta, lambda * gamma, cosValues, sinValues, radiansValues);\r\n this.appendCosSinRadians(beta * iota, gamma * iota, cosValues, sinValues, radiansValues);\r\n solutionType = 0;\r\n } else if (D2 < twoTol) {\r\n const delta = Math.sqrt(delta2);\r\n const iota = (alpha < 0) ? (1.0 / delta) : (- 1.0 / delta);\r\n this.appendCosSinRadians(lambda * beta, lambda * gamma, cosValues, sinValues, radiansValues);\r\n this.appendCosSinRadians(beta * iota, gamma * iota, cosValues, sinValues, radiansValues);\r\n solutionType = 1;\r\n } else {\r\n const mu = Math.sqrt(D2 / delta2);\r\n /* c0,s0 = closest approach of line to origin */\r\n const c0 = lambda * beta;\r\n const s0 = lambda * gamma;\r\n this.appendCosSinRadians(c0 - mu * gamma, s0 + mu * beta, cosValues, sinValues, radiansValues);\r\n this.appendCosSinRadians(c0 + mu * gamma, s0 - mu * beta, cosValues, sinValues, radiansValues);\r\n solutionType = 2;\r\n }\r\n }\r\n return solutionType;\r\n }\r\n}\r\n/**\r\n * Manipulations of polynomials with where `coff[i]` multiplies x^i\r\n * @internal\r\n */\r\nexport class PowerPolynomial {\r\n /** Evaluate a standard basis polynomial at `x`, with `degree` possibly less than `coff.length` */\r\n public static degreeKnownEvaluate(coff: Float64Array, degree: number, x: number): number {\r\n if (degree < 0) {\r\n return 0.0;\r\n }\r\n let p = coff[degree];\r\n for (let i = degree - 1; i >= 0; i--)\r\n p = x * p + coff[i];\r\n return p;\r\n }\r\n /** Evaluate the standard basis polynomial of degree `coff.length` at `x` */\r\n public static evaluate(coff: Float64Array, x: number): number {\r\n const degree = coff.length - 1;\r\n return this.degreeKnownEvaluate(coff, degree, x);\r\n }\r\n /**\r\n * Accumulate `coffQ*scaleQ` into `coffP`.\r\n * * The length of `coffP` must be at least length of `coffQ`.\r\n * * Returns degree of result as determined by comparing trailing coefficients to zero.\r\n */\r\n public static accumulate(coffP: Float64Array, coffQ: Float64Array, scaleQ: number): number {\r\n let degreeP = coffP.length - 1;\r\n const degreeQ = coffQ.length - 1;\r\n for (let i = 0; i <= degreeQ; i++)\r\n coffP[i] += scaleQ * coffQ[i];\r\n while (degreeP >= 0 && coffP[degreeP] === 0.0)\r\n degreeP--;\r\n return degreeP;\r\n }\r\n /** Zero all coefficients */\r\n public static zero(coff: Float64Array) {\r\n for (let i = 0; i < coff.length; i++) {\r\n coff[i] = 0.0;\r\n }\r\n }\r\n}\r\n/**\r\n * manipulation of polynomials with powers of sine and cosine\r\n * @internal\r\n */\r\nexport class TrigPolynomial {\r\n // tolerance for small angle decision.\r\n private static readonly _smallAngle: number = 1.0e-11;\r\n\r\n // see core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for derivation of these coefficients.\r\n /** Standard Basis coefficients for the numerator of the y-coordinate y(t) = S(t)/W(t) in the rational semicircle parameterization. */\r\n public static readonly S = Float64Array.from([0.0, 2.0, -2.0]);\r\n /** Standard Basis coefficients for the numerator of the x-coordinate x(t) = C(t)/W(t) in the rational semicircle parameterization. */\r\n public static readonly C = Float64Array.from([1.0, -2.0]);\r\n /** Standard Basis coefficients for the denominator of x(t) and y(t) in the rational semicircle parameterization. */\r\n public static readonly W = Float64Array.from([1.0, -2.0, 2.0]);\r\n /** Standard Basis coefficients for C(t) * W(t). */\r\n public static readonly CW = Float64Array.from([1.0, -4.0, 6.0, -4.0]);\r\n /** Standard Basis coefficients for S(t) * W(t). */\r\n public static readonly SW = Float64Array.from([0.0, 2.0, -6.0, 8.0, -4.0]);\r\n /** Standard Basis coefficients for S(t) * C(t). */\r\n public static readonly SC = Float64Array.from([0.0, 2.0, -6.0, 4.0]);\r\n /** Standard Basis coefficients for S(t) * S(t). */\r\n public static readonly SS = Float64Array.from([0.0, 0.0, 4.0, -8.0, 4.0]);\r\n /** Standard Basis coefficients for C(t) * C(t). */\r\n public static readonly CC = Float64Array.from([1.0, -4.0, 4.0]);\r\n /** Standard Basis coefficients for W(t) * W(t). */\r\n public static readonly WW = Float64Array.from([1.0, -4.0, 8.0, -8.0, 4.0]);\r\n /** Standard Basis coefficients for C(t) * C(t) - S(t) * S(t). */\r\n public static readonly CCMinusSS = Float64Array.from([1.0, -4.0, 0.0, 8.0, -4.0]); // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n /**\r\n * Find the roots of a univariate polynomial created from substituting the rational parameterization of the unit\r\n * circle into a trigonometric polynomial. Roots are returned as radian angles.\r\n * * Currently implemented for polynomials of degree <= 4.\r\n * * For example, the ellipse-ellipse intersection problem reduces to finding the roots of a quartic polynomial:\r\n * `p(t) = coff[0] + coff[1] t + coff[2] t^2 + coff[3] t^3 + coff[4] t^4`.\r\n * * Particular care is given to report a root at t = +/-infinity, which corresponds to the returned angle -pi/2.\r\n * @param coff coefficients in the power basis\r\n * @param nominalDegree degree of the polynomial under the most complex root case.\r\n * @param referenceCoefficient a number which represents the size of coefficients at various stages of computation.\r\n * A small fraction of this number will be used as a zero tolerance.\r\n * @param radians roots are placed here.\r\n * @return false if equation is all zeros. This usually means any angle is a solution.\r\n */\r\n public static solveAngles(\r\n coff: Float64Array, nominalDegree: number, referenceCoefficient: number, radians: number[],\r\n ): boolean {\r\n let maxCoff = Math.abs(referenceCoefficient);\r\n let a;\r\n radians.length = 0;\r\n const relTol = this._smallAngle;\r\n for (let i = 0; i <= nominalDegree; i++) {\r\n a = Math.abs(coff[i]);\r\n if (a > maxCoff)\r\n maxCoff = a;\r\n }\r\n const coffTol = relTol * maxCoff;\r\n let degree = nominalDegree;\r\n while (degree > 0 && (Math.abs(coff[degree]) <= coffTol))\r\n degree--;\r\n const roots = new GrowableFloat64Array();\r\n if (degree === -1) {\r\n // p(t) is identically zero (degenerate); do nothing.\r\n } else {\r\n if (degree === 0) {\r\n // p(t) is a nonzero constant; no roots but not degenerate.\r\n } else if (degree === 1) {\r\n roots.push(-coff[0] / coff[1]); // p(t) = coff[0] + coff[1] * t\r\n } else if (degree === 2) {\r\n AnalyticRoots.appendQuadraticRoots(coff, roots);\r\n } else if (degree === 3) {\r\n AnalyticRoots.appendCubicRoots(coff, roots);\r\n } else if (degree === 4) {\r\n AnalyticRoots.appendQuarticRoots(coff, roots);\r\n } else {\r\n // TODO: WORK WITH BEZIER SOLVER\r\n assert(false, \"Unimplemented degree in trig solver\");\r\n }\r\n if (roots.length > 0) {\r\n // each solution t represents an angle with Math.Cos(theta) = C(t)/W(t) and sin(theta) = S(t)/W(t)\r\n // division by W has no effect on atan2 calculations, so we just compute S(t),C(t)\r\n for (let i = 0; i < roots.length; i++) {\r\n const ss = PowerPolynomial.evaluate(this.S, roots.atUncheckedIndex(i));\r\n const cc = PowerPolynomial.evaluate(this.C, roots.atUncheckedIndex(i));\r\n radians.push(Math.atan2(ss, cc));\r\n }\r\n }\r\n // If the tail of the coff array is zero, we solved a polynomial of lesser degree above, and\r\n // we report the skipped \"root at infinity\" as the corresponding angle -pi/2 (without multiplicity).\r\n // See core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for details.\r\n if (degree < nominalDegree)\r\n radians.push(-0.5 * Math.PI);\r\n }\r\n return radians.length > 0;\r\n }\r\n private static readonly _coefficientRelTol = 1.0e-12;\r\n /**\r\n * Compute intersections of the unit circle `x^2 + y^2 = 1` with the general quadric (conic)\r\n * `axx x^2 + axy xy + ayy y^2 + ax x + ay y + a = 0`.\r\n * @param axx coefficient of x^2\r\n * @param axy coefficient of xy\r\n * @param ayy coefficient of y^2\r\n * @param ax coefficient of x\r\n * @param ay coefficient of y\r\n * @param a constant coefficient\r\n * @param radians up to 4 solution angles t in the quadric parameterization: x = cos(t), y = sin(t)\r\n */\r\n public static solveUnitCircleImplicitQuadricIntersection(\r\n axx: number, axy: number, ayy: number, ax: number, ay: number, a: number, radians: number[],\r\n ): boolean {\r\n const coffs = new Float64Array(5);\r\n PowerPolynomial.zero(coffs);\r\n let degree;\r\n // see core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for derivation of these coefficients\r\n if (Geometry.hypotenuseXYZ(axx, axy, ayy) > TrigPolynomial._coefficientRelTol * Geometry.hypotenuseXYZ(ax, ay, a)) {\r\n PowerPolynomial.accumulate(coffs, this.CW, ax);\r\n PowerPolynomial.accumulate(coffs, this.SW, ay);\r\n PowerPolynomial.accumulate(coffs, this.WW, a);\r\n PowerPolynomial.accumulate(coffs, this.SS, ayy);\r\n PowerPolynomial.accumulate(coffs, this.CC, axx);\r\n PowerPolynomial.accumulate(coffs, this.SC, axy);\r\n degree = 4;\r\n } else {\r\n PowerPolynomial.accumulate(coffs, this.C, ax);\r\n PowerPolynomial.accumulate(coffs, this.S, ay);\r\n PowerPolynomial.accumulate(coffs, this.W, a);\r\n degree = 2;\r\n }\r\n const maxCoff = Math.max(Math.abs(axx), Math.abs(ayy), Math.abs(axy), Math.abs(ax), Math.abs(ay), Math.abs(a));\r\n const b = this.solveAngles(coffs, degree, maxCoff, radians);\r\n /*\r\n for (const theta of angles) {\r\n const c = theta.cos();\r\n const s = theta.sin();\r\n GeometryCoreTestIO.consoleLog({\r\n angle: theta, co: c, si: s,\r\n f: axx * c * c + axy * c * s + ayy * s * s + ax * c + ay * s + a,\r\n });\r\n } */\r\n return b;\r\n }\r\n /**\r\n * Compute intersections of unit circle x^2 + y 2 = 1 with the ellipse\r\n * (x,y) = (cx + ux Math.Cos + vx sin, cy + uy Math.Cos + vy sin)\r\n * Solutions are returned as angles in the ellipse space.\r\n * @param cx center x\r\n * @param cy center y\r\n * @param ux 0 degree vector x\r\n * @param uy 0 degree vector y\r\n * @param vx 90 degree vector x\r\n * @param vy 90 degree vector y\r\n * @param ellipseRadians solution angles in ellipse parameter space\r\n * @param circleRadians solution angles in circle parameter space\r\n */\r\n public static solveUnitCircleEllipseIntersection(\r\n cx: number, cy: number,\r\n ux: number, uy: number,\r\n vx: number, vy: number,\r\n ellipseRadians: number[], circleRadians: number[],\r\n ): boolean {\r\n circleRadians.length = 0;\r\n // see core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for derivation of these coefficients:\r\n const acc = ux * ux + uy * uy;\r\n const acs = 2.0 * (ux * vx + uy * vy);\r\n const ass = vx * vx + vy * vy;\r\n const ac = 2.0 * (ux * cx + uy * cy);\r\n const as = 2.0 * (vx * cx + vy * cy);\r\n const a = cx * cx + cy * cy - 1.0;\r\n const status = this.solveUnitCircleImplicitQuadricIntersection(acc, acs, ass, ac, as, a, ellipseRadians);\r\n for (const radians of ellipseRadians) {\r\n const cc = Math.cos(radians);\r\n const ss = Math.sin(radians);\r\n const x = cx + ux * cc + vx * ss;\r\n const y = cy + uy * cc + vy * ss;\r\n circleRadians.push(Math.atan2(y, x));\r\n }\r\n return status;\r\n }\r\n /**\r\n * Compute intersections of unit circle `x^2 + y^2 = w^2` (in homogeneous coordinates) with the ellipse\r\n * `F(t) = (cx + ux cos(t) + vx sin(t), cy + uy cos(t) + vy sin(t)) / (cw + uw cos(t) + vw sin(t))`.\r\n * @param cx center x\r\n * @param cy center y\r\n * @param cw center w\r\n * @param ux 0 degree vector x\r\n * @param uy 0 degree vector y\r\n * @param uw 0 degree vector w\r\n * @param vx 90 degree vector x\r\n * @param vy 90 degree vector y\r\n * @param vw 90 degree vector w\r\n * @param ellipseRadians solution angles in ellipse parameter space\r\n * @param circleRadians solution angles in circle parameter space\r\n */\r\n public static solveUnitCircleHomogeneousEllipseIntersection(\r\n cx: number, cy: number, cw: number,\r\n ux: number, uy: number, uw: number,\r\n vx: number, vy: number, vw: number,\r\n ellipseRadians: number[], circleRadians: number[],\r\n ): boolean {\r\n circleRadians.length = 0;\r\n // see core\\geometry\\internaldocs\\unitCircleEllipseIntersection.md for derivation of these coefficients:\r\n const acc = ux * ux + uy * uy - uw * uw;\r\n const acs = 2.0 * (ux * vx + uy * vy - uw * vw);\r\n const ass = vx * vx + vy * vy - vw * vw;\r\n const ac = 2.0 * (ux * cx + uy * cy - uw * cw);\r\n const as = 2.0 * (vx * cx + vy * cy - vw * cw);\r\n const a = cx * cx + cy * cy - cw * cw;\r\n const status = this.solveUnitCircleImplicitQuadricIntersection(\r\n acc, acs, ass, ac, as, a, ellipseRadians,\r\n );\r\n for (const radians of ellipseRadians) {\r\n const cc = Math.cos(radians);\r\n const ss = Math.sin(radians);\r\n const x = cx + ux * cc + vx * ss;\r\n const y = cy + uy * cc + vy * ss;\r\n circleRadians.push(Math.atan2(y, x));\r\n }\r\n return status;\r\n }\r\n}\r\n\r\n/**\r\n * * bilinear expression\r\n * * `f(u,v) = a + b * u * c * v + d * u * v`\r\n * @internal\r\n */\r\nexport class BilinearPolynomial {\r\n /** constant coefficient */\r\n public a: number;\r\n /** u coefficient */\r\n public b: number;\r\n /** v coefficient */\r\n public c: number;\r\n /** uv coefficient */\r\n public d: number;\r\n /**\r\n *\r\n * @param a constant coefficient\r\n * @param b `u` coefficient\r\n * @param c `v` coefficient\r\n * @param d `u*v` coefficient\r\n */\r\n public constructor(a: number, b: number, c: number, d: number) {\r\n this.a = a;\r\n this.b = b;\r\n this.c = c;\r\n this.d = d;\r\n }\r\n /**\r\n * Evaluate the bilinear expression at u,v\r\n */\r\n public evaluate(u: number, v: number): number {\r\n return this.a + this.b * u + v * (this.c + this.d * u);\r\n }\r\n /** Create a bilinear polynomial z=f(u,v) given z values at 00, 10, 01, 11.\r\n */\r\n public static createUnitSquareValues(f00: number, f10: number, f01: number, f11: number): BilinearPolynomial {\r\n return new BilinearPolynomial(f00, f10, f10, f11 - f10 - f01);\r\n }\r\n /**\r\n * Solve a pair of bilinear equations\r\n * * First equation: `a0 + b0 * u + c0 * v + d0 * u * v = 0`\r\n * * Second equation: `a1 + b1 * u + c1 * v + d1 * u * v = 0`\r\n */\r\n public static solveBilinearPair(\r\n a0: number, b0: number, c0: number, d0: number,\r\n a1: number, b1: number, c1: number, d1: number,\r\n ): Point2d[] | undefined {\r\n // constant linear, and quadratic coefficients for c0 + c1 * u + c2 * u*u = 0\r\n const e0 = Geometry.crossProductXYXY(a0, a1, c0, c1);\r\n const e1 = Geometry.crossProductXYXY(b0, b1, c0, c1) + Geometry.crossProductXYXY(a0, a1, d0, d1);\r\n const e2 = Geometry.crossProductXYXY(b0, b1, d0, d1);\r\n const uRoots = Degree2PowerPolynomial.solveQuadratic(e2, e1, e0);\r\n if (uRoots === undefined)\r\n return undefined;\r\n const uv = [];\r\n for (const u of uRoots) {\r\n const v0 = Geometry.conditionalDivideFraction(-(a0 + b0 * u), c0 + d0 * u);\r\n const v1 = Geometry.conditionalDivideFraction(-(a1 + b1 * u), c1 + d1 * u);\r\n if (v0 !== undefined)\r\n uv.push(Point2d.create(u, v0));\r\n else if (v1 !== undefined)\r\n uv.push(Point2d.create(u, v1));\r\n }\r\n return uv;\r\n }\r\n /**\r\n * Solve the simultaneous equations\r\n * * `p(u,v) = pValue`\r\n * * `q(u,v) = qValue`\r\n * @param p\r\n * @param pValue\r\n * @param q\r\n * @param qValue\r\n */\r\n public static solvePair(p: BilinearPolynomial, pValue: number, q: BilinearPolynomial, qValue: number): Point2d[] | undefined {\r\n return BilinearPolynomial.solveBilinearPair(p.a - pValue, p.b, p.c, p.d, q.a - qValue, q.b, q.c, q.d);\r\n }\r\n}\r\n\r\n/**\r\n * * trigonometric expresses `f(theta) = a + cosineCoff * cos(theta) + sineCoff * sin(theta)`\r\n * @internal\r\n */\r\nexport class SineCosinePolynomial {\r\n /** constant coefficient */\r\n public a: number;\r\n /** cosine coefficient */\r\n public cosineCoff: number;\r\n /** sine coefficient */\r\n public sineCoff: number;\r\n /**\r\n *\r\n * @param a constant coefficient\r\n * @param cosineCoff `cos(theta)` coefficient\r\n * @param sinCoff `sin(theta)` coefficient\r\n */\r\n public constructor(a: number, cosCoff: number, sinCoff: number) {\r\n this.a = a;\r\n this.cosineCoff = cosCoff;\r\n this.sineCoff = sinCoff;\r\n }\r\n /** set all coefficients */\r\n public set(a: number, cosCoff: number, sinCoff: number) {\r\n this.a = a;\r\n this.cosineCoff = cosCoff;\r\n this.sineCoff = sinCoff;\r\n }\r\n /** Return the function value at given angle in radians */\r\n public evaluateRadians(theta: number): number {\r\n return this.a + this.cosineCoff * Math.cos(theta) + this.sineCoff * Math.sin(theta);\r\n }\r\n /** Return the range of function values over the entire angle range. */\r\n public range(result?: Range1d): Range1d {\r\n const q = Geometry.hypotenuseXY(this.cosineCoff, this.sineCoff);\r\n return Range1d.createXX(this.a - q, this.a + q, result);\r\n }\r\n /** Return the min and max values of the function over theta range from radians0 to radians1 inclusive. */\r\n public rangeInStartEndRadians(radians0: number, radians1: number, result?: Range1d): Range1d {\r\n if (Angle.isFullCircleRadians(radians1 - radians0))\r\n return this.range(result);\r\n result = Range1d.createXX(this.evaluateRadians(radians0), this.evaluateRadians(radians1), result);\r\n // angles of min and max ...\r\n // angles for min and max of the sine wave . ..\r\n const alphaA = Math.atan2(this.sineCoff, this.cosineCoff);\r\n const alphaB = alphaA + Math.PI;\r\n if (AngleSweep.isRadiansInStartEnd(alphaA, radians0, radians1))\r\n result.extendX(this.evaluateRadians(alphaA));\r\n if (AngleSweep.isRadiansInStartEnd(alphaB, radians0, radians1))\r\n result.extendX(this.evaluateRadians(alphaB));\r\n return result;\r\n }\r\n /** Return the min and max values of the function over theta range from radians0 to radians1 inclusive. */\r\n public rangeInSweep(sweep: AngleSweep, result?: Range1d): Range1d {\r\n return this.rangeInStartEndRadians(sweep.startRadians, sweep.endRadians, result);\r\n }\r\n /**\r\n * Return a representative angle (in radians) for min and max values.\r\n * * The radians value is atan2(sineCoff, cosineCoff)\r\n * * Hence the candidates for min and max of the function are at this value and this value plus PI\r\n */\r\n public referenceMinMaxRadians(): number {\r\n return Math.atan2(this.sineCoff, this.cosineCoff);\r\n }\r\n}\r\n/**\r\n * Support for an implicit linear equation (half space)\r\n * f(x,y) = a0 + x * ax + y * ay\r\n * @internal\r\n */\r\nexport class ImplicitLineXY {\r\n /**\r\n * constant coefficient\r\n */\r\n public a: number;\r\n /**\r\n * x coefficient\r\n */\r\n public ax: number;\r\n /**\r\n * y coefficient\r\n */\r\n public ay: number;\r\n /** construct the ImplicitLineXY from coefficients */\r\n public constructor(a: number, ax: number, ay: number) {\r\n this.a = a;\r\n this.ax = ax;\r\n this.ay = ay;\r\n }\r\n /** Compute 2 points of a line segment with\r\n * * the segment is on the zero-line of this ImplicitLineXY\r\n * * the start and endpoints are distance `b` from the projection of the origin onto the ImplicitLineXY\r\n * @returns undefined if ax,ay are both zero. Otherwise the two points of the segment.\r\n */\r\n public convertToSegmentPoints(b: number): Point3d[] | undefined {\r\n const q = Math.sqrt(this.ax * this.ax + this.ay * this.ay);\r\n const alpha = Geometry.conditionalDivideCoordinate(1.0, q, 1.0e10);\r\n if (alpha === undefined)\r\n return undefined;\r\n const ux = alpha * this.ax;\r\n const uy = alpha * this.ay;\r\n const px = -alpha * ux;\r\n const py = -alpha * uy;\r\n return [Point3d.create(px - b * uy, py + b * ux), Point3d.create(px + b * uy, py - b * ux)];\r\n }\r\n /**\r\n * Evaluate the half-space function at an xy point\r\n * @param xy xy values for evaluation\r\n * @returns evaluation.\r\n */\r\n public evaluatePoint(xy: XAndY): number {\r\n return this.a + xy.x * this.ax + xy.y * this.ay;\r\n }\r\n /**\r\n * add scale * (a,ax,ay) to the respective coefficients.\r\n */\r\n public addScaledCoefficientsInPlace(a: number, ax: number, ay: number, scale: number) {\r\n this.a += scale * a;\r\n this.ax += scale * ax;\r\n this.ay += scale * ay;\r\n }\r\n}\r\n"]}
|