@itwin/core-geometry 3.5.0-dev.7 → 3.6.0-dev.1
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 +65 -1
- package/lib/cjs/Geometry.d.ts +26 -10
- package/lib/cjs/Geometry.d.ts.map +1 -1
- package/lib/cjs/Geometry.js +32 -17
- package/lib/cjs/Geometry.js.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.d.ts +11 -5
- package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/cjs/bspline/BSplineCurve.js +47 -18
- package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.d.ts +10 -3
- package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/cjs/bspline/BezierCurveBase.js +12 -4
- package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.d.ts.map +1 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js +4 -1
- package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
- package/lib/cjs/bspline/KnotVector.js +3 -0
- package/lib/cjs/bspline/KnotVector.js.map +1 -1
- package/lib/cjs/curve/Arc3d.d.ts +10 -4
- package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
- package/lib/cjs/curve/Arc3d.js +17 -5
- package/lib/cjs/curve/Arc3d.js.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +15 -7
- package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js +46 -29
- package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/cjs/curve/CurveCollection.d.ts +13 -4
- package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCollection.js +23 -2
- package/lib/cjs/curve/CurveCollection.js.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.js +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts +4 -3
- package/lib/cjs/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
- package/lib/cjs/curve/CurveCurveIntersectXYZ.js +8 -6
- package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.d.ts +20 -18
- package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/cjs/curve/CurvePrimitive.js +58 -339
- package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
- package/lib/cjs/curve/LineSegment3d.d.ts +8 -2
- package/lib/cjs/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineSegment3d.js +9 -0
- package/lib/cjs/curve/LineSegment3d.js.map +1 -1
- package/lib/cjs/curve/LineString3d.d.ts +18 -2
- package/lib/cjs/curve/LineString3d.d.ts.map +1 -1
- package/lib/cjs/curve/LineString3d.js +39 -23
- package/lib/cjs/curve/LineString3d.js.map +1 -1
- package/lib/cjs/curve/ProxyCurve.d.ts +9 -7
- package/lib/cjs/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/cjs/curve/ProxyCurve.js +4 -0
- package/lib/cjs/curve/ProxyCurve.js.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.d.ts +2 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.d.ts.map +1 -1
- package/lib/cjs/curve/Query/PlanarSubdivision.js +5 -4
- package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/cjs/curve/RegionOps.d.ts +5 -0
- package/lib/cjs/curve/RegionOps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOps.js +17 -3
- package/lib/cjs/curve/RegionOps.js.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts +9 -6
- package/lib/cjs/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js +55 -47
- package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.d.ts +55 -0
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +143 -0
- package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -0
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts +43 -0
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +146 -0
- package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -0
- package/lib/cjs/curve/internalContexts/CurveLengthContext.d.ts +33 -0
- package/lib/cjs/curve/internalContexts/CurveLengthContext.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js +91 -0
- package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -0
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts +21 -0
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts.map +1 -0
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +34 -0
- package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -0
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +31 -8
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +77 -12
- package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts +2 -2
- package/lib/cjs/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/DirectSpiral3d.js +15 -8
- package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts +12 -7
- package/lib/cjs/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js +12 -3
- package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/cjs/geometry3d/Angle.d.ts +66 -42
- package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Angle.js +201 -99
- package/lib/cjs/geometry3d/Angle.js.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.d.ts +102 -60
- package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/cjs/geometry3d/AngleSweep.js +191 -106
- package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.d.ts +25 -8
- package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Matrix3d.js +67 -15
- package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.d.ts +1 -0
- package/lib/cjs/geometry3d/Point2dArrayCarrier.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -1
- package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts +86 -25
- package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point2dVector2d.js +230 -81
- package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts +14 -4
- package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js +15 -5
- package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts +121 -67
- package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Point3dVector3d.js +318 -137
- package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/cjs/geometry3d/Range.d.ts +1 -2
- package/lib/cjs/geometry3d/Range.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Range.js +1 -2
- package/lib/cjs/geometry3d/Range.js.map +1 -1
- package/lib/cjs/geometry3d/Ray3d.d.ts +5 -5
- package/lib/cjs/geometry3d/Ray3d.js +5 -5
- package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
- package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
- package/lib/cjs/geometry3d/Transform.js.map +1 -1
- package/lib/cjs/numerics/Polynomials.d.ts.map +1 -1
- package/lib/cjs/numerics/Polynomials.js +0 -1
- package/lib/cjs/numerics/Polynomials.js.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +4 -4
- package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
- package/lib/cjs/polyface/IndexedEdgeMatcher.js +3 -3
- package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
- package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/cjs/polyface/Polyface.d.ts +7 -2
- package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
- package/lib/cjs/polyface/Polyface.js +8 -1
- package/lib/cjs/polyface/Polyface.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.d.ts +36 -8
- package/lib/cjs/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/cjs/polyface/PolyfaceQuery.js +112 -31
- package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.d.ts +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/cjs/serialization/IModelJsonSchema.js +4 -3
- package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/cjs/solid/Sphere.d.ts +1 -1
- package/lib/cjs/solid/Sphere.js +3 -3
- package/lib/cjs/solid/Sphere.js.map +1 -1
- package/lib/cjs/solid/TorusPipe.d.ts +17 -13
- package/lib/cjs/solid/TorusPipe.d.ts.map +1 -1
- package/lib/cjs/solid/TorusPipe.js +67 -38
- package/lib/cjs/solid/TorusPipe.js.map +1 -1
- package/lib/cjs/topology/Graph.d.ts +1 -1
- package/lib/cjs/topology/Graph.js +1 -1
- package/lib/cjs/topology/Graph.js.map +1 -1
- package/lib/cjs/topology/Merging.d.ts.map +1 -1
- package/lib/cjs/topology/Merging.js +9 -1
- package/lib/cjs/topology/Merging.js.map +1 -1
- package/lib/cjs/topology/Triangulation.d.ts +1 -1
- package/lib/cjs/topology/Triangulation.js +1 -1
- package/lib/cjs/topology/Triangulation.js.map +1 -1
- package/lib/esm/Geometry.d.ts +26 -10
- package/lib/esm/Geometry.d.ts.map +1 -1
- package/lib/esm/Geometry.js +32 -17
- package/lib/esm/Geometry.js.map +1 -1
- package/lib/esm/bspline/BSplineCurve.d.ts +11 -5
- package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
- package/lib/esm/bspline/BSplineCurve.js +47 -18
- package/lib/esm/bspline/BSplineCurve.js.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.d.ts +10 -3
- package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
- package/lib/esm/bspline/BezierCurveBase.js +12 -4
- package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.d.ts.map +1 -1
- package/lib/esm/bspline/InterpolationCurve3d.js +4 -1
- package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
- package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
- package/lib/esm/bspline/KnotVector.js +3 -0
- package/lib/esm/bspline/KnotVector.js.map +1 -1
- package/lib/esm/curve/Arc3d.d.ts +10 -4
- package/lib/esm/curve/Arc3d.d.ts.map +1 -1
- package/lib/esm/curve/Arc3d.js +17 -5
- package/lib/esm/curve/Arc3d.js.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +15 -7
- package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
- package/lib/esm/curve/CurveChainWithDistanceIndex.js +46 -29
- package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
- package/lib/esm/curve/CurveCollection.d.ts +13 -4
- package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
- package/lib/esm/curve/CurveCollection.js +23 -2
- package/lib/esm/curve/CurveCollection.js.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.js +1 -1
- package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts +4 -3
- package/lib/esm/curve/CurveCurveIntersectXYZ.d.ts.map +1 -1
- package/lib/esm/curve/CurveCurveIntersectXYZ.js +8 -6
- package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +1 -1
- package/lib/esm/curve/CurvePrimitive.d.ts +20 -18
- package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
- package/lib/esm/curve/CurvePrimitive.js +52 -333
- package/lib/esm/curve/CurvePrimitive.js.map +1 -1
- package/lib/esm/curve/LineSegment3d.d.ts +8 -2
- package/lib/esm/curve/LineSegment3d.d.ts.map +1 -1
- package/lib/esm/curve/LineSegment3d.js +9 -0
- package/lib/esm/curve/LineSegment3d.js.map +1 -1
- package/lib/esm/curve/LineString3d.d.ts +18 -2
- package/lib/esm/curve/LineString3d.d.ts.map +1 -1
- package/lib/esm/curve/LineString3d.js +39 -23
- package/lib/esm/curve/LineString3d.js.map +1 -1
- package/lib/esm/curve/ProxyCurve.d.ts +9 -7
- package/lib/esm/curve/ProxyCurve.d.ts.map +1 -1
- package/lib/esm/curve/ProxyCurve.js +4 -0
- package/lib/esm/curve/ProxyCurve.js.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.d.ts +2 -1
- package/lib/esm/curve/Query/PlanarSubdivision.d.ts.map +1 -1
- package/lib/esm/curve/Query/PlanarSubdivision.js +5 -4
- package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
- package/lib/esm/curve/RegionOps.d.ts +5 -0
- package/lib/esm/curve/RegionOps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOps.js +17 -3
- package/lib/esm/curve/RegionOps.js.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts +9 -6
- package/lib/esm/curve/RegionOpsClassificationSweeps.d.ts.map +1 -1
- package/lib/esm/curve/RegionOpsClassificationSweeps.js +56 -48
- package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.d.ts +55 -0
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +139 -0
- package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -0
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts +43 -0
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +142 -0
- package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -0
- package/lib/esm/curve/internalContexts/CurveLengthContext.d.ts +33 -0
- package/lib/esm/curve/internalContexts/CurveLengthContext.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/CurveLengthContext.js +87 -0
- package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -0
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts +21 -0
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.d.ts.map +1 -0
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +30 -0
- package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -0
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts +31 -8
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.d.ts.map +1 -1
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +77 -12
- package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.d.ts +2 -2
- package/lib/esm/curve/spiral/DirectSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/DirectSpiral3d.js +15 -8
- package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts +12 -7
- package/lib/esm/curve/spiral/TransitionSpiral3d.d.ts.map +1 -1
- package/lib/esm/curve/spiral/TransitionSpiral3d.js +12 -3
- package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
- package/lib/esm/geometry3d/Angle.d.ts +66 -42
- package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
- package/lib/esm/geometry3d/Angle.js +201 -99
- package/lib/esm/geometry3d/Angle.js.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.d.ts +102 -60
- package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
- package/lib/esm/geometry3d/AngleSweep.js +191 -106
- package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.d.ts +25 -8
- package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Matrix3d.js +67 -15
- package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.d.ts +1 -0
- package/lib/esm/geometry3d/Point2dArrayCarrier.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.js +2 -1
- package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.d.ts +86 -25
- package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point2dVector2d.js +230 -81
- package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts +14 -4
- package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dArrayCarrier.js +15 -5
- package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.d.ts +121 -67
- package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
- package/lib/esm/geometry3d/Point3dVector3d.js +318 -137
- package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
- package/lib/esm/geometry3d/Range.d.ts +1 -2
- package/lib/esm/geometry3d/Range.d.ts.map +1 -1
- package/lib/esm/geometry3d/Range.js +1 -2
- package/lib/esm/geometry3d/Range.js.map +1 -1
- package/lib/esm/geometry3d/Ray3d.d.ts +5 -5
- package/lib/esm/geometry3d/Ray3d.js +5 -5
- package/lib/esm/geometry3d/Ray3d.js.map +1 -1
- package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
- package/lib/esm/geometry3d/Transform.js.map +1 -1
- package/lib/esm/numerics/Polynomials.d.ts.map +1 -1
- package/lib/esm/numerics/Polynomials.js +0 -1
- package/lib/esm/numerics/Polynomials.js.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +4 -4
- package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
- package/lib/esm/polyface/IndexedEdgeMatcher.js +3 -3
- package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
- package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
- package/lib/esm/polyface/Polyface.d.ts +7 -2
- package/lib/esm/polyface/Polyface.d.ts.map +1 -1
- package/lib/esm/polyface/Polyface.js +8 -1
- package/lib/esm/polyface/Polyface.js.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.d.ts +36 -8
- package/lib/esm/polyface/PolyfaceQuery.d.ts.map +1 -1
- package/lib/esm/polyface/PolyfaceQuery.js +113 -32
- package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
- package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
- package/lib/esm/serialization/GeometrySamples.js.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.d.ts +1 -1
- package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
- package/lib/esm/serialization/IModelJsonSchema.js +4 -3
- package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
- package/lib/esm/solid/Sphere.d.ts +1 -1
- package/lib/esm/solid/Sphere.js +3 -3
- package/lib/esm/solid/Sphere.js.map +1 -1
- package/lib/esm/solid/TorusPipe.d.ts +17 -13
- package/lib/esm/solid/TorusPipe.d.ts.map +1 -1
- package/lib/esm/solid/TorusPipe.js +67 -38
- package/lib/esm/solid/TorusPipe.js.map +1 -1
- package/lib/esm/topology/Graph.d.ts +1 -1
- package/lib/esm/topology/Graph.js +1 -1
- package/lib/esm/topology/Graph.js.map +1 -1
- package/lib/esm/topology/Merging.d.ts.map +1 -1
- package/lib/esm/topology/Merging.js +9 -1
- package/lib/esm/topology/Merging.js.map +1 -1
- package/lib/esm/topology/Triangulation.d.ts +1 -1
- package/lib/esm/topology/Triangulation.js +1 -1
- package/lib/esm/topology/Triangulation.js.map +1 -1
- package/package.json +5 -5
|
@@ -10,30 +10,46 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.Angle = void 0;
|
|
11
11
|
const Geometry_1 = require("../Geometry");
|
|
12
12
|
/**
|
|
13
|
-
* An `Angle` carries the numeric value of an angle, with methods to allow (require!) callers to
|
|
14
|
-
*
|
|
15
|
-
* *
|
|
13
|
+
* An `Angle` carries the numeric value of an angle, with methods to allow (require!) callers to
|
|
14
|
+
* be clear about whether their angle is degrees or radians.
|
|
15
|
+
* * After the Angle object is created, the callers should not know or care whether it is stored in
|
|
16
|
+
* `degrees` or `radians` because both are available if requested by caller.
|
|
17
|
+
* * The various access method are named so that callers can specify whether untyped numbers passed in or
|
|
18
|
+
* out are degrees or radians.
|
|
16
19
|
* @public
|
|
17
20
|
*/
|
|
18
21
|
class Angle {
|
|
19
|
-
constructor(radians = 0, degrees) {
|
|
22
|
+
constructor(radians = 0, degrees) {
|
|
23
|
+
this._radians = radians;
|
|
24
|
+
this._degrees = degrees;
|
|
25
|
+
}
|
|
20
26
|
/** Return a new angle with the same content. */
|
|
21
|
-
clone() {
|
|
27
|
+
clone() {
|
|
28
|
+
return new Angle(this._radians, this._degrees);
|
|
29
|
+
}
|
|
22
30
|
/** Freeze this instance so it is read-only */
|
|
23
|
-
freeze() {
|
|
31
|
+
freeze() {
|
|
32
|
+
return Object.freeze(this);
|
|
33
|
+
}
|
|
24
34
|
/**
|
|
25
35
|
* Return a new Angle object for angle given in degrees.
|
|
26
36
|
* @param degrees angle in degrees
|
|
27
37
|
*/
|
|
28
|
-
static createDegrees(degrees) {
|
|
38
|
+
static createDegrees(degrees) {
|
|
39
|
+
return new Angle(Angle.degreesToRadians(degrees), degrees);
|
|
40
|
+
}
|
|
29
41
|
/**
|
|
30
42
|
* Return a (new) Angle object for a value given in radians.
|
|
31
43
|
* @param radians angle in radians
|
|
32
44
|
*/
|
|
33
|
-
static createRadians(radians) {
|
|
45
|
+
static createRadians(radians) {
|
|
46
|
+
return new Angle(radians);
|
|
47
|
+
}
|
|
34
48
|
/**
|
|
35
|
-
* Return a (new) Angle object that is interpolated between two inputs
|
|
36
|
-
* @param
|
|
49
|
+
* Return a (new) Angle object that is interpolated between two inputs (based on a fraction)
|
|
50
|
+
* @param angle0 first angle in radians
|
|
51
|
+
* @param fraction the interpolation fraction
|
|
52
|
+
* @param angle1 second angle in radians
|
|
37
53
|
*/
|
|
38
54
|
static createInterpolate(angle0, fraction, angle1) {
|
|
39
55
|
return new Angle(Geometry_1.Geometry.interpolate(angle0.radians, fraction, angle1.radians));
|
|
@@ -42,45 +58,49 @@ class Angle {
|
|
|
42
58
|
* Return a (new) Angle object, with angle scaled from existing angle.
|
|
43
59
|
* @param scale scale factor to apply to angle.
|
|
44
60
|
*/
|
|
45
|
-
cloneScaled(scale) {
|
|
61
|
+
cloneScaled(scale) {
|
|
62
|
+
return new Angle(this.radians * scale);
|
|
63
|
+
}
|
|
46
64
|
/**
|
|
47
65
|
* Set this angle to a value given in radians.
|
|
48
66
|
* @param radians angle given in radians
|
|
49
67
|
*/
|
|
50
|
-
setRadians(radians) {
|
|
68
|
+
setRadians(radians) {
|
|
69
|
+
this._radians = radians;
|
|
70
|
+
this._degrees = undefined;
|
|
71
|
+
}
|
|
51
72
|
/**
|
|
52
73
|
* Set this angle to a value given in degrees.
|
|
53
74
|
* @param degrees angle given in degrees.
|
|
54
75
|
*/
|
|
55
|
-
setDegrees(degrees) {
|
|
76
|
+
setDegrees(degrees) {
|
|
77
|
+
this._radians = Angle.degreesToRadians(degrees);
|
|
78
|
+
this._degrees = degrees;
|
|
79
|
+
}
|
|
56
80
|
/** Create an angle for a full circle. */
|
|
57
|
-
static create360() {
|
|
81
|
+
static create360() {
|
|
82
|
+
return new Angle(Math.PI * 2.0, 360.0);
|
|
83
|
+
}
|
|
58
84
|
/**
|
|
59
|
-
*
|
|
60
|
-
* quadrant.
|
|
85
|
+
* Create a (strongly typed) Angle whose tangent is `numerator/denominator`, using the signs of both in
|
|
86
|
+
* determining the (otherwise ambiguous) quadrant.
|
|
61
87
|
* @param numerator numerator for tangent
|
|
62
88
|
* @param denominator denominator for tangent
|
|
63
89
|
*/
|
|
64
|
-
static createAtan2(numerator, denominator) {
|
|
90
|
+
static createAtan2(numerator, denominator) {
|
|
91
|
+
return new Angle(Math.atan2(numerator, denominator));
|
|
92
|
+
}
|
|
65
93
|
/**
|
|
66
94
|
* Copy all contents of `other` to this Angle.
|
|
67
95
|
* @param other source data
|
|
68
96
|
*/
|
|
69
|
-
setFrom(other) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
* @param json object from JSON.parse. If a number, value is in *DEGREES*
|
|
73
|
-
* @param defaultValRadians if json is undefined, default value in radians.
|
|
74
|
-
* @return a new Angle
|
|
75
|
-
*/
|
|
76
|
-
static fromJSON(json, defaultValRadians) {
|
|
77
|
-
const val = new Angle();
|
|
78
|
-
val.setFromJSON(json, defaultValRadians);
|
|
79
|
-
return val;
|
|
97
|
+
setFrom(other) {
|
|
98
|
+
this._radians = other._radians;
|
|
99
|
+
this._degrees = other._degrees;
|
|
80
100
|
}
|
|
81
101
|
/**
|
|
82
|
-
*
|
|
83
|
-
* * A simple number is degrees.
|
|
102
|
+
* Set an Angle from a JSON object
|
|
103
|
+
* * A simple number is considered as degrees.
|
|
84
104
|
* * specified `json.degrees` or `json._degrees` is degree value.
|
|
85
105
|
* * specified `son.radians` or `json._radians` is radians value.
|
|
86
106
|
* @param json object from JSON.parse. If a number, value is in *DEGREES*
|
|
@@ -106,19 +126,40 @@ class Angle {
|
|
|
106
126
|
this.setRadians(json._radians);
|
|
107
127
|
}
|
|
108
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Create an Angle from a JSON object
|
|
131
|
+
* @param json object from JSON.parse. If a number, value is in *DEGREES*
|
|
132
|
+
* @param defaultValRadians if json is undefined, default value in radians.
|
|
133
|
+
* @return a new Angle
|
|
134
|
+
*/
|
|
135
|
+
static fromJSON(json, defaultValRadians) {
|
|
136
|
+
const val = new Angle();
|
|
137
|
+
val.setFromJSON(json, defaultValRadians);
|
|
138
|
+
return val;
|
|
139
|
+
}
|
|
109
140
|
/** Convert an Angle to a JSON object as a number in degrees */
|
|
110
|
-
toJSON() {
|
|
141
|
+
toJSON() {
|
|
142
|
+
return this.degrees;
|
|
143
|
+
}
|
|
111
144
|
/** Return a json object with radians keyword, e.g. `{ radians: 0.10}` */
|
|
112
|
-
toJSONRadians() {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
get
|
|
145
|
+
toJSONRadians() {
|
|
146
|
+
return { radians: this.radians };
|
|
147
|
+
}
|
|
148
|
+
/** Return the angle measured in radians. */
|
|
149
|
+
get radians() {
|
|
150
|
+
return this._radians;
|
|
151
|
+
}
|
|
152
|
+
/** Return the angle measured in degrees. */
|
|
153
|
+
get degrees() {
|
|
154
|
+
return this._degrees !== undefined ? this._degrees : Angle.radiansToDegrees(this._radians);
|
|
155
|
+
}
|
|
117
156
|
/**
|
|
118
157
|
* Convert an angle in degrees to radians.
|
|
119
158
|
* @param degrees angle in degrees
|
|
120
159
|
*/
|
|
121
|
-
static degreesToRadians(degrees) {
|
|
160
|
+
static degreesToRadians(degrees) {
|
|
161
|
+
return degrees * Math.PI / 180;
|
|
162
|
+
}
|
|
122
163
|
/**
|
|
123
164
|
* Convert an angle in radians to degrees.
|
|
124
165
|
* @param degrees angle in radians
|
|
@@ -129,6 +170,11 @@ class Angle {
|
|
|
129
170
|
// Now radians is positive ...
|
|
130
171
|
const pi = Math.PI;
|
|
131
172
|
const factor = 180.0 / pi;
|
|
173
|
+
/* the following if statements are for round-off reasons. The problem is that no IEEE number is
|
|
174
|
+
* an exact hit for any primary multiple of pi (90, 180, etc). The following is supposed to have
|
|
175
|
+
* a better chance that if the input was computed by direct assignment from 90, 180, etc degrees
|
|
176
|
+
* it will return exactly 90,180 etc.
|
|
177
|
+
*/
|
|
132
178
|
if (radians <= 0.25 * pi)
|
|
133
179
|
return factor * radians;
|
|
134
180
|
if (radians < 0.75 * pi)
|
|
@@ -143,27 +189,37 @@ class Angle {
|
|
|
143
189
|
/**
|
|
144
190
|
* Return the cosine of this Angle object's angle.
|
|
145
191
|
*/
|
|
146
|
-
cos() {
|
|
192
|
+
cos() {
|
|
193
|
+
return Math.cos(this._radians);
|
|
194
|
+
}
|
|
147
195
|
/**
|
|
148
196
|
* Return the sine of this Angle object's angle.
|
|
149
197
|
*/
|
|
150
|
-
sin() {
|
|
198
|
+
sin() {
|
|
199
|
+
return Math.sin(this._radians);
|
|
200
|
+
}
|
|
151
201
|
/**
|
|
152
202
|
* Return the tangent of this Angle object's angle.
|
|
153
203
|
*/
|
|
154
|
-
tan() {
|
|
155
|
-
|
|
204
|
+
tan() {
|
|
205
|
+
return Math.tan(this._radians);
|
|
206
|
+
}
|
|
207
|
+
/** Test if a radians (absolute) value is nearly 2PI or larger! */
|
|
156
208
|
static isFullCircleRadians(radians) {
|
|
157
209
|
return Math.abs(radians) >= Geometry_1.Geometry.fullCircleRadiansMinusSmallAngle;
|
|
158
210
|
}
|
|
159
|
-
/** Test if the radians value
|
|
211
|
+
/** Test if the radians value is a half circle */
|
|
160
212
|
static isHalfCircleRadians(radians) {
|
|
161
213
|
return Math.abs(Math.abs(radians) - Math.PI) <= Geometry_1.Geometry.smallAngleRadians;
|
|
162
214
|
}
|
|
163
|
-
/** test if the angle is
|
|
164
|
-
get isFullCircle() {
|
|
215
|
+
/** test if the angle is a full circle */
|
|
216
|
+
get isFullCircle() {
|
|
217
|
+
return Angle.isFullCircleRadians(this._radians);
|
|
218
|
+
}
|
|
165
219
|
/** test if the angle is a half circle (in either direction) */
|
|
166
|
-
get isHalfCircle() {
|
|
220
|
+
get isHalfCircle() {
|
|
221
|
+
return Angle.isHalfCircleRadians(this._radians);
|
|
222
|
+
}
|
|
167
223
|
/** Adjust a radians value so it is positive in 0..360 */
|
|
168
224
|
static adjustDegrees0To360(degrees) {
|
|
169
225
|
if (degrees >= 0) {
|
|
@@ -175,8 +231,8 @@ class Angle {
|
|
|
175
231
|
}
|
|
176
232
|
else if (degrees < 0) {
|
|
177
233
|
// negative angle ...
|
|
178
|
-
const
|
|
179
|
-
return 360.0 -
|
|
234
|
+
const radians = Angle.adjustDegrees0To360(-degrees);
|
|
235
|
+
return 360.0 - radians;
|
|
180
236
|
}
|
|
181
237
|
// fall through for Nan (disaster) !!!
|
|
182
238
|
return 0;
|
|
@@ -208,8 +264,7 @@ class Angle {
|
|
|
208
264
|
}
|
|
209
265
|
else if (radians < 0) {
|
|
210
266
|
// negative angle ...
|
|
211
|
-
|
|
212
|
-
return Math.PI * 2.0 - radians1;
|
|
267
|
+
return Math.PI * 2.0 - Angle.adjustRadians0To2Pi(-radians);
|
|
213
268
|
}
|
|
214
269
|
// fall through for NaN disaster.
|
|
215
270
|
return 0;
|
|
@@ -231,53 +286,80 @@ class Angle {
|
|
|
231
286
|
return 0;
|
|
232
287
|
}
|
|
233
288
|
/** return a (newly allocated) Angle object with value 0 radians */
|
|
234
|
-
static zero() {
|
|
289
|
+
static zero() {
|
|
290
|
+
return new Angle(0);
|
|
291
|
+
}
|
|
235
292
|
/** Test if the angle is exactly zero. */
|
|
236
|
-
get isExactZero() {
|
|
293
|
+
get isExactZero() {
|
|
294
|
+
return this.radians === 0;
|
|
295
|
+
}
|
|
237
296
|
/** Test if the angle is almost zero (within tolerance `Geometry.smallAngleRadians`) */
|
|
238
|
-
get isAlmostZero() {
|
|
297
|
+
get isAlmostZero() {
|
|
298
|
+
return Math.abs(this.radians) < Geometry_1.Geometry.smallAngleRadians;
|
|
299
|
+
}
|
|
239
300
|
/** Test if the angle is almost a north or south pole (within tolerance `Geometry.smallAngleRadians`) */
|
|
240
|
-
get isAlmostNorthOrSouthPole() {
|
|
301
|
+
get isAlmostNorthOrSouthPole() {
|
|
302
|
+
return Angle.isHalfCircleRadians(this.radians * 2.0);
|
|
303
|
+
}
|
|
241
304
|
/** Create an angle object with degrees adjusted into 0..360. */
|
|
242
|
-
static createDegreesAdjustPositive(degrees) {
|
|
305
|
+
static createDegreesAdjustPositive(degrees) {
|
|
306
|
+
return Angle.createDegrees(Angle.adjustDegrees0To360(degrees));
|
|
307
|
+
}
|
|
243
308
|
/** Create an angle object with degrees adjusted into -180..180. */
|
|
244
|
-
static createDegreesAdjustSigned180(degrees) {
|
|
309
|
+
static createDegreesAdjustSigned180(degrees) {
|
|
310
|
+
return Angle.createDegrees(Angle.adjustDegreesSigned180(degrees));
|
|
311
|
+
}
|
|
245
312
|
/**
|
|
246
313
|
* Test if two radians values are equivalent, allowing shift by full circle (i.e. by a multiple of `2*PI`)
|
|
247
314
|
* @param radiansA first radians value
|
|
248
315
|
* @param radiansB second radians value
|
|
316
|
+
* @param radianTol radian tolerance with default value of Geometry.smallAngleRadians
|
|
249
317
|
*/
|
|
250
|
-
static isAlmostEqualRadiansAllowPeriodShift(radiansA, radiansB) {
|
|
251
|
-
// try to get simple conclusions with un-shifted radians ...
|
|
318
|
+
static isAlmostEqualRadiansAllowPeriodShift(radiansA, radiansB, radianTol = Geometry_1.Geometry.smallAngleRadians) {
|
|
252
319
|
const delta = Math.abs(radiansA - radiansB);
|
|
253
|
-
if (delta <=
|
|
320
|
+
if (delta <= radianTol)
|
|
254
321
|
return true;
|
|
255
322
|
const period = Math.PI * 2.0;
|
|
256
|
-
if (Math.abs(delta - period) <=
|
|
323
|
+
if (Math.abs(delta - period) <= radianTol)
|
|
257
324
|
return true;
|
|
258
325
|
const numPeriod = Math.round(delta / period);
|
|
259
326
|
const delta1 = delta - numPeriod * period;
|
|
260
|
-
return Math.abs(delta1) <=
|
|
327
|
+
return Math.abs(delta1) <= radianTol;
|
|
261
328
|
}
|
|
262
329
|
/**
|
|
263
|
-
* Test if this angle and other are equivalent, allowing shift by full circle (i.e
|
|
330
|
+
* Test if this angle and other are equivalent, allowing shift by full circle (i.e., multiples of `2 * PI`).
|
|
331
|
+
* @param other the other angle
|
|
332
|
+
* @param radianTol radian tolerance with default value of Geometry.smallAngleRadians
|
|
264
333
|
*/
|
|
265
|
-
isAlmostEqualAllowPeriodShift(other) {
|
|
266
|
-
return Angle.isAlmostEqualRadiansAllowPeriodShift(this._radians, other._radians);
|
|
334
|
+
isAlmostEqualAllowPeriodShift(other, radianTol = Geometry_1.Geometry.smallAngleRadians) {
|
|
335
|
+
return Angle.isAlmostEqualRadiansAllowPeriodShift(this._radians, other._radians, radianTol);
|
|
267
336
|
}
|
|
268
337
|
/**
|
|
269
|
-
* Test if two
|
|
338
|
+
* Test if two angle (in radians) almost equal, NOT allowing shift by full circle (i.e., multiples of `2 * PI`).
|
|
339
|
+
* @param radiansA first radians value
|
|
340
|
+
* @param radiansB second radians value
|
|
341
|
+
* @param radianTol radian tolerance with default value of Geometry.smallAngleRadians
|
|
270
342
|
*/
|
|
271
|
-
|
|
343
|
+
static isAlmostEqualRadiansNoPeriodShift(radiansA, radiansB, radianTol = Geometry_1.Geometry.smallAngleRadians) {
|
|
344
|
+
return Math.abs(radiansA - radiansB) < radianTol;
|
|
345
|
+
}
|
|
272
346
|
/**
|
|
273
|
-
* Test if two angle
|
|
274
|
-
*
|
|
347
|
+
* Test if two this angle and other are almost equal, NOT allowing shift by full circle (i.e., multiples of `2 * PI`).
|
|
348
|
+
* @param other the other angle
|
|
349
|
+
* @param radianTol radian tolerance with default value of Geometry.smallAngleRadians
|
|
275
350
|
*/
|
|
276
|
-
|
|
351
|
+
isAlmostEqualNoPeriodShift(other, radianTol = Geometry_1.Geometry.smallAngleRadians) {
|
|
352
|
+
return Angle.isAlmostEqualRadiansNoPeriodShift(this._radians, other._radians, radianTol);
|
|
353
|
+
}
|
|
277
354
|
/**
|
|
278
|
-
* Test if two angle
|
|
355
|
+
* Test if two this angle and other are almost equal, NOT allowing shift by full circle (i.e., multiples of `2 * PI`).
|
|
356
|
+
* * This function is same as isAlmostEqualRadiansNoPeriodShift. Please use isAlmostEqualRadiansNoPeriodShift.
|
|
357
|
+
* @param other the other angle
|
|
358
|
+
* @param radianTol radian tolerance with default value of Geometry.smallAngleRadians
|
|
279
359
|
*/
|
|
280
|
-
|
|
360
|
+
isAlmostEqual(other, radianTol = Geometry_1.Geometry.smallAngleRadians) {
|
|
361
|
+
return this.isAlmostEqualNoPeriodShift(other, radianTol);
|
|
362
|
+
}
|
|
281
363
|
/**
|
|
282
364
|
* Test if dot product values indicate non-zero length perpendicular vectors.
|
|
283
365
|
* @param dotUU dot product of vectorU with itself
|
|
@@ -290,40 +372,55 @@ class Angle {
|
|
|
290
372
|
&& dotUV * dotUV <= Geometry_1.Geometry.smallAngleRadiansSquared * dotUU * dotVV;
|
|
291
373
|
}
|
|
292
374
|
/**
|
|
293
|
-
* Return cosine, sine, and radians for the half angle of a cosine,sine pair.
|
|
375
|
+
* Return cosine, sine, and radians for the half angle of a "cosine,sine" pair.
|
|
376
|
+
* * This function assumes the input arguments are related to an angle between -PI and PI
|
|
377
|
+
* * This function returns an angle between -PI and PI
|
|
294
378
|
* @param rCos2A cosine value (scaled by radius) for initial angle.
|
|
295
379
|
* @param rSin2A sine value (scaled by radius) for final angle.
|
|
296
380
|
*/
|
|
297
381
|
static trigValuesToHalfAngleTrigValues(rCos2A, rSin2A) {
|
|
298
382
|
const r = Geometry_1.Geometry.hypotenuseXY(rCos2A, rSin2A);
|
|
299
383
|
if (r < Geometry_1.Geometry.smallMetricDistance) {
|
|
300
|
-
return { c: 1.0, s: 0.0, radians: 0.0 };
|
|
384
|
+
return { c: 1.0, s: 0.0, radians: 0.0 }; // angle = 0
|
|
301
385
|
}
|
|
302
386
|
else {
|
|
303
|
-
/* If the caller really gave you sine and cosine values, r should be 1. However
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
387
|
+
/* If the caller really gave you sine and cosine values, r should be 1. However,
|
|
388
|
+
* to allow scaled values -- e.g. the x and y components of any vector -- we normalize
|
|
389
|
+
* right here. This adds an extra sqrt and 2 divides to the whole process, but improves
|
|
390
|
+
* both the usefulness and robustness of the computation.
|
|
391
|
+
*/
|
|
307
392
|
let cosA;
|
|
308
393
|
let sinA = 0.0;
|
|
309
394
|
const cos2A = rCos2A / r;
|
|
310
395
|
const sin2A = rSin2A / r;
|
|
396
|
+
// Original angle in NE and SE quadrants. Half angle in same quadrant
|
|
311
397
|
if (cos2A >= 0.0) {
|
|
312
|
-
/*
|
|
398
|
+
/*
|
|
399
|
+
* We know cos2A = (cosA)^2 - (sinA)^2 and 1 = (cosA)^2 + (sinA)^2
|
|
400
|
+
* so 1 + cos2A = 2(cosA)^2 and therefore, cosA = sqrt((1+cos2A)/2)
|
|
401
|
+
* cosine is positive in NE and SE quadrants so we use +sqrt
|
|
402
|
+
*/
|
|
313
403
|
cosA = Math.sqrt(0.5 * (1.0 + cos2A));
|
|
314
|
-
sinA = sin2A
|
|
404
|
+
// We know sin2A = 2 sinA cosA so sinA = sin2A/(2*cosA)
|
|
405
|
+
sinA = sin2A / (2.0 * cosA);
|
|
315
406
|
}
|
|
316
407
|
else {
|
|
408
|
+
// Original angle in NW quadrant. Half angle in NE quadrant
|
|
317
409
|
if (sin2A > 0.0) {
|
|
318
|
-
/*
|
|
410
|
+
/*
|
|
411
|
+
* We know cos2A = (cosA)^2 - (sinA)^2 and 1 = (cosA)^2 + (sinA)^2
|
|
412
|
+
* so 1 - cos2A = 2(sinA)^2 and therefore, sinA = sqrt((1-cos2A)/2)
|
|
413
|
+
* sine is positive in NE quadrant so we use +sqrt
|
|
414
|
+
*/
|
|
319
415
|
sinA = Math.sqrt(0.5 * (1.0 - cos2A));
|
|
416
|
+
// Original angle in SW quadrant. Half angle in SE quadrant
|
|
320
417
|
}
|
|
321
418
|
else {
|
|
322
|
-
|
|
323
|
-
/* cosA comes out positive because both sines are negative. */
|
|
419
|
+
// sine is negative in SE quadrant so we use -sqrt
|
|
324
420
|
sinA = -Math.sqrt(0.5 * (1.0 - cos2A));
|
|
325
421
|
}
|
|
326
|
-
cosA = sin2A
|
|
422
|
+
// We know sin2A = 2 sinA cosA so cosA = sin2A/(2*sinA)
|
|
423
|
+
cosA = sin2A / (2.0 * sinA); // always positive
|
|
327
424
|
}
|
|
328
425
|
return { c: cosA, s: sinA, radians: Math.atan2(sinA, cosA) };
|
|
329
426
|
}
|
|
@@ -342,17 +439,24 @@ class Angle {
|
|
|
342
439
|
return value;
|
|
343
440
|
}
|
|
344
441
|
/**
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
442
|
+
* Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
|
|
443
|
+
* an ellipse using x(t) = c + U cos(t) + V sin(t) so U and V are at angle t=0 degree and t=90 degree. The
|
|
444
|
+
* half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
|
|
445
|
+
* * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
|
|
446
|
+
* * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
|
|
447
|
+
* perpendicular to the ellipse.
|
|
448
|
+
* * Then 0 = W(t0).x'(t0) = (U cos(t0) + V sin(t0)).(V cos(t0) - U sin(t0)) = U.V cos(2t0) + 0.5 (V.V - U.U) sin(2t0)
|
|
449
|
+
* implies sin(2t0) / cos(2t0) = 2 U.V / (U.U - V.V), i.e., t0 can be computed given the three dot products on the RHS.
|
|
450
|
+
* @param dotUU dot product of vectorU with itself
|
|
451
|
+
* @param dotVV dot product of vectorV with itself
|
|
452
|
+
* @param dotUV dot product of vectorU with vectorV
|
|
453
|
+
*/
|
|
350
454
|
static dotProductsToHalfAngleTrigValues(dotUU, dotVV, dotUV, favorZero = true) {
|
|
351
|
-
const
|
|
352
|
-
const
|
|
353
|
-
if (favorZero && Math.abs(
|
|
455
|
+
const cos2t0 = dotUU - dotVV;
|
|
456
|
+
const sin2t0 = 2.0 * dotUV;
|
|
457
|
+
if (favorZero && Math.abs(sin2t0) < Geometry_1.Geometry.smallAngleRadians * (Math.abs(dotUU) + Math.abs(dotVV)))
|
|
354
458
|
return { c: 1.0, s: 0.0, radians: 0.0 };
|
|
355
|
-
return Angle.trigValuesToHalfAngleTrigValues(
|
|
459
|
+
return Angle.trigValuesToHalfAngleTrigValues(cos2t0, sin2t0);
|
|
356
460
|
}
|
|
357
461
|
/**
|
|
358
462
|
* * Returns the angle between two vectors, with the vectors given as xyz components
|
|
@@ -366,9 +470,7 @@ class Angle {
|
|
|
366
470
|
* @param vz z component of vector v
|
|
367
471
|
*/
|
|
368
472
|
static radiansBetweenVectorsXYZ(ux, uy, uz, vx, vy, vz) {
|
|
369
|
-
|
|
370
|
-
const uDotV = ux * vx + uy * vy + uz * vz; // magU magV cos(theta)
|
|
371
|
-
// const vv = vx * vx + vy * vy + vz * vz;
|
|
473
|
+
const uDotV = ux * vx + uy * vy + uz * vz;
|
|
372
474
|
return Math.atan2(Geometry_1.Geometry.crossProductMagnitude(ux, uy, uz, vx, vy, vz), uDotV);
|
|
373
475
|
}
|
|
374
476
|
/**
|
|
@@ -386,11 +488,13 @@ class Angle {
|
|
|
386
488
|
}
|
|
387
489
|
}
|
|
388
490
|
exports.Angle = Angle;
|
|
389
|
-
/** maximal accuracy value of pi/
|
|
491
|
+
/** maximal accuracy value of pi/12 (15 degrees), in radians */
|
|
492
|
+
Angle.piOver12Radians = 0.26179938779914943653855361527329;
|
|
493
|
+
/** maximal accuracy value of pi/4 (45 degrees), in radians */
|
|
390
494
|
Angle.piOver4Radians = 7.85398163397448280000e-001;
|
|
391
|
-
/** maximal accuracy value of pi/2 (
|
|
495
|
+
/** maximal accuracy value of pi/2 (90 degrees), in radians */
|
|
392
496
|
Angle.piOver2Radians = 1.57079632679489660000e+000;
|
|
393
|
-
/** maximal accuracy value of pi (
|
|
497
|
+
/** maximal accuracy value of pi (180 degrees), in radians */
|
|
394
498
|
Angle.piRadians = 3.14159265358979310000e+000;
|
|
395
499
|
/** maximal accuracy value of 2*pi (360 degrees), in radians */
|
|
396
500
|
Angle.pi2Radians = 6.28318530717958620000e+000;
|
|
@@ -398,6 +502,4 @@ Angle.pi2Radians = 6.28318530717958620000e+000;
|
|
|
398
502
|
Angle.degreesPerRadian = (45.0 / Angle.piOver4Radians);
|
|
399
503
|
/** scale factor for converting degrees to radians */
|
|
400
504
|
Angle.radiansPerDegree = (Angle.piOver4Radians / 45.0);
|
|
401
|
-
/** maximal accuracy value of pi/12 ( 15 degrees), in radians */
|
|
402
|
-
Angle.piOver12Radians = 0.26179938779914943653855361527329;
|
|
403
505
|
//# sourceMappingURL=Angle.js.map
|