@itwin/core-geometry 5.0.0-dev.9 → 5.0.0-dev.90

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.
Files changed (1004) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/lib/cjs/Constant.js +17 -17
  3. package/lib/cjs/Constant.js.map +1 -1
  4. package/lib/cjs/Geometry.d.ts +2 -4
  5. package/lib/cjs/Geometry.d.ts.map +1 -1
  6. package/lib/cjs/Geometry.js +37 -39
  7. package/lib/cjs/Geometry.js.map +1 -1
  8. package/lib/cjs/bspline/AkimaCurve3d.js +3 -1
  9. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  10. package/lib/cjs/bspline/BSpline1dNd.d.ts +90 -54
  11. package/lib/cjs/bspline/BSpline1dNd.d.ts.map +1 -1
  12. package/lib/cjs/bspline/BSpline1dNd.js +137 -84
  13. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  14. package/lib/cjs/bspline/BSplineCurve.d.ts +193 -155
  15. package/lib/cjs/bspline/BSplineCurve.d.ts.map +1 -1
  16. package/lib/cjs/bspline/BSplineCurve.js +249 -181
  17. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  18. package/lib/cjs/bspline/BSplineCurve3dH.js +1 -0
  19. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  20. package/lib/cjs/bspline/BSplineCurveOps.d.ts.map +1 -1
  21. package/lib/cjs/bspline/BSplineCurveOps.js +18 -21
  22. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  23. package/lib/cjs/bspline/BSplineSurface.js +22 -2
  24. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  25. package/lib/cjs/bspline/Bezier1dNd.js +6 -0
  26. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  27. package/lib/cjs/bspline/BezierCurve3d.d.ts +3 -1
  28. package/lib/cjs/bspline/BezierCurve3d.d.ts.map +1 -1
  29. package/lib/cjs/bspline/BezierCurve3d.js +5 -5
  30. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  31. package/lib/cjs/bspline/BezierCurve3dH.js +2 -0
  32. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  33. package/lib/cjs/bspline/BezierCurveBase.d.ts.map +1 -1
  34. package/lib/cjs/bspline/BezierCurveBase.js +21 -2
  35. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  36. package/lib/cjs/bspline/InterpolationCurve3d.js +12 -1
  37. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  38. package/lib/cjs/bspline/KnotVector.d.ts +82 -60
  39. package/lib/cjs/bspline/KnotVector.d.ts.map +1 -1
  40. package/lib/cjs/bspline/KnotVector.js +144 -84
  41. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  42. package/lib/cjs/bspline/SurfaceLocationDetail.js +12 -0
  43. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  44. package/lib/cjs/clipping/AlternatingConvexClipTree.js +14 -13
  45. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  46. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  47. package/lib/cjs/clipping/BooleanClipNode.js +4 -0
  48. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  49. package/lib/cjs/clipping/ClipPlane.js +10 -1
  50. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  51. package/lib/cjs/clipping/ClipPrimitive.js +19 -0
  52. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  53. package/lib/cjs/clipping/ClipUtils.js +5 -1
  54. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  55. package/lib/cjs/clipping/ClipVector.js +11 -8
  56. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  57. package/lib/cjs/clipping/ConvexClipPlaneSet.js +5 -3
  58. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  59. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  60. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  61. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  62. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  63. package/lib/cjs/core-geometry.d.ts +1 -0
  64. package/lib/cjs/core-geometry.d.ts.map +1 -1
  65. package/lib/cjs/core-geometry.js +1 -0
  66. package/lib/cjs/core-geometry.js.map +1 -1
  67. package/lib/cjs/curve/Arc3d.d.ts +17 -3
  68. package/lib/cjs/curve/Arc3d.d.ts.map +1 -1
  69. package/lib/cjs/curve/Arc3d.js +50 -21
  70. package/lib/cjs/curve/Arc3d.js.map +1 -1
  71. package/lib/cjs/curve/ConstructCurveBetweenCurves.js +3 -0
  72. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  73. package/lib/cjs/curve/CoordinateXYZ.js +3 -2
  74. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  75. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  76. package/lib/cjs/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  77. package/lib/cjs/curve/CurveChainWithDistanceIndex.js +25 -10
  78. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  79. package/lib/cjs/curve/CurveCollection.d.ts +10 -0
  80. package/lib/cjs/curve/CurveCollection.d.ts.map +1 -1
  81. package/lib/cjs/curve/CurveCollection.js +35 -9
  82. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  83. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  84. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  85. package/lib/cjs/curve/CurveFactory.d.ts +87 -53
  86. package/lib/cjs/curve/CurveFactory.d.ts.map +1 -1
  87. package/lib/cjs/curve/CurveFactory.js +213 -135
  88. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  89. package/lib/cjs/curve/CurveLocationDetail.js +44 -0
  90. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  91. package/lib/cjs/curve/CurveOps.js.map +1 -1
  92. package/lib/cjs/curve/CurvePrimitive.d.ts +7 -10
  93. package/lib/cjs/curve/CurvePrimitive.d.ts.map +1 -1
  94. package/lib/cjs/curve/CurvePrimitive.js +27 -12
  95. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  96. package/lib/cjs/curve/CurveProcessor.js +2 -0
  97. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  98. package/lib/cjs/curve/CurveTypes.js.map +1 -1
  99. package/lib/cjs/curve/CurveWireMomentsXYZ.js +2 -0
  100. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  101. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  102. package/lib/cjs/curve/LineSegment3d.js +6 -2
  103. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  104. package/lib/cjs/curve/LineString3d.js +27 -7
  105. package/lib/cjs/curve/LineString3d.js.map +1 -1
  106. package/lib/cjs/curve/Loop.js +12 -4
  107. package/lib/cjs/curve/Loop.js.map +1 -1
  108. package/lib/cjs/curve/OffsetOptions.js +25 -21
  109. package/lib/cjs/curve/OffsetOptions.js.map +1 -1
  110. package/lib/cjs/curve/ParityRegion.js +4 -2
  111. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  112. package/lib/cjs/curve/Path.js +2 -2
  113. package/lib/cjs/curve/Path.js.map +1 -1
  114. package/lib/cjs/curve/PointString3d.js +3 -2
  115. package/lib/cjs/curve/PointString3d.js.map +1 -1
  116. package/lib/cjs/curve/ProxyCurve.js +1 -0
  117. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  118. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  119. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  120. package/lib/cjs/curve/Query/CurveSplitContext.js +3 -0
  121. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  122. package/lib/cjs/curve/Query/CylindricalRange.js +6 -2
  123. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  124. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  125. package/lib/cjs/curve/Query/PlanarSubdivision.js +4 -6
  126. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  127. package/lib/cjs/curve/Query/StrokeCountChain.js +12 -0
  128. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  129. package/lib/cjs/curve/Query/StrokeCountMap.js +14 -0
  130. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  131. package/lib/cjs/curve/RegionMomentsXY.js +4 -5
  132. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  133. package/lib/cjs/curve/RegionOps.js +9 -10
  134. package/lib/cjs/curve/RegionOps.js.map +1 -1
  135. package/lib/cjs/curve/RegionOpsClassificationSweeps.js +24 -1
  136. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  137. package/lib/cjs/curve/StrokeOptions.d.ts +4 -4
  138. package/lib/cjs/curve/StrokeOptions.d.ts.map +1 -1
  139. package/lib/cjs/curve/StrokeOptions.js +23 -6
  140. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  141. package/lib/cjs/curve/UnionRegion.js +4 -2
  142. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  143. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  144. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  145. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js +6 -0
  146. package/lib/cjs/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  147. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js +2 -0
  148. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  149. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  150. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  151. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  152. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  153. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  154. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  155. package/lib/cjs/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  156. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  157. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  158. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  159. package/lib/cjs/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  160. package/lib/cjs/curve/internalContexts/CurveLengthContext.js +6 -0
  161. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  162. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  163. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  164. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  165. package/lib/cjs/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  166. package/lib/cjs/curve/internalContexts/GapSearchContext.js +1 -0
  167. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  168. package/lib/cjs/curve/internalContexts/MultiChainCollector.js +12 -0
  169. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  170. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  171. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  172. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  173. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  174. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js +22 -4
  175. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  176. package/lib/cjs/curve/internalContexts/SumLengthsContext.js +1 -0
  177. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  178. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js +3 -0
  179. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  180. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  181. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  182. package/lib/cjs/curve/spiral/ClothoidSeries.js +4 -0
  183. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  184. package/lib/cjs/curve/spiral/CubicEvaluator.js +2 -0
  185. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  186. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js +4 -0
  187. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  188. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  189. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  190. package/lib/cjs/curve/spiral/DirectSpiral3d.js +12 -2
  191. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  192. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js +24 -4
  193. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  194. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  195. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  196. package/lib/cjs/curve/spiral/NormalizedTransition.js +5 -0
  197. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  198. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  199. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  200. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js +10 -0
  201. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  202. package/lib/cjs/curve/spiral/TransitionSpiral3d.js +10 -0
  203. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  204. package/lib/cjs/curve/spiral/XYCurveEvaluator.js +6 -0
  205. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  206. package/lib/cjs/geometry3d/Angle.js +18 -16
  207. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  208. package/lib/cjs/geometry3d/AngleSweep.d.ts +7 -2
  209. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  210. package/lib/cjs/geometry3d/AngleSweep.js +14 -2
  211. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  212. package/lib/cjs/geometry3d/BarycentricTriangle.js +25 -0
  213. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  214. package/lib/cjs/geometry3d/BilinearPatch.js +8 -0
  215. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  216. package/lib/cjs/geometry3d/CoincidentGeometryOps.js +5 -0
  217. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  218. package/lib/cjs/geometry3d/Ellipsoid.js +48 -0
  219. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  220. package/lib/cjs/geometry3d/FrameBuilder.js +12 -4
  221. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  222. package/lib/cjs/geometry3d/FrustumAnimation.js +7 -0
  223. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  224. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  225. package/lib/cjs/geometry3d/GrowableBlockedArray.js +12 -0
  226. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  227. package/lib/cjs/geometry3d/GrowableFloat64Array.js +3 -0
  228. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  229. package/lib/cjs/geometry3d/GrowableXYArray.d.ts +0 -5
  230. package/lib/cjs/geometry3d/GrowableXYArray.d.ts.map +1 -1
  231. package/lib/cjs/geometry3d/GrowableXYArray.js +16 -7
  232. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  233. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts +32 -10
  234. package/lib/cjs/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  235. package/lib/cjs/geometry3d/GrowableXYZArray.js +70 -16
  236. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  237. package/lib/cjs/geometry3d/IndexedCollectionInterval.js +6 -0
  238. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  239. package/lib/cjs/geometry3d/IndexedXYCollection.js +1 -0
  240. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  241. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts +13 -2
  242. package/lib/cjs/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  243. package/lib/cjs/geometry3d/IndexedXYZCollection.js +26 -11
  244. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  245. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  246. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  247. package/lib/cjs/geometry3d/Matrix3d.d.ts +3 -4
  248. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  249. package/lib/cjs/geometry3d/Matrix3d.js +36 -14
  250. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  251. package/lib/cjs/geometry3d/OrderedRotationAngles.js +10 -2
  252. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  253. package/lib/cjs/geometry3d/Plane3d.js.map +1 -1
  254. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  255. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  256. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  257. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  258. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +2 -0
  259. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  260. package/lib/cjs/geometry3d/Point2dVector2d.js +4 -0
  261. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  262. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +3 -1
  263. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  264. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +7 -10
  265. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  266. package/lib/cjs/geometry3d/Point3dVector3d.js +16 -10
  267. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  268. package/lib/cjs/geometry3d/PointHelpers.d.ts +4 -4
  269. package/lib/cjs/geometry3d/PointHelpers.d.ts.map +1 -1
  270. package/lib/cjs/geometry3d/PointHelpers.js +8 -8
  271. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  272. package/lib/cjs/geometry3d/PointStreaming.js +12 -4
  273. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  274. package/lib/cjs/geometry3d/PolygonOps.d.ts +2 -2
  275. package/lib/cjs/geometry3d/PolygonOps.js +62 -25
  276. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  277. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  278. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  279. package/lib/cjs/geometry3d/PolylineOps.d.ts +9 -5
  280. package/lib/cjs/geometry3d/PolylineOps.d.ts.map +1 -1
  281. package/lib/cjs/geometry3d/PolylineOps.js +12 -5
  282. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  283. package/lib/cjs/geometry3d/Range.js +21 -4
  284. package/lib/cjs/geometry3d/Range.js.map +1 -1
  285. package/lib/cjs/geometry3d/Ray2d.js +2 -0
  286. package/lib/cjs/geometry3d/Ray2d.js.map +1 -1
  287. package/lib/cjs/geometry3d/Ray3d.d.ts +2 -2
  288. package/lib/cjs/geometry3d/Ray3d.d.ts.map +1 -1
  289. package/lib/cjs/geometry3d/Ray3d.js +20 -11
  290. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  291. package/lib/cjs/geometry3d/ReusableObjectCache.js +4 -0
  292. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  293. package/lib/cjs/geometry3d/Segment1d.js +4 -0
  294. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  295. package/lib/cjs/geometry3d/SortablePolygon.js +11 -0
  296. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  297. package/lib/cjs/geometry3d/Transform.d.ts +1 -1
  298. package/lib/cjs/geometry3d/Transform.js +4 -1
  299. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  300. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  301. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  302. package/lib/cjs/geometry3d/YawPitchRollAngles.js +6 -0
  303. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  304. package/lib/cjs/geometry4d/Map4d.js +2 -0
  305. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  306. package/lib/cjs/geometry4d/Matrix4d.js +1 -0
  307. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  308. package/lib/cjs/geometry4d/MomentData.d.ts +72 -73
  309. package/lib/cjs/geometry4d/MomentData.d.ts.map +1 -1
  310. package/lib/cjs/geometry4d/MomentData.js +90 -66
  311. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  312. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  313. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  314. package/lib/cjs/geometry4d/Point4d.js +2 -0
  315. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  316. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  317. package/lib/cjs/numerics/BezierPolynomials.js +8 -0
  318. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  319. package/lib/cjs/numerics/ClusterableArray.js +29 -13
  320. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  321. package/lib/cjs/numerics/Complex.js +2 -0
  322. package/lib/cjs/numerics/Complex.js.map +1 -1
  323. package/lib/cjs/numerics/ConvexPolygon2d.js +3 -0
  324. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  325. package/lib/cjs/numerics/Newton.js +59 -4
  326. package/lib/cjs/numerics/Newton.js.map +1 -1
  327. package/lib/cjs/numerics/PascalCoefficients.js +1 -1
  328. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  329. package/lib/cjs/numerics/PolarData.js +13 -1
  330. package/lib/cjs/numerics/PolarData.js.map +1 -1
  331. package/lib/cjs/numerics/Polynomials.js +64 -26
  332. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  333. package/lib/cjs/numerics/Quadrature.js +26 -20
  334. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  335. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  336. package/lib/cjs/numerics/SmallSystem.js.map +1 -1
  337. package/lib/cjs/numerics/TriDiagonalSystem.js +11 -0
  338. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  339. package/lib/cjs/numerics/UnionFind.js +1 -0
  340. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  341. package/lib/cjs/numerics/UsageSums.js +10 -0
  342. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  343. package/lib/cjs/polyface/AuxData.js +16 -0
  344. package/lib/cjs/polyface/AuxData.js.map +1 -1
  345. package/lib/cjs/polyface/BoxTopology.js +67 -67
  346. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  347. package/lib/cjs/polyface/FacetFaceData.d.ts +1 -1
  348. package/lib/cjs/polyface/FacetFaceData.js +3 -1
  349. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  350. package/lib/cjs/polyface/FacetLocationDetail.js +30 -0
  351. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  352. package/lib/cjs/polyface/FacetOrientation.js +12 -1
  353. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  354. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  355. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  356. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts +33 -23
  357. package/lib/cjs/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  358. package/lib/cjs/polyface/IndexedEdgeMatcher.js +63 -33
  359. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  360. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  361. package/lib/cjs/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  362. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js +11 -2
  363. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  364. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  365. package/lib/cjs/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  366. package/lib/cjs/polyface/IndexedPolyfaceWalker.js +353 -0
  367. package/lib/cjs/polyface/IndexedPolyfaceWalker.js.map +1 -0
  368. package/lib/cjs/polyface/Polyface.d.ts +35 -10
  369. package/lib/cjs/polyface/Polyface.d.ts.map +1 -1
  370. package/lib/cjs/polyface/Polyface.js +73 -12
  371. package/lib/cjs/polyface/Polyface.js.map +1 -1
  372. package/lib/cjs/polyface/PolyfaceBuilder.d.ts +14 -27
  373. package/lib/cjs/polyface/PolyfaceBuilder.d.ts.map +1 -1
  374. package/lib/cjs/polyface/PolyfaceBuilder.js +47 -79
  375. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  376. package/lib/cjs/polyface/PolyfaceClip.js +8 -0
  377. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  378. package/lib/cjs/polyface/PolyfaceData.d.ts +28 -0
  379. package/lib/cjs/polyface/PolyfaceData.d.ts.map +1 -1
  380. package/lib/cjs/polyface/PolyfaceData.js +87 -5
  381. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  382. package/lib/cjs/polyface/PolyfaceQuery.js +47 -7
  383. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  384. package/lib/cjs/polyface/RangeLengthData.js +7 -0
  385. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  386. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  387. package/lib/cjs/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  388. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js +5 -2
  389. package/lib/cjs/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  390. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  391. package/lib/cjs/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  392. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  393. package/lib/cjs/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  394. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js +5 -0
  395. package/lib/cjs/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  396. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  397. package/lib/cjs/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  398. package/lib/cjs/polyface/TaggedNumericData.js +8 -0
  399. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  400. package/lib/cjs/polyface/TriangleCandidate.js +3 -0
  401. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  402. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  403. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  404. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  405. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  406. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  407. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  408. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  409. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  410. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js +32 -0
  411. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  412. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  413. package/lib/cjs/polyface/multiclip/RangeSearch.js +5 -5
  414. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  415. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  416. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  417. package/lib/cjs/polyface/multiclip/XYPointBuckets.js +6 -0
  418. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  419. package/lib/cjs/serialization/BGFBAccessors.js +82 -164
  420. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  421. package/lib/cjs/serialization/BGFBReader.js +22 -22
  422. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  423. package/lib/cjs/serialization/BGFBWriter.js +1 -0
  424. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  425. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  426. package/lib/cjs/serialization/DeepCompare.js +17 -17
  427. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  428. package/lib/cjs/serialization/GeometrySamples.d.ts +5 -5
  429. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  430. package/lib/cjs/serialization/GeometrySamples.js +113 -112
  431. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  432. package/lib/cjs/serialization/IModelJsonSchema.d.ts +70 -63
  433. package/lib/cjs/serialization/IModelJsonSchema.d.ts.map +1 -1
  434. package/lib/cjs/serialization/IModelJsonSchema.js +87 -74
  435. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  436. package/lib/cjs/serialization/SerializationHelpers.js.map +1 -1
  437. package/lib/cjs/solid/Box.js +7 -2
  438. package/lib/cjs/solid/Box.js.map +1 -1
  439. package/lib/cjs/solid/Cone.d.ts +39 -14
  440. package/lib/cjs/solid/Cone.d.ts.map +1 -1
  441. package/lib/cjs/solid/Cone.js +52 -16
  442. package/lib/cjs/solid/Cone.js.map +1 -1
  443. package/lib/cjs/solid/LinearSweep.js +4 -2
  444. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  445. package/lib/cjs/solid/RotationalSweep.js +5 -2
  446. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  447. package/lib/cjs/solid/RuledSweep.d.ts +26 -23
  448. package/lib/cjs/solid/RuledSweep.d.ts.map +1 -1
  449. package/lib/cjs/solid/RuledSweep.js +32 -24
  450. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  451. package/lib/cjs/solid/SolidPrimitive.d.ts +12 -11
  452. package/lib/cjs/solid/SolidPrimitive.d.ts.map +1 -1
  453. package/lib/cjs/solid/SolidPrimitive.js +11 -6
  454. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  455. package/lib/cjs/solid/Sphere.d.ts +34 -17
  456. package/lib/cjs/solid/Sphere.d.ts.map +1 -1
  457. package/lib/cjs/solid/Sphere.js +51 -24
  458. package/lib/cjs/solid/Sphere.js.map +1 -1
  459. package/lib/cjs/solid/SweepContour.d.ts +24 -15
  460. package/lib/cjs/solid/SweepContour.d.ts.map +1 -1
  461. package/lib/cjs/solid/SweepContour.js +33 -15
  462. package/lib/cjs/solid/SweepContour.js.map +1 -1
  463. package/lib/cjs/solid/TorusPipe.js +7 -2
  464. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  465. package/lib/cjs/topology/ChainMerge.js +16 -4
  466. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  467. package/lib/cjs/topology/Graph.js +41 -6
  468. package/lib/cjs/topology/Graph.js.map +1 -1
  469. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  470. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  471. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  472. package/lib/cjs/topology/HalfEdgeGraphSearch.js +2 -0
  473. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  474. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js +9 -2
  475. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  476. package/lib/cjs/topology/HalfEdgeGraphValidation.js +7 -9
  477. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  478. package/lib/cjs/topology/HalfEdgeMarkSet.js +5 -0
  479. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  480. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js +6 -0
  481. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  482. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js +1 -0
  483. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  484. package/lib/cjs/topology/HalfEdgePositionDetail.js +16 -0
  485. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  486. package/lib/cjs/topology/HalfEdgePriorityQueue.js +2 -0
  487. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  488. package/lib/cjs/topology/InsertAndRetriangulateContext.js +4 -0
  489. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  490. package/lib/cjs/topology/MaskManager.js +3 -0
  491. package/lib/cjs/topology/MaskManager.js.map +1 -1
  492. package/lib/cjs/topology/Merging.js +11 -6
  493. package/lib/cjs/topology/Merging.js.map +1 -1
  494. package/lib/cjs/topology/RegularizeFace.js +22 -0
  495. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  496. package/lib/cjs/topology/SignedDataSummary.js +22 -0
  497. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  498. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  499. package/lib/cjs/topology/Triangulation.js +21 -11
  500. package/lib/cjs/topology/Triangulation.js.map +1 -1
  501. package/lib/cjs/topology/XYParitySearchContext.js +13 -0
  502. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  503. package/lib/esm/Constant.js +17 -17
  504. package/lib/esm/Constant.js.map +1 -1
  505. package/lib/esm/Geometry.d.ts +2 -4
  506. package/lib/esm/Geometry.d.ts.map +1 -1
  507. package/lib/esm/Geometry.js +37 -39
  508. package/lib/esm/Geometry.js.map +1 -1
  509. package/lib/esm/bspline/AkimaCurve3d.js +3 -1
  510. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  511. package/lib/esm/bspline/BSpline1dNd.d.ts +90 -54
  512. package/lib/esm/bspline/BSpline1dNd.d.ts.map +1 -1
  513. package/lib/esm/bspline/BSpline1dNd.js +137 -84
  514. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  515. package/lib/esm/bspline/BSplineCurve.d.ts +193 -155
  516. package/lib/esm/bspline/BSplineCurve.d.ts.map +1 -1
  517. package/lib/esm/bspline/BSplineCurve.js +249 -181
  518. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  519. package/lib/esm/bspline/BSplineCurve3dH.js +1 -0
  520. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  521. package/lib/esm/bspline/BSplineCurveOps.d.ts.map +1 -1
  522. package/lib/esm/bspline/BSplineCurveOps.js +18 -21
  523. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  524. package/lib/esm/bspline/BSplineSurface.js +22 -2
  525. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  526. package/lib/esm/bspline/Bezier1dNd.js +6 -0
  527. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  528. package/lib/esm/bspline/BezierCurve3d.d.ts +3 -1
  529. package/lib/esm/bspline/BezierCurve3d.d.ts.map +1 -1
  530. package/lib/esm/bspline/BezierCurve3d.js +5 -5
  531. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  532. package/lib/esm/bspline/BezierCurve3dH.js +2 -0
  533. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  534. package/lib/esm/bspline/BezierCurveBase.d.ts.map +1 -1
  535. package/lib/esm/bspline/BezierCurveBase.js +21 -2
  536. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  537. package/lib/esm/bspline/InterpolationCurve3d.js +12 -1
  538. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  539. package/lib/esm/bspline/KnotVector.d.ts +82 -60
  540. package/lib/esm/bspline/KnotVector.d.ts.map +1 -1
  541. package/lib/esm/bspline/KnotVector.js +144 -84
  542. package/lib/esm/bspline/KnotVector.js.map +1 -1
  543. package/lib/esm/bspline/SurfaceLocationDetail.js +12 -0
  544. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  545. package/lib/esm/clipping/AlternatingConvexClipTree.js +14 -13
  546. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  547. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  548. package/lib/esm/clipping/BooleanClipNode.js +4 -0
  549. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  550. package/lib/esm/clipping/ClipPlane.js +10 -1
  551. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  552. package/lib/esm/clipping/ClipPrimitive.js +19 -0
  553. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  554. package/lib/esm/clipping/ClipUtils.js +5 -1
  555. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  556. package/lib/esm/clipping/ClipVector.js +11 -8
  557. package/lib/esm/clipping/ClipVector.js.map +1 -1
  558. package/lib/esm/clipping/ConvexClipPlaneSet.js +5 -3
  559. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  560. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js +2 -1
  561. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  562. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js +3 -0
  563. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  564. package/lib/esm/core-geometry.d.ts +1 -0
  565. package/lib/esm/core-geometry.d.ts.map +1 -1
  566. package/lib/esm/core-geometry.js +1 -0
  567. package/lib/esm/core-geometry.js.map +1 -1
  568. package/lib/esm/curve/Arc3d.d.ts +17 -3
  569. package/lib/esm/curve/Arc3d.d.ts.map +1 -1
  570. package/lib/esm/curve/Arc3d.js +50 -21
  571. package/lib/esm/curve/Arc3d.js.map +1 -1
  572. package/lib/esm/curve/ConstructCurveBetweenCurves.js +3 -0
  573. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  574. package/lib/esm/curve/CoordinateXYZ.js +3 -2
  575. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  576. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts +0 -2
  577. package/lib/esm/curve/CurveChainWithDistanceIndex.d.ts.map +1 -1
  578. package/lib/esm/curve/CurveChainWithDistanceIndex.js +25 -10
  579. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  580. package/lib/esm/curve/CurveCollection.d.ts +10 -0
  581. package/lib/esm/curve/CurveCollection.d.ts.map +1 -1
  582. package/lib/esm/curve/CurveCollection.js +35 -9
  583. package/lib/esm/curve/CurveCollection.js.map +1 -1
  584. package/lib/esm/curve/CurveCurve.js.map +1 -1
  585. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  586. package/lib/esm/curve/CurveFactory.d.ts +87 -53
  587. package/lib/esm/curve/CurveFactory.d.ts.map +1 -1
  588. package/lib/esm/curve/CurveFactory.js +213 -135
  589. package/lib/esm/curve/CurveFactory.js.map +1 -1
  590. package/lib/esm/curve/CurveLocationDetail.js +44 -0
  591. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  592. package/lib/esm/curve/CurveOps.js.map +1 -1
  593. package/lib/esm/curve/CurvePrimitive.d.ts +7 -10
  594. package/lib/esm/curve/CurvePrimitive.d.ts.map +1 -1
  595. package/lib/esm/curve/CurvePrimitive.js +27 -12
  596. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  597. package/lib/esm/curve/CurveProcessor.js +2 -0
  598. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  599. package/lib/esm/curve/CurveTypes.js.map +1 -1
  600. package/lib/esm/curve/CurveWireMomentsXYZ.js +2 -0
  601. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  602. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  603. package/lib/esm/curve/LineSegment3d.js +6 -2
  604. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  605. package/lib/esm/curve/LineString3d.js +27 -7
  606. package/lib/esm/curve/LineString3d.js.map +1 -1
  607. package/lib/esm/curve/Loop.js +12 -4
  608. package/lib/esm/curve/Loop.js.map +1 -1
  609. package/lib/esm/curve/OffsetOptions.js +25 -21
  610. package/lib/esm/curve/OffsetOptions.js.map +1 -1
  611. package/lib/esm/curve/ParityRegion.js +4 -2
  612. package/lib/esm/curve/ParityRegion.js.map +1 -1
  613. package/lib/esm/curve/Path.js +2 -2
  614. package/lib/esm/curve/Path.js.map +1 -1
  615. package/lib/esm/curve/PointString3d.js +3 -2
  616. package/lib/esm/curve/PointString3d.js.map +1 -1
  617. package/lib/esm/curve/ProxyCurve.js +1 -0
  618. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  619. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js +1 -0
  620. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  621. package/lib/esm/curve/Query/CurveSplitContext.js +3 -0
  622. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  623. package/lib/esm/curve/Query/CylindricalRange.js +6 -2
  624. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  625. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  626. package/lib/esm/curve/Query/PlanarSubdivision.js +4 -6
  627. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  628. package/lib/esm/curve/Query/StrokeCountChain.js +12 -0
  629. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  630. package/lib/esm/curve/Query/StrokeCountMap.js +14 -0
  631. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  632. package/lib/esm/curve/RegionMomentsXY.js +4 -5
  633. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  634. package/lib/esm/curve/RegionOps.js +9 -10
  635. package/lib/esm/curve/RegionOps.js.map +1 -1
  636. package/lib/esm/curve/RegionOpsClassificationSweeps.js +24 -1
  637. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  638. package/lib/esm/curve/StrokeOptions.d.ts +4 -4
  639. package/lib/esm/curve/StrokeOptions.d.ts.map +1 -1
  640. package/lib/esm/curve/StrokeOptions.js +23 -6
  641. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  642. package/lib/esm/curve/UnionRegion.js +4 -2
  643. package/lib/esm/curve/UnionRegion.js.map +1 -1
  644. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js +13 -7
  645. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  646. package/lib/esm/curve/internalContexts/ChainCollectorContext.js +6 -0
  647. package/lib/esm/curve/internalContexts/ChainCollectorContext.js.map +1 -1
  648. package/lib/esm/curve/internalContexts/CloneCurvesContext.js +2 -0
  649. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  650. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  651. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js +13 -5
  652. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  653. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js +3 -0
  654. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  655. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js +18 -5
  656. package/lib/esm/curve/internalContexts/CurveCurveCloseApproachXY.js.map +1 -1
  657. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js +26 -13
  658. package/lib/esm/curve/internalContexts/CurveCurveIntersectXY.js.map +1 -1
  659. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js +11 -5
  660. package/lib/esm/curve/internalContexts/CurveCurveIntersectXYZ.js.map +1 -1
  661. package/lib/esm/curve/internalContexts/CurveLengthContext.js +6 -0
  662. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  663. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js +8 -6
  664. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  665. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js +38 -5
  666. package/lib/esm/curve/internalContexts/EllipticalArcApproximationContext.js.map +1 -1
  667. package/lib/esm/curve/internalContexts/GapSearchContext.js +1 -0
  668. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  669. package/lib/esm/curve/internalContexts/MultiChainCollector.js +12 -0
  670. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  671. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js +1 -0
  672. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  673. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js +7 -0
  674. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  675. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js +22 -4
  676. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  677. package/lib/esm/curve/internalContexts/SumLengthsContext.js +1 -0
  678. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  679. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js +3 -0
  680. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  681. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js +2 -0
  682. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  683. package/lib/esm/curve/spiral/ClothoidSeries.js +4 -0
  684. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  685. package/lib/esm/curve/spiral/CubicEvaluator.js +2 -0
  686. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  687. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js +4 -0
  688. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  689. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js +5 -0
  690. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  691. package/lib/esm/curve/spiral/DirectSpiral3d.js +12 -2
  692. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  693. package/lib/esm/curve/spiral/IntegratedSpiral3d.js +24 -4
  694. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  695. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js +2 -0
  696. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  697. package/lib/esm/curve/spiral/NormalizedTransition.js +5 -0
  698. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  699. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js +2 -0
  700. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  701. package/lib/esm/curve/spiral/TransitionConditionalProperties.js +10 -0
  702. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  703. package/lib/esm/curve/spiral/TransitionSpiral3d.js +10 -0
  704. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  705. package/lib/esm/curve/spiral/XYCurveEvaluator.js +6 -0
  706. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  707. package/lib/esm/geometry3d/Angle.js +18 -16
  708. package/lib/esm/geometry3d/Angle.js.map +1 -1
  709. package/lib/esm/geometry3d/AngleSweep.d.ts +7 -2
  710. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  711. package/lib/esm/geometry3d/AngleSweep.js +14 -2
  712. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  713. package/lib/esm/geometry3d/BarycentricTriangle.js +25 -0
  714. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  715. package/lib/esm/geometry3d/BilinearPatch.js +8 -0
  716. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  717. package/lib/esm/geometry3d/CoincidentGeometryOps.js +5 -0
  718. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  719. package/lib/esm/geometry3d/Ellipsoid.js +48 -0
  720. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  721. package/lib/esm/geometry3d/FrameBuilder.js +12 -4
  722. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  723. package/lib/esm/geometry3d/FrustumAnimation.js +7 -0
  724. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  725. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  726. package/lib/esm/geometry3d/GrowableBlockedArray.js +12 -0
  727. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  728. package/lib/esm/geometry3d/GrowableFloat64Array.js +3 -0
  729. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  730. package/lib/esm/geometry3d/GrowableXYArray.d.ts +0 -5
  731. package/lib/esm/geometry3d/GrowableXYArray.d.ts.map +1 -1
  732. package/lib/esm/geometry3d/GrowableXYArray.js +16 -7
  733. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  734. package/lib/esm/geometry3d/GrowableXYZArray.d.ts +32 -10
  735. package/lib/esm/geometry3d/GrowableXYZArray.d.ts.map +1 -1
  736. package/lib/esm/geometry3d/GrowableXYZArray.js +70 -16
  737. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  738. package/lib/esm/geometry3d/IndexedCollectionInterval.js +6 -0
  739. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  740. package/lib/esm/geometry3d/IndexedXYCollection.js +1 -0
  741. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  742. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts +13 -2
  743. package/lib/esm/geometry3d/IndexedXYZCollection.d.ts.map +1 -1
  744. package/lib/esm/geometry3d/IndexedXYZCollection.js +26 -11
  745. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  746. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js +3 -0
  747. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  748. package/lib/esm/geometry3d/Matrix3d.d.ts +3 -4
  749. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  750. package/lib/esm/geometry3d/Matrix3d.js +36 -14
  751. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  752. package/lib/esm/geometry3d/OrderedRotationAngles.js +10 -2
  753. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  754. package/lib/esm/geometry3d/Plane3d.js.map +1 -1
  755. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js +2 -0
  756. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  757. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js +7 -0
  758. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  759. package/lib/esm/geometry3d/Point2dArrayCarrier.js +2 -0
  760. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  761. package/lib/esm/geometry3d/Point2dVector2d.js +4 -0
  762. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  763. package/lib/esm/geometry3d/Point3dArrayCarrier.js +3 -1
  764. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  765. package/lib/esm/geometry3d/Point3dVector3d.d.ts +7 -10
  766. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  767. package/lib/esm/geometry3d/Point3dVector3d.js +16 -10
  768. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  769. package/lib/esm/geometry3d/PointHelpers.d.ts +4 -4
  770. package/lib/esm/geometry3d/PointHelpers.d.ts.map +1 -1
  771. package/lib/esm/geometry3d/PointHelpers.js +8 -8
  772. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  773. package/lib/esm/geometry3d/PointStreaming.js +12 -4
  774. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  775. package/lib/esm/geometry3d/PolygonOps.d.ts +2 -2
  776. package/lib/esm/geometry3d/PolygonOps.js +62 -25
  777. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  778. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js +7 -3
  779. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  780. package/lib/esm/geometry3d/PolylineOps.d.ts +9 -5
  781. package/lib/esm/geometry3d/PolylineOps.d.ts.map +1 -1
  782. package/lib/esm/geometry3d/PolylineOps.js +12 -5
  783. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  784. package/lib/esm/geometry3d/Range.js +21 -4
  785. package/lib/esm/geometry3d/Range.js.map +1 -1
  786. package/lib/esm/geometry3d/Ray2d.js +2 -0
  787. package/lib/esm/geometry3d/Ray2d.js.map +1 -1
  788. package/lib/esm/geometry3d/Ray3d.d.ts +2 -2
  789. package/lib/esm/geometry3d/Ray3d.d.ts.map +1 -1
  790. package/lib/esm/geometry3d/Ray3d.js +20 -11
  791. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  792. package/lib/esm/geometry3d/ReusableObjectCache.js +4 -0
  793. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  794. package/lib/esm/geometry3d/Segment1d.js +4 -0
  795. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  796. package/lib/esm/geometry3d/SortablePolygon.js +11 -0
  797. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  798. package/lib/esm/geometry3d/Transform.d.ts +1 -1
  799. package/lib/esm/geometry3d/Transform.js +4 -1
  800. package/lib/esm/geometry3d/Transform.js.map +1 -1
  801. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  802. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  803. package/lib/esm/geometry3d/YawPitchRollAngles.js +6 -0
  804. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  805. package/lib/esm/geometry4d/Map4d.js +2 -0
  806. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  807. package/lib/esm/geometry4d/Matrix4d.js +1 -0
  808. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  809. package/lib/esm/geometry4d/MomentData.d.ts +72 -73
  810. package/lib/esm/geometry4d/MomentData.d.ts.map +1 -1
  811. package/lib/esm/geometry4d/MomentData.js +90 -66
  812. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  813. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js +6 -0
  814. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  815. package/lib/esm/geometry4d/Point4d.js +2 -0
  816. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  817. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  818. package/lib/esm/numerics/BezierPolynomials.js +8 -0
  819. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  820. package/lib/esm/numerics/ClusterableArray.js +29 -13
  821. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  822. package/lib/esm/numerics/Complex.js +2 -0
  823. package/lib/esm/numerics/Complex.js.map +1 -1
  824. package/lib/esm/numerics/ConvexPolygon2d.js +3 -0
  825. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  826. package/lib/esm/numerics/Newton.js +59 -4
  827. package/lib/esm/numerics/Newton.js.map +1 -1
  828. package/lib/esm/numerics/PascalCoefficients.js +1 -1
  829. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  830. package/lib/esm/numerics/PolarData.js +13 -1
  831. package/lib/esm/numerics/PolarData.js.map +1 -1
  832. package/lib/esm/numerics/Polynomials.js +64 -26
  833. package/lib/esm/numerics/Polynomials.js.map +1 -1
  834. package/lib/esm/numerics/Quadrature.js +26 -20
  835. package/lib/esm/numerics/Quadrature.js.map +1 -1
  836. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  837. package/lib/esm/numerics/SmallSystem.js.map +1 -1
  838. package/lib/esm/numerics/TriDiagonalSystem.js +11 -0
  839. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  840. package/lib/esm/numerics/UnionFind.js +1 -0
  841. package/lib/esm/numerics/UnionFind.js.map +1 -1
  842. package/lib/esm/numerics/UsageSums.js +10 -0
  843. package/lib/esm/numerics/UsageSums.js.map +1 -1
  844. package/lib/esm/polyface/AuxData.js +16 -0
  845. package/lib/esm/polyface/AuxData.js.map +1 -1
  846. package/lib/esm/polyface/BoxTopology.js +67 -67
  847. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  848. package/lib/esm/polyface/FacetFaceData.d.ts +1 -1
  849. package/lib/esm/polyface/FacetFaceData.js +3 -1
  850. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  851. package/lib/esm/polyface/FacetLocationDetail.js +30 -0
  852. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  853. package/lib/esm/polyface/FacetOrientation.js +12 -1
  854. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  855. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js +18 -2
  856. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  857. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts +33 -23
  858. package/lib/esm/polyface/IndexedEdgeMatcher.d.ts.map +1 -1
  859. package/lib/esm/polyface/IndexedEdgeMatcher.js +63 -33
  860. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  861. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts +3 -2
  862. package/lib/esm/polyface/IndexedPolyfaceVisitor.d.ts.map +1 -1
  863. package/lib/esm/polyface/IndexedPolyfaceVisitor.js +11 -2
  864. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  865. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts +233 -0
  866. package/lib/esm/polyface/IndexedPolyfaceWalker.d.ts.map +1 -0
  867. package/lib/esm/polyface/IndexedPolyfaceWalker.js +349 -0
  868. package/lib/esm/polyface/IndexedPolyfaceWalker.js.map +1 -0
  869. package/lib/esm/polyface/Polyface.d.ts +35 -10
  870. package/lib/esm/polyface/Polyface.d.ts.map +1 -1
  871. package/lib/esm/polyface/Polyface.js +73 -12
  872. package/lib/esm/polyface/Polyface.js.map +1 -1
  873. package/lib/esm/polyface/PolyfaceBuilder.d.ts +14 -27
  874. package/lib/esm/polyface/PolyfaceBuilder.d.ts.map +1 -1
  875. package/lib/esm/polyface/PolyfaceBuilder.js +48 -80
  876. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  877. package/lib/esm/polyface/PolyfaceClip.js +8 -0
  878. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  879. package/lib/esm/polyface/PolyfaceData.d.ts +28 -0
  880. package/lib/esm/polyface/PolyfaceData.d.ts.map +1 -1
  881. package/lib/esm/polyface/PolyfaceData.js +87 -5
  882. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  883. package/lib/esm/polyface/PolyfaceQuery.js +47 -7
  884. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  885. package/lib/esm/polyface/RangeLengthData.js +7 -0
  886. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  887. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js +12 -0
  888. package/lib/esm/polyface/RangeTree/LineString3dRangeTreeContext.js.map +1 -1
  889. package/lib/esm/polyface/RangeTree/MinimumValueTester.js +5 -2
  890. package/lib/esm/polyface/RangeTree/MinimumValueTester.js.map +1 -1
  891. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js +12 -0
  892. package/lib/esm/polyface/RangeTree/Point3dArrayRangeTreeContext.js.map +1 -1
  893. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js +14 -0
  894. package/lib/esm/polyface/RangeTree/PolyfaceRangeTreeContext.js.map +1 -1
  895. package/lib/esm/polyface/RangeTree/RangeTreeNode.js +5 -0
  896. package/lib/esm/polyface/RangeTree/RangeTreeNode.js.map +1 -1
  897. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js +43 -0
  898. package/lib/esm/polyface/RangeTree/RangeTreeSearchHandlers.js.map +1 -1
  899. package/lib/esm/polyface/TaggedNumericData.js +8 -0
  900. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  901. package/lib/esm/polyface/TriangleCandidate.js +3 -0
  902. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  903. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js +7 -0
  904. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  905. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js +6 -0
  906. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  907. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js +3 -0
  908. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  909. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js +3 -0
  910. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  911. package/lib/esm/polyface/multiclip/OffsetMeshContext.js +32 -0
  912. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  913. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  914. package/lib/esm/polyface/multiclip/RangeSearch.js +5 -5
  915. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  916. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js +21 -8
  917. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  918. package/lib/esm/polyface/multiclip/XYPointBuckets.js +6 -0
  919. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  920. package/lib/esm/serialization/BGFBAccessors.js +82 -164
  921. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  922. package/lib/esm/serialization/BGFBReader.js +22 -22
  923. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  924. package/lib/esm/serialization/BGFBWriter.js +1 -0
  925. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  926. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  927. package/lib/esm/serialization/DeepCompare.js +17 -17
  928. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  929. package/lib/esm/serialization/GeometrySamples.d.ts +5 -5
  930. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  931. package/lib/esm/serialization/GeometrySamples.js +113 -112
  932. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  933. package/lib/esm/serialization/IModelJsonSchema.d.ts +70 -63
  934. package/lib/esm/serialization/IModelJsonSchema.d.ts.map +1 -1
  935. package/lib/esm/serialization/IModelJsonSchema.js +87 -74
  936. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  937. package/lib/esm/serialization/SerializationHelpers.js.map +1 -1
  938. package/lib/esm/solid/Box.js +7 -2
  939. package/lib/esm/solid/Box.js.map +1 -1
  940. package/lib/esm/solid/Cone.d.ts +39 -14
  941. package/lib/esm/solid/Cone.d.ts.map +1 -1
  942. package/lib/esm/solid/Cone.js +53 -17
  943. package/lib/esm/solid/Cone.js.map +1 -1
  944. package/lib/esm/solid/LinearSweep.js +4 -2
  945. package/lib/esm/solid/LinearSweep.js.map +1 -1
  946. package/lib/esm/solid/RotationalSweep.js +5 -2
  947. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  948. package/lib/esm/solid/RuledSweep.d.ts +26 -23
  949. package/lib/esm/solid/RuledSweep.d.ts.map +1 -1
  950. package/lib/esm/solid/RuledSweep.js +32 -24
  951. package/lib/esm/solid/RuledSweep.js.map +1 -1
  952. package/lib/esm/solid/SolidPrimitive.d.ts +12 -11
  953. package/lib/esm/solid/SolidPrimitive.d.ts.map +1 -1
  954. package/lib/esm/solid/SolidPrimitive.js +11 -6
  955. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  956. package/lib/esm/solid/Sphere.d.ts +34 -17
  957. package/lib/esm/solid/Sphere.d.ts.map +1 -1
  958. package/lib/esm/solid/Sphere.js +52 -25
  959. package/lib/esm/solid/Sphere.js.map +1 -1
  960. package/lib/esm/solid/SweepContour.d.ts +24 -15
  961. package/lib/esm/solid/SweepContour.d.ts.map +1 -1
  962. package/lib/esm/solid/SweepContour.js +33 -15
  963. package/lib/esm/solid/SweepContour.js.map +1 -1
  964. package/lib/esm/solid/TorusPipe.js +7 -2
  965. package/lib/esm/solid/TorusPipe.js.map +1 -1
  966. package/lib/esm/topology/ChainMerge.js +16 -4
  967. package/lib/esm/topology/ChainMerge.js.map +1 -1
  968. package/lib/esm/topology/Graph.js +41 -6
  969. package/lib/esm/topology/Graph.js.map +1 -1
  970. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.d.ts +1 -1
  971. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js +5 -1
  972. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  973. package/lib/esm/topology/HalfEdgeGraphSearch.js +2 -0
  974. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  975. package/lib/esm/topology/HalfEdgeGraphSpineContext.js +9 -2
  976. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  977. package/lib/esm/topology/HalfEdgeGraphValidation.js +7 -9
  978. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  979. package/lib/esm/topology/HalfEdgeMarkSet.js +5 -0
  980. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  981. package/lib/esm/topology/HalfEdgeNodeXYZUV.js +6 -0
  982. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  983. package/lib/esm/topology/HalfEdgePointInGraphSearch.js +1 -0
  984. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  985. package/lib/esm/topology/HalfEdgePositionDetail.js +16 -0
  986. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  987. package/lib/esm/topology/HalfEdgePriorityQueue.js +2 -0
  988. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  989. package/lib/esm/topology/InsertAndRetriangulateContext.js +4 -0
  990. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  991. package/lib/esm/topology/MaskManager.js +3 -0
  992. package/lib/esm/topology/MaskManager.js.map +1 -1
  993. package/lib/esm/topology/Merging.js +11 -6
  994. package/lib/esm/topology/Merging.js.map +1 -1
  995. package/lib/esm/topology/RegularizeFace.js +22 -0
  996. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  997. package/lib/esm/topology/SignedDataSummary.js +22 -0
  998. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  999. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  1000. package/lib/esm/topology/Triangulation.js +21 -11
  1001. package/lib/esm/topology/Triangulation.js.map +1 -1
  1002. package/lib/esm/topology/XYParitySearchContext.js +13 -0
  1003. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  1004. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"Newton.js","sourceRoot":"","sources":["../../../src/numerics/Newton.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAO/F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,+BAA+B;AAE/B;;;;GAIG;AACH,MAAM,OAAgB,sBAAsB;IAa1C;;;;;;;;;;;OAWG;IACH,YACE,oBAA4B,OAAO,EACnC,8BAAsC,CAAC,EACvC,gBAAwB,EAAE;QAM5B,sEAAsE;QAC5D,iBAAY,GAAW,CAAC,CAAC;QAOnC,uDAAuD;QAChD,kBAAa,GAAW,CAAC,CAAC;QAb/B,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,4BAA4B,GAAG,2BAA2B,CAAC;QAChE,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAWD;;;;;OAKG;IACI,eAAe,CAAC,KAAa;QAClC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,4BAA4B,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;;;;;OAMG;IACI,aAAa;QAClB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACxE,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChF,6FAA6F;gBAC7F,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AACD;;;;GAIG;AACH,MAAM,OAAgB,oBAAoB;CAOzC;AACD;;;;;;GAMG;AACH,MAAM,OAAO,iBAAkB,SAAQ,sBAAsB;IAQ3D;;;OAGG;IACH,YAAmB,IAA0B,EAAE,aAAsB;QACnE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,+CAA+C;IACxC,IAAI,CAAC,CAAS;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,+CAA+C;IACxC,IAAI;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,qCAAqC;IAC9B,SAAS,CAAC,CAAS;QACxB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;IACD,sEAAsE;IAC/D,gBAAgB;QACrB,qFAAqF;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;IACD,6CAA6C;IACtC,WAAW;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,QAAQ,CAAC,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1G,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qFAAqF;IAC9E,eAAe;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAgB,mBAAmB;CAKxC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,sCAAuC,SAAQ,sBAAsB;IAahF;;;OAGG;IACH,YAAmB,IAAyB,EAAE,aAAsB;QAClE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;IAC5B,CAAC;IACD,+CAA+C;IACxC,IAAI,CAAC,CAAS;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,+CAA+C;IACxC,IAAI;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IACD,sEAAsE;IAC/D,gBAAgB;QACrB,qFAAqF;QACrF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;IACD,uEAAuE;IAChE,WAAW;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS;YACzC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,aAAa;gBAC7C,MAAM,EAAE,GAAG,QAAQ,CAAC,yBAAyB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChF,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;oBACrB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,qFAAqF;IAC9E,eAAe;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAgB,sBAAsB;IAe1C;;;OAGG;IACH;QACE,IAAI,CAAC,QAAQ,GAAG,yBAAyB,CAAC,aAAa,EAAE,CAAC;IAC5D,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,+BAAgC,SAAQ,sBAAsB;IAMzE;;;OAGG;IACH,YAAmB,IAA4B,EAAE,aAAsB;QACrE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACzC,CAAC;IACD,+DAA+D;IACxD,KAAK,CAAC,CAAS,EAAE,CAAS;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,qDAAqD;IAC9C,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,qDAAqD;IAC9C,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,kHAAkH;IAC3G,gBAAgB;QACrB,wHAAwH;QACxH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtG,CAAC;IACD;;;OAGG;IACI,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5D,OAAO,KAAK,CAAC;QACf,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC/B,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC;QACzB,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC;QACzB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;QACrB,yFAAyF;QACzF,IAAI,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;YAC/F,OAAO,IAAI,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IACD;;OAEG;IACI,eAAe;QACpB,OAAO,QAAQ,CAAC,QAAQ,CACtB,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EACzD,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;CACF;AACD;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;;;;OAQG;IACI,MAAM,CAAC,WAAW,CACvB,CAAS,EACT,IAAuC,EACvC,UAA6C,EAC7C,oBAA4B,QAAQ,CAAC,kBAAkB;QAEvD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,SAAiB,CAAC;QACtB,MAAM,MAAM,GAAG,OAAO,CAAC;QACvB,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBACxC,MAAM,EAAE,GAAG,QAAQ,CAAC,2BAA2B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACvD,IAAI,EAAE,KAAK,SAAS;oBAClB,OAAO,SAAS,CAAC;gBACnB,CAAC,IAAI,EAAE,CAAC;gBACR,oDAAoD;gBACpD,SAAS,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;gBACrD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC;oBAC7B,YAAY,EAAE,CAAC;oBACf,IAAI,EAAE,KAAK,GAAG,IAAI,YAAY,GAAG,CAAC,EAAI,wCAAwC;wBAC5E,OAAO,CAAC,CAAC;gBACb,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,+BAAgC,SAAQ,sBAAsB;IAKzE,YAAY,MAAsB,EAAE,MAAsB;QACxD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IACM,QAAQ,CAAC,SAAiB,EAAE,SAAiB;QAClD;;;;;;;;WAQG;QACH,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EACzF,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,EACnD,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CACtD,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,8BAA+B,SAAQ,oBAAoB;IAItE,YAAY,MAAsB,EAAE,MAAe;QACjD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,yBAAyB,CAAC,aAAa,EAAE,CAAC;IAC3D,CAAC;IACM,QAAQ,CAAC,SAAiB;QAC/B;;;;;;;WAOG;QACH,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;QAChD,IAAI,CAAC,WAAW,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,gCAAiC,SAAQ,sBAAsB;IAK1E,YAAY,MAAsB,EAAE,MAAsB;QACxD,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,yBAAyB,CAAC,aAAa,EAAE,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG,yBAAyB,CAAC,aAAa,EAAE,CAAC;IAC3D,CAAC;IACM,QAAQ,CAAC,SAAiB,EAAE,SAAiB;QAClD;;;;;;;;;;WAUG;QACH,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAClC,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,EAC/B,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,EAC/B,GAAG,EACH,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,EACzE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,EACrC,GAAG,EACH,CAAC,CAAC,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,EACxC,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,EACzE,GAAG,CACJ,CAAC;QACF,OAAO,IAAI,CAAC;IACd,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 { CurvePrimitive } from \"../curve/CurvePrimitive\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../geometry3d/Ray3d\";\r\nimport { SmallSystem } from \"./SmallSystem\";\r\n\r\n// cspell:word currentdFdX XYRR\r\n\r\n/**\r\n * Base class for Newton iterations in various dimensions.\r\n * Dimension-specific classes carry all dimension-related data and answer generalized queries from this base class.\r\n * @internal\r\n */\r\nexport abstract class AbstractNewtonIterator {\r\n /** Compute a step. The current x and function values must be retained for use in later method calls. */\r\n public abstract computeStep(): boolean;\r\n /**\r\n * Return the current step size, scaled for use in tolerance tests.\r\n * * This is a single number, typically the max of various per-dimension `dx/(1+x)` for the x and dx of that dimension.\r\n */\r\n public abstract currentStepSize(): number;\r\n /**\r\n * Apply the current step (in all dimensions).\r\n * @param isFinalStep true if this is a final step.\r\n */\r\n public abstract applyCurrentStep(isFinalStep: boolean): boolean;\r\n /**\r\n * The constructor.\r\n * @param stepSizeTarget tolerance to consider a single step converged.\r\n * This number should be \"moderately\" strict. Because 2 successive convergences are required,\r\n * it is expected that a first \"accept\" for (say) 10 to 14 digit step will be followed by another\r\n * iteration. A well behaved newton would then hypothetically double the number of digits to\r\n * 20 to 28. Since the IEEE double only carries 16 digits, this second-convergence step will\r\n * typically achieve full precision.\r\n * @param successiveConvergenceTarget number of successive convergences required for acceptance.\r\n * @param maxIterations max number of iterations. A typical newton step converges in 3 to 6 iterations.\r\n * Allow 15 to 20 to catch difficult cases.\r\n */\r\n protected constructor(\r\n stepSizeTolerance: number = 1.0e-11,\r\n successiveConvergenceTarget: number = 2,\r\n maxIterations: number = 15,\r\n ) {\r\n this._stepSizeTolerance = stepSizeTolerance;\r\n this._successiveConvergenceTarget = successiveConvergenceTarget;\r\n this._maxIterations = maxIterations;\r\n }\r\n /** Number of consecutive steps which passed convergence condition. */\r\n protected _numAccepted: number = 0;\r\n /** Target number of successive convergences. */\r\n protected _successiveConvergenceTarget: number;\r\n /** Convergence target (the implementation-specific currentStepSize is compared to this). */\r\n protected _stepSizeTolerance: number;\r\n /** Max iterations allowed. */\r\n protected _maxIterations: number;\r\n /** Number of iterations (incremented at each step). */\r\n public numIterations: number = 0;\r\n /**\r\n * Test if a step is converged.\r\n * * Convergence is accepted with enough (_successiveConvergenceTarget) small steps (according to _stepSizeTolerance)\r\n * occur in succession.\r\n * @param delta step size as reported by currentStepSize.\r\n */\r\n public testConvergence(delta: number): boolean {\r\n if (Math.abs(delta) < this._stepSizeTolerance) {\r\n this._numAccepted++;\r\n return this._numAccepted >= this._successiveConvergenceTarget;\r\n }\r\n this._numAccepted = 0;\r\n return false;\r\n }\r\n /**\r\n * Run iterations, calling various methods from base and derived classes:\r\n * * computeStep -- typically evaluate derivatives and solve linear system.\r\n * * currentStepSize -- return numeric measure of the step just computed by computeStep.\r\n * * testConvergence -- test if the step from currentStepSize (along with recent steps) is converged.\r\n * * applyCurrentStep -- apply the step to the independent variables.\r\n */\r\n public runIterations(): boolean {\r\n this._numAccepted = 0;\r\n this.numIterations = 0;\r\n while (this.numIterations++ < this._maxIterations && this.computeStep()) {\r\n if (this.testConvergence(this.currentStepSize()) && this.applyCurrentStep(true)) {\r\n // console.log(\"iter: \" + this.numIterations); // print number of Newton iterations for debug\r\n return true;\r\n }\r\n this.applyCurrentStep(false);\r\n }\r\n return false;\r\n }\r\n}\r\n/**\r\n * Object to evaluate a newton function. The object must retain most-recent function and derivative\r\n * values for immediate query.\r\n * @internal\r\n */\r\nexport abstract class NewtonEvaluatorRtoRD {\r\n /** Evaluate the function and its derivative at x. */\r\n public abstract evaluate(x: number): boolean;\r\n /** Most recent function value, i.e., f(x_n). */\r\n public currentF!: number;\r\n /** Most recent evaluated derivative, i.e., f'(x_n). */\r\n public currentdFdX!: number;\r\n}\r\n/**\r\n * Newton iterator for use when both function and derivative can be evaluated.\r\n * To solve `f(x) = 0`, the Newton iteration is `x_{n+1} = x_n - dx = x_n - f(x_n)/f'(x_n)`.\r\n * To solve `f(x) = target` which is equivalent to solving `g(x) = f(x) - target = 0`, the Newton iteration is\r\n * `x_{n+1} = x_n - dx = x_n - g(x_n)/g'(x_n) = x_n - (f(x_n)-target)/f'(x_n)`.\r\n * @internal\r\n */\r\nexport class Newton1dUnbounded extends AbstractNewtonIterator {\r\n private _func: NewtonEvaluatorRtoRD;\r\n /** Current step is dx. */\r\n private _currentStep!: number;\r\n /** Current X is x_n. */\r\n private _currentX!: number;\r\n /** The target */\r\n private _target!: number;\r\n /**\r\n * Constructor for 1D newton iteration with derivatives.\r\n * @param func function that returns both function value and derivative.\r\n */\r\n public constructor(func: NewtonEvaluatorRtoRD, maxIterations?: number) {\r\n super(undefined, undefined, maxIterations);\r\n this._func = func;\r\n this.setTarget(0);\r\n }\r\n /** Set the independent variable, i.e., x_n. */\r\n public setX(x: number): boolean {\r\n this._currentX = x;\r\n return true;\r\n }\r\n /** Get the independent variable, i.e., x_n. */\r\n public getX(): number {\r\n return this._currentX;\r\n }\r\n /** Set the target function value. */\r\n public setTarget(y: number): void {\r\n this._target = y;\r\n }\r\n /** Move the current X by the just-computed step, i.e., `x_n - dx`. */\r\n public applyCurrentStep(): boolean {\r\n // console.log(this._currentX - this._currentStep); // print approximations for debug\r\n return this.setX(this._currentX - this._currentStep);\r\n }\r\n /** Compute the univariate newton step dx. */\r\n public computeStep(): boolean {\r\n if (this._func.evaluate(this._currentX)) {\r\n const dx = Geometry.conditionalDivideFraction(this._func.currentF - this._target, this._func.currentdFdX);\r\n if (dx !== undefined) {\r\n this._currentStep = dx;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /** Return the current step size as a relative number, i.e., `|dx / (1 + |x_n|)|`. */\r\n public currentStepSize(): number {\r\n return Math.abs(this._currentStep / (1.0 + Math.abs(this._currentX)));\r\n }\r\n}\r\n\r\n/**\r\n * Object to evaluate a newton function (without derivative). The object must retain most-recent function value.\r\n * @internal\r\n */\r\nexport abstract class NewtonEvaluatorRtoR {\r\n /** Evaluate function value into member currentF */\r\n public abstract evaluate(x: number): boolean;\r\n /** Most recent function evaluation, i.e., f(x_n). */\r\n public currentF!: number;\r\n}\r\n\r\n/**\r\n * Newton iteration for a univariate function, using approximate derivatives.\r\n * To approximate the derivatives we use a small step `h`, i.e., `f'(x_n) = (f(x_n + h) - f(x_n)) / h`.\r\n * Therefore, to solve `f(x) = 0`, the iteration is\r\n * `x_{n+1} = x_n - dx = x_n - f(x_n)/f'(x_n) = x_n - f(x_n) * h / (f(x_n + h) - f(x_n))`.\r\n * @internal\r\n */\r\nexport class Newton1dUnboundedApproximateDerivative extends AbstractNewtonIterator {\r\n private _func: NewtonEvaluatorRtoR;\r\n /** Current step is dx. */\r\n private _currentStep!: number;\r\n /** Current X is x_n. */\r\n private _currentX!: number;\r\n /**\r\n * Step size for approximate derivative for the iteration.\r\n * * Initialized to 1e-8, which is appropriate for iteration in fraction space.\r\n * * Should be larger for iteration with real distance as x.\r\n */\r\n public derivativeH: number; // h\r\n\r\n /**\r\n * Constructor for 1D newton iteration with approximate derivatives.\r\n * @param func function that only returns function value (and not derivative).\r\n */\r\n public constructor(func: NewtonEvaluatorRtoR, maxIterations?: number) {\r\n super(undefined, undefined, maxIterations);\r\n this._func = func;\r\n this.derivativeH = 1.0e-8;\r\n }\r\n /** Set the independent variable, i.e., x_n. */\r\n public setX(x: number): boolean {\r\n this._currentX = x;\r\n return true;\r\n }\r\n /** Get the independent variable, i.e., x_n. */\r\n public getX(): number {\r\n return this._currentX;\r\n }\r\n /** Move the current X by the just-computed step, i.e., `x_n - dx`. */\r\n public applyCurrentStep(): boolean {\r\n // console.log(this._currentX - this._currentStep); // print approximations for debug\r\n return this.setX(this._currentX - this._currentStep);\r\n }\r\n /** Univariate newton step dx, computed with approximate derivative. */\r\n public computeStep(): boolean {\r\n if (this._func.evaluate(this._currentX)) {\r\n const fA = this._func.currentF; // f(x_n)\r\n if (this._func.evaluate(this._currentX + this.derivativeH)) {\r\n const fB = this._func.currentF; // f(x_n + h)\r\n const dx = Geometry.conditionalDivideFraction(fA, (fB - fA) / this.derivativeH);\r\n if (dx !== undefined) {\r\n this._currentStep = dx;\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n /** Return the current step size as a relative number, i.e., `|dx / (1 + |x_n|)|`. */\r\n public currentStepSize(): number {\r\n return Math.abs(this._currentStep / (1.0 + Math.abs(this._currentX)));\r\n }\r\n}\r\n\r\n/**\r\n * Object to evaluate a 2-parameter newton function with derivatives.\r\n * @internal\r\n */\r\nexport abstract class NewtonEvaluatorRRtoRRD {\r\n /**\r\n * Iteration controller calls this to ask for evaluation of the function and its two partial derivatives.\r\n * * The implementation returns true, it must set the currentF object.\r\n */\r\n public abstract evaluate(x: number, y: number): boolean;\r\n /**\r\n * Most recent function evaluation as parts of the plane.\r\n * * See doc of [[Newton2dUnboundedWithDerivative]] class for info on 2d newton method.\r\n * * For `F(u,v) := (x(u,v), y(u,v))` the returned plane stores the following evaluations at current value `X := (u,v)`:\r\n * * `origin` = F(X) = (x(X), y(X))\r\n * * `vectorU` = F_u(X) = partial deriv of F wrt u at X = (x_u(X), y_u(X)) = 1st col of Jacobian matrix evaluated at X\r\n * * `vectorV` = F_v(X) = partial deriv of F wrt v at X = (x_v(X), y_v(X)) = 2nd col of Jacobian matrix evaluated at X\r\n */\r\n public currentF!: Plane3dByOriginAndVectors;\r\n /**\r\n * Constructor.\r\n * * This creates a currentF object to (repeatedly) receive function and derivatives.\r\n */\r\n public constructor() {\r\n this.currentF = Plane3dByOriginAndVectors.createXYPlane();\r\n }\r\n}\r\n\r\n/**\r\n * Implement evaluation steps for newton iteration in 2 dimensions, using caller supplied NewtonEvaluatorRRtoRRD object.\r\n * * Suppose we want to find the roots of `F(u,v) := (x(u,v), y(u,v))`. Writing `X := (u,v)` and `F(X)` as column vectors,\r\n * the 2D Newton's iteration to find a root of `F` is given by:\r\n * `X_{n+1} = X_n - dX = X_n - JInv(X_n)F(X_n)`, where `JInv` is the inverse of the Jacobian matrix `J`, and `J` is\r\n * defined by the partial derivatives of the component functions of F:\r\n *\r\n * `[dx/du dx/dv]`\r\n *\r\n * `[dy/du dy/dv]`\r\n * @internal\r\n */\r\nexport class Newton2dUnboundedWithDerivative extends AbstractNewtonIterator {\r\n private _func: NewtonEvaluatorRRtoRRD;\r\n /** Current step, or dX = (du, dv). */\r\n private _currentStep: Vector2d;\r\n /** Current uv parameters, or X_n = (u_n, v_n). */\r\n private _currentUV: Point2d;\r\n /**\r\n * Constructor for 2D newton iteration with derivatives.\r\n * @param func function that returns both function value and derivative.\r\n */\r\n public constructor(func: NewtonEvaluatorRRtoRRD, maxIterations?: number) {\r\n super(undefined, undefined, maxIterations);\r\n this._func = func;\r\n this._currentStep = Vector2d.createZero();\r\n this._currentUV = Point2d.createZero();\r\n }\r\n /** Set the current uv parameters, i.e., `X_n = (u_n, v_n)`. */\r\n public setUV(u: number, v: number): boolean {\r\n this._currentUV.set(u, v);\r\n return true;\r\n }\r\n /** Get the current u parameter of X_n, i.e., u_n. */\r\n public getU(): number {\r\n return this._currentUV.x;\r\n }\r\n /** Get the current v parameter of X_n, i.e., v_n. */\r\n public getV(): number {\r\n return this._currentUV.y;\r\n }\r\n /** Update the current uv parameter by currentStep, i.e., compute `X_{n+1} := X_n - dX = (u_n - du, v_n - dv)`. */\r\n public applyCurrentStep(): boolean {\r\n // console.log(\"(\" + (this._currentUV.x - this._currentStep.x) + \",\" + (this._currentUV.y - this._currentStep.y) + \")\");\r\n return this.setUV(this._currentUV.x - this._currentStep.x, this._currentUV.y - this._currentStep.y);\r\n }\r\n /**\r\n * Evaluate the functions and derivatives at `X_n = (u_n, v_n)`, and solve the Jacobian matrix equation to\r\n * compute `dX = (du, dv)`.\r\n */\r\n public computeStep(): boolean {\r\n if (!this._func.evaluate(this._currentUV.x, this._currentUV.y))\r\n return false;\r\n const fA = this._func.currentF;\r\n const jCol0 = fA.vectorU;\r\n const jCol1 = fA.vectorV;\r\n const fX = fA.origin;\r\n // Given X_{n+1} = X_n - dX = X_n - JInv(X_n) F(X_n), we solve J(X_n) dX = F(X_n) for dX:\r\n if (SmallSystem.linearSystem2d(jCol0.x, jCol1.x, jCol0.y, jCol1.y, fX.x, fX.y, this._currentStep))\r\n return true;\r\n return false;\r\n }\r\n /**\r\n * Return the current relative step size, i.e., the larger absolute component of `dX / (1 + |X_n|)`\r\n */\r\n public currentStepSize(): number {\r\n return Geometry.maxAbsXY(\r\n this._currentStep.x / (1.0 + Math.abs(this._currentUV.x)),\r\n this._currentStep.y / (1.0 + Math.abs(this._currentUV.y)),\r\n );\r\n }\r\n}\r\n/**\r\n * SimpleNewton has static methods for newton methods with evaluated functions presented as immediate arguments\r\n * (not function object).\r\n * @internal\r\n */\r\nexport class SimpleNewton {\r\n /**\r\n * Run a one-dimensional newton iteration with separate functions for function and derivative.\r\n * * Completion is at 2 (TWO) successive passes at `absoluteTolerance + relTol * abs(x)`, where relTol is\r\n * chosen internally.\r\n * * `absoluteTolerance` is usually aggressively tight -- should come into play only for x near zero.\r\n * * The `relTol` is fluffy (for instance around 1e-11) but in properly converging cases the extra pass after\r\n * first success normally moves to full machine precision.\r\n * * This is an open-loop newton -- it just runs, and returns undefined if anything bad happens.\r\n */\r\n public static runNewton1D(\r\n x: number,\r\n func: (x: number) => number | undefined,\r\n derivative: (x: number) => number | undefined,\r\n absoluteTolerance: number = Geometry.smallFloatingPoint,\r\n ): number | undefined {\r\n let numConverged = 0;\r\n let tolerance: number;\r\n const relTol = 1.0e-11;\r\n for (let iteration = 0; iteration < 20; iteration++) {\r\n const f = func(x);\r\n const df = derivative(x);\r\n if (f !== undefined && df !== undefined) {\r\n const dx = Geometry.conditionalDivideCoordinate(f, df);\r\n if (dx === undefined)\r\n return undefined;\r\n x -= dx;\r\n // console.log(x); // print approximations for debug\r\n tolerance = absoluteTolerance + Math.abs(x) * relTol;\r\n if (Math.abs(dx) < tolerance) {\r\n numConverged++;\r\n if (dx === 0.0 || numConverged > 1) // bypass convergence count on true 0 dx\r\n return x;\r\n } else {\r\n numConverged = 0;\r\n }\r\n }\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Class to evaluate XY intersection between 2 curve primitives using the Newton method.\r\n * @internal\r\n */\r\nexport class CurveCurveIntersectionXYRRToRRD extends NewtonEvaluatorRRtoRRD {\r\n private _curveP: CurvePrimitive;\r\n private _curveQ: CurvePrimitive;\r\n private _rayP: Ray3d;\r\n private _rayQ: Ray3d;\r\n constructor(curveP: CurvePrimitive, curveQ: CurvePrimitive) {\r\n super();\r\n this._curveP = curveP;\r\n this._curveQ = curveQ;\r\n this._rayP = Ray3d.createZero();\r\n this._rayQ = Ray3d.createZero();\r\n }\r\n public evaluate(fractionU: number, fractionV: number): boolean {\r\n /**\r\n * To find an intersection between xy-curves P(u) = (x_p(u), y_p(u)) and Q(v) = (x_q(v), y_q(v)) we should solve\r\n * F(u,v) := P(u) - Q(v) = (0,0)\r\n * Using the Newton method we can find the fractions u and v at the intersection via\r\n * [u_{n+1}] [u_n] [x_p'(u_n) -x_q'(v_n)] [x_p(u_n) - x_q(v_n)]\r\n * = - Inv( )\r\n * [v_{n+1}] [v_n] [y_p'(u_n) -y_q'(v_n)] [y_p(u_n) - y_q(v_n)]\r\n * Note that this is xy intersection so we can ignore z.\r\n */\r\n this._curveP.fractionToPointAndDerivative(fractionU, this._rayP);\r\n this._curveQ.fractionToPointAndDerivative(fractionV, this._rayQ);\r\n this.currentF.setOriginAndVectorsXYZ(\r\n this._rayP.origin.x - this._rayQ.origin.x, this._rayP.origin.y - this._rayQ.origin.y, 0.0,\r\n this._rayP.direction.x, this._rayP.direction.y, 0.0,\r\n -this._rayQ.direction.x, -this._rayQ.direction.y, 0.0,\r\n );\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Class to evaluate XY close approach between a curve primitive and a point using the Newton method.\r\n * @internal\r\n */\r\nexport class CurvePointCloseApproachXYRtoRD extends NewtonEvaluatorRtoRD {\r\n private _curveP: CurvePrimitive;\r\n private _pointQ: Point3d;\r\n private _planeP: Plane3dByOriginAndVectors;\r\n constructor(curveP: CurvePrimitive, pointQ: Point3d) {\r\n super();\r\n this._curveP = curveP;\r\n this._pointQ = pointQ;\r\n this._planeP = Plane3dByOriginAndVectors.createXYPlane();\r\n }\r\n public evaluate(fractionU: number): boolean {\r\n /**\r\n * To find a close approach between xy-curve P(u) and xy-point q we should solve\r\n * F(u) := P'(u).(P(u) - q) = 0\r\n * For a solution u, the segment S(u) := P(u) - q is perpendicular to the curve tangent P'(u), which means S(u) is a close approach.\r\n * Using the Newton method we can find the fractions u at the close approach location via\r\n * u_{n+1} = u_n + F(u_n)/F'(u_n) = u_n + [ P'(u_n).S(u_n) ]/[ P''(u_n).S(u_n) + P'(u_n).P'(u_n) ]\r\n * Note that this is xy close approach so we can ignore z.\r\n */\r\n this._curveP.fractionToPointAnd2Derivatives(fractionU, this._planeP);\r\n const segX = this._planeP.origin.x - this._pointQ.x;\r\n const segY = this._planeP.origin.y - this._pointQ.y;\r\n const pDerivX = this._planeP.vectorU.x;\r\n const pDerivY = this._planeP.vectorU.y;\r\n const p2DerivX = this._planeP.vectorV.x;\r\n const p2DerivY = this._planeP.vectorV.y;\r\n this.currentF = pDerivX * segX + pDerivY * segY;\r\n this.currentdFdX = p2DerivX * segX + pDerivX * pDerivX + p2DerivY * segY + pDerivY * pDerivY;\r\n return true;\r\n }\r\n}\r\n\r\n/**\r\n * Class to evaluate XY close approach between 2 curve primitives using the Newton method.\r\n * @internal\r\n */\r\nexport class CurveCurveCloseApproachXYRRtoRRD extends NewtonEvaluatorRRtoRRD {\r\n private _curveP: CurvePrimitive;\r\n private _curveQ: CurvePrimitive;\r\n private _planeP: Plane3dByOriginAndVectors;\r\n private _planeQ: Plane3dByOriginAndVectors;\r\n constructor(curveP: CurvePrimitive, curveQ: CurvePrimitive) {\r\n super();\r\n this._curveP = curveP;\r\n this._curveQ = curveQ;\r\n this._planeP = Plane3dByOriginAndVectors.createXYPlane();\r\n this._planeQ = Plane3dByOriginAndVectors.createXYPlane();\r\n }\r\n public evaluate(fractionU: number, fractionV: number): boolean {\r\n /**\r\n * To find a close approach between xy-curves P(u) and Q(v) we should solve\r\n * F(u,v) := (P'(u).(P(u) - Q(v)), Q'(v).(P(u) - Q(v))) = (0,0)\r\n * For a solution (u,v), the segment S(u,v) := P(u) - Q(v) is perpendicular to the curve tangents P'(u) and Q'(v),\r\n * which means S(u,v) is a close approach.\r\n * Using the Newton method we can find the fractions u and v at the close approach location via\r\n * [u_{n+1}] [u_n] [P''(u_n).S(u_n,v_n) + P'(u_n).P'(u_n) -P'(u_n).Q'(v_n)] [P'(u_n).S(u_n,v_n)]\r\n * = - Inv( )\r\n * [v_{n+1}] [v_n] [Q'(v_n).P'(u_n) Q''(v_n).S(u_n,v_n) - Q'(v_n).Q'(v_n)] [Q'(v_n).S(u_n,v_n)]\r\n * Note that this is xy close approach so we can ignore z.\r\n */\r\n this._curveP.fractionToPointAnd2Derivatives(fractionU, this._planeP);\r\n this._curveQ.fractionToPointAnd2Derivatives(fractionV, this._planeQ);\r\n const segX = this._planeP.origin.x - this._planeQ.origin.x;\r\n const segY = this._planeP.origin.y - this._planeQ.origin.y;\r\n const pDerivX = this._planeP.vectorU.x;\r\n const pDerivY = this._planeP.vectorU.y;\r\n const qDerivX = this._planeQ.vectorU.x;\r\n const qDerivY = this._planeQ.vectorU.y;\r\n const p2DerivX = this._planeP.vectorV.x;\r\n const p2DerivY = this._planeP.vectorV.y;\r\n const q2DerivX = this._planeQ.vectorV.x;\r\n const q2DerivY = this._planeQ.vectorV.y;\r\n this.currentF.setOriginAndVectorsXYZ(\r\n pDerivX * segX + pDerivY * segY,\r\n qDerivX * segX + qDerivY * segY,\r\n 0.0,\r\n p2DerivX * segX + p2DerivY * segY + pDerivX * pDerivX + pDerivY * pDerivY,\r\n qDerivX * pDerivX + qDerivY * pDerivY,\r\n 0.0,\r\n -(pDerivX * qDerivX + pDerivY * qDerivY),\r\n q2DerivX * segX + q2DerivY * segY - qDerivX * qDerivX - qDerivY * qDerivY,\r\n 0.0,\r\n );\r\n return true;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Newton.js","sourceRoot":"","sources":["../../../src/numerics/Newton.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 { CurvePrimitive } from \"../curve/CurvePrimitive\";\nimport { Geometry } from \"../Geometry\";\nimport { Plane3dByOriginAndVectors } from \"../geometry3d/Plane3dByOriginAndVectors\";\nimport { Point2d, Vector2d } from \"../geometry3d/Point2dVector2d\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../geometry3d/Ray3d\";\nimport { SmallSystem } from \"./SmallSystem\";\n\n// cspell:word currentdFdX XYRR\n\n/**\n * Base class for Newton iterations in various dimensions.\n * Dimension-specific classes carry all dimension-related data and answer generalized queries from this base class.\n * @internal\n */\nexport abstract class AbstractNewtonIterator {\n /** Compute a step. The current x and function values must be retained for use in later method calls. */\n public abstract computeStep(): boolean;\n /**\n * Return the current step size, scaled for use in tolerance tests.\n * * This is a single number, typically the max of various per-dimension `dx/(1+x)` for the x and dx of that dimension.\n */\n public abstract currentStepSize(): number;\n /**\n * Apply the current step (in all dimensions).\n * @param isFinalStep true if this is a final step.\n */\n public abstract applyCurrentStep(isFinalStep: boolean): boolean;\n /**\n * The constructor.\n * @param stepSizeTarget tolerance to consider a single step converged.\n * This number should be \"moderately\" strict. Because 2 successive convergences are required,\n * it is expected that a first \"accept\" for (say) 10 to 14 digit step will be followed by another\n * iteration. A well behaved newton would then hypothetically double the number of digits to\n * 20 to 28. Since the IEEE double only carries 16 digits, this second-convergence step will\n * typically achieve full precision.\n * @param successiveConvergenceTarget number of successive convergences required for acceptance.\n * @param maxIterations max number of iterations. A typical newton step converges in 3 to 6 iterations.\n * Allow 15 to 20 to catch difficult cases.\n */\n protected constructor(\n stepSizeTolerance: number = 1.0e-11,\n successiveConvergenceTarget: number = 2,\n maxIterations: number = 15,\n ) {\n this._stepSizeTolerance = stepSizeTolerance;\n this._successiveConvergenceTarget = successiveConvergenceTarget;\n this._maxIterations = maxIterations;\n }\n /** Number of consecutive steps which passed convergence condition. */\n protected _numAccepted: number = 0;\n /** Target number of successive convergences. */\n protected _successiveConvergenceTarget: number;\n /** Convergence target (the implementation-specific currentStepSize is compared to this). */\n protected _stepSizeTolerance: number;\n /** Max iterations allowed. */\n protected _maxIterations: number;\n /** Number of iterations (incremented at each step). */\n public numIterations: number = 0;\n /**\n * Test if a step is converged.\n * * Convergence is accepted with enough (_successiveConvergenceTarget) small steps (according to _stepSizeTolerance)\n * occur in succession.\n * @param delta step size as reported by currentStepSize.\n */\n public testConvergence(delta: number): boolean {\n if (Math.abs(delta) < this._stepSizeTolerance) {\n this._numAccepted++;\n return this._numAccepted >= this._successiveConvergenceTarget;\n }\n this._numAccepted = 0;\n return false;\n }\n /**\n * Run iterations, calling various methods from base and derived classes:\n * * computeStep -- typically evaluate derivatives and solve linear system.\n * * currentStepSize -- return numeric measure of the step just computed by computeStep.\n * * testConvergence -- test if the step from currentStepSize (along with recent steps) is converged.\n * * applyCurrentStep -- apply the step to the independent variables.\n */\n public runIterations(): boolean {\n this._numAccepted = 0;\n this.numIterations = 0;\n while (this.numIterations++ < this._maxIterations && this.computeStep()) {\n if (this.testConvergence(this.currentStepSize()) && this.applyCurrentStep(true)) {\n // console.log(\"iter: \" + this.numIterations); // print number of Newton iterations for debug\n return true;\n }\n this.applyCurrentStep(false);\n }\n return false;\n }\n}\n/**\n * Object to evaluate a newton function. The object must retain most-recent function and derivative\n * values for immediate query.\n * @internal\n */\nexport abstract class NewtonEvaluatorRtoRD {\n /** Evaluate the function and its derivative at x. */\n public abstract evaluate(x: number): boolean;\n /** Most recent function value, i.e., f(x_n). */\n public currentF!: number;\n /** Most recent evaluated derivative, i.e., f'(x_n). */\n public currentdFdX!: number;\n}\n/**\n * Newton iterator for use when both function and derivative can be evaluated.\n * To solve `f(x) = 0`, the Newton iteration is `x_{n+1} = x_n - dx = x_n - f(x_n)/f'(x_n)`.\n * To solve `f(x) = target` which is equivalent to solving `g(x) = f(x) - target = 0`, the Newton iteration is\n * `x_{n+1} = x_n - dx = x_n - g(x_n)/g'(x_n) = x_n - (f(x_n)-target)/f'(x_n)`.\n * @internal\n */\nexport class Newton1dUnbounded extends AbstractNewtonIterator {\n private _func: NewtonEvaluatorRtoRD;\n /** Current step is dx. */\n private _currentStep!: number;\n /** Current X is x_n. */\n private _currentX!: number;\n /** The target */\n private _target!: number;\n /**\n * Constructor for 1D newton iteration with derivatives.\n * @param func function that returns both function value and derivative.\n */\n public constructor(func: NewtonEvaluatorRtoRD, maxIterations?: number) {\n super(undefined, undefined, maxIterations);\n this._func = func;\n this.setTarget(0);\n }\n /** Set the independent variable, i.e., x_n. */\n public setX(x: number): boolean {\n this._currentX = x;\n return true;\n }\n /** Get the independent variable, i.e., x_n. */\n public getX(): number {\n return this._currentX;\n }\n /** Set the target function value. */\n public setTarget(y: number): void {\n this._target = y;\n }\n /** Move the current X by the just-computed step, i.e., `x_n - dx`. */\n public applyCurrentStep(): boolean {\n // console.log(this._currentX - this._currentStep); // print approximations for debug\n return this.setX(this._currentX - this._currentStep);\n }\n /** Compute the univariate newton step dx. */\n public computeStep(): boolean {\n if (this._func.evaluate(this._currentX)) {\n const dx = Geometry.conditionalDivideFraction(this._func.currentF - this._target, this._func.currentdFdX);\n if (dx !== undefined) {\n this._currentStep = dx;\n return true;\n }\n }\n return false;\n }\n /** Return the current step size as a relative number, i.e., `|dx / (1 + |x_n|)|`. */\n public currentStepSize(): number {\n return Math.abs(this._currentStep / (1.0 + Math.abs(this._currentX)));\n }\n}\n\n/**\n * Object to evaluate a newton function (without derivative). The object must retain most-recent function value.\n * @internal\n */\nexport abstract class NewtonEvaluatorRtoR {\n /** Evaluate function value into member currentF */\n public abstract evaluate(x: number): boolean;\n /** Most recent function evaluation, i.e., f(x_n). */\n public currentF!: number;\n}\n\n/**\n * Newton iteration for a univariate function, using approximate derivatives.\n * To approximate the derivatives we use a small step `h`, i.e., `f'(x_n) = (f(x_n + h) - f(x_n)) / h`.\n * Therefore, to solve `f(x) = 0`, the iteration is\n * `x_{n+1} = x_n - dx = x_n - f(x_n)/f'(x_n) = x_n - f(x_n) * h / (f(x_n + h) - f(x_n))`.\n * @internal\n */\nexport class Newton1dUnboundedApproximateDerivative extends AbstractNewtonIterator {\n private _func: NewtonEvaluatorRtoR;\n /** Current step is dx. */\n private _currentStep!: number;\n /** Current X is x_n. */\n private _currentX!: number;\n /**\n * Step size for approximate derivative for the iteration.\n * * Initialized to 1e-8, which is appropriate for iteration in fraction space.\n * * Should be larger for iteration with real distance as x.\n */\n public derivativeH: number; // h\n\n /**\n * Constructor for 1D newton iteration with approximate derivatives.\n * @param func function that only returns function value (and not derivative).\n */\n public constructor(func: NewtonEvaluatorRtoR, maxIterations?: number) {\n super(undefined, undefined, maxIterations);\n this._func = func;\n this.derivativeH = 1.0e-8;\n }\n /** Set the independent variable, i.e., x_n. */\n public setX(x: number): boolean {\n this._currentX = x;\n return true;\n }\n /** Get the independent variable, i.e., x_n. */\n public getX(): number {\n return this._currentX;\n }\n /** Move the current X by the just-computed step, i.e., `x_n - dx`. */\n public applyCurrentStep(): boolean {\n // console.log(this._currentX - this._currentStep); // print approximations for debug\n return this.setX(this._currentX - this._currentStep);\n }\n /** Univariate newton step dx, computed with approximate derivative. */\n public computeStep(): boolean {\n if (this._func.evaluate(this._currentX)) {\n const fA = this._func.currentF; // f(x_n)\n if (this._func.evaluate(this._currentX + this.derivativeH)) {\n const fB = this._func.currentF; // f(x_n + h)\n const dx = Geometry.conditionalDivideFraction(fA, (fB - fA) / this.derivativeH);\n if (dx !== undefined) {\n this._currentStep = dx;\n return true;\n }\n }\n }\n return false;\n }\n /** Return the current step size as a relative number, i.e., `|dx / (1 + |x_n|)|`. */\n public currentStepSize(): number {\n return Math.abs(this._currentStep / (1.0 + Math.abs(this._currentX)));\n }\n}\n\n/**\n * Object to evaluate a 2-parameter newton function with derivatives.\n * @internal\n */\nexport abstract class NewtonEvaluatorRRtoRRD {\n /**\n * Iteration controller calls this to ask for evaluation of the function and its two partial derivatives.\n * * The implementation returns true, it must set the currentF object.\n */\n public abstract evaluate(x: number, y: number): boolean;\n /**\n * Most recent function evaluation as parts of the plane.\n * * See doc of [[Newton2dUnboundedWithDerivative]] class for info on 2d newton method.\n * * For `F(u,v) := (x(u,v), y(u,v))` the returned plane stores the following evaluations at current value `X := (u,v)`:\n * * `origin` = F(X) = (x(X), y(X))\n * * `vectorU` = F_u(X) = partial deriv of F wrt u at X = (x_u(X), y_u(X)) = 1st col of Jacobian matrix evaluated at X\n * * `vectorV` = F_v(X) = partial deriv of F wrt v at X = (x_v(X), y_v(X)) = 2nd col of Jacobian matrix evaluated at X\n */\n public currentF!: Plane3dByOriginAndVectors;\n /**\n * Constructor.\n * * This creates a currentF object to (repeatedly) receive function and derivatives.\n */\n public constructor() {\n this.currentF = Plane3dByOriginAndVectors.createXYPlane();\n }\n}\n\n/**\n * Implement evaluation steps for newton iteration in 2 dimensions, using caller supplied NewtonEvaluatorRRtoRRD object.\n * * Suppose we want to find the roots of `F(u,v) := (x(u,v), y(u,v))`. Writing `X := (u,v)` and `F(X)` as column vectors,\n * the 2D Newton's iteration to find a root of `F` is given by:\n * `X_{n+1} = X_n - dX = X_n - JInv(X_n)F(X_n)`, where `JInv` is the inverse of the Jacobian matrix `J`, and `J` is\n * defined by the partial derivatives of the component functions of F:\n *\n * `[dx/du dx/dv]`\n *\n * `[dy/du dy/dv]`\n * @internal\n */\nexport class Newton2dUnboundedWithDerivative extends AbstractNewtonIterator {\n private _func: NewtonEvaluatorRRtoRRD;\n /** Current step, or dX = (du, dv). */\n private _currentStep: Vector2d;\n /** Current uv parameters, or X_n = (u_n, v_n). */\n private _currentUV: Point2d;\n /**\n * Constructor for 2D newton iteration with derivatives.\n * @param func function that returns both function value and derivative.\n */\n public constructor(func: NewtonEvaluatorRRtoRRD, maxIterations?: number) {\n super(undefined, undefined, maxIterations);\n this._func = func;\n this._currentStep = Vector2d.createZero();\n this._currentUV = Point2d.createZero();\n }\n /** Set the current uv parameters, i.e., `X_n = (u_n, v_n)`. */\n public setUV(u: number, v: number): boolean {\n this._currentUV.set(u, v);\n return true;\n }\n /** Get the current u parameter of X_n, i.e., u_n. */\n public getU(): number {\n return this._currentUV.x;\n }\n /** Get the current v parameter of X_n, i.e., v_n. */\n public getV(): number {\n return this._currentUV.y;\n }\n /** Update the current uv parameter by currentStep, i.e., compute `X_{n+1} := X_n - dX = (u_n - du, v_n - dv)`. */\n public applyCurrentStep(): boolean {\n // console.log(\"(\" + (this._currentUV.x - this._currentStep.x) + \",\" + (this._currentUV.y - this._currentStep.y) + \")\");\n return this.setUV(this._currentUV.x - this._currentStep.x, this._currentUV.y - this._currentStep.y);\n }\n /**\n * Evaluate the functions and derivatives at `X_n = (u_n, v_n)`, and solve the Jacobian matrix equation to\n * compute `dX = (du, dv)`.\n */\n public computeStep(): boolean {\n if (!this._func.evaluate(this._currentUV.x, this._currentUV.y))\n return false;\n const fA = this._func.currentF;\n const jCol0 = fA.vectorU;\n const jCol1 = fA.vectorV;\n const fX = fA.origin;\n // Given X_{n+1} = X_n - dX = X_n - JInv(X_n) F(X_n), we solve J(X_n) dX = F(X_n) for dX:\n if (SmallSystem.linearSystem2d(jCol0.x, jCol1.x, jCol0.y, jCol1.y, fX.x, fX.y, this._currentStep))\n return true;\n return false;\n }\n /**\n * Return the current relative step size, i.e., the larger absolute component of `dX / (1 + |X_n|)`\n */\n public currentStepSize(): number {\n return Geometry.maxAbsXY(\n this._currentStep.x / (1.0 + Math.abs(this._currentUV.x)),\n this._currentStep.y / (1.0 + Math.abs(this._currentUV.y)),\n );\n }\n}\n/**\n * SimpleNewton has static methods for newton methods with evaluated functions presented as immediate arguments\n * (not function object).\n * @internal\n */\nexport class SimpleNewton {\n /**\n * Run a one-dimensional newton iteration with separate functions for function and derivative.\n * * Completion is at 2 (TWO) successive passes at `absoluteTolerance + relTol * abs(x)`, where relTol is\n * chosen internally.\n * * `absoluteTolerance` is usually aggressively tight -- should come into play only for x near zero.\n * * The `relTol` is fluffy (for instance around 1e-11) but in properly converging cases the extra pass after\n * first success normally moves to full machine precision.\n * * This is an open-loop newton -- it just runs, and returns undefined if anything bad happens.\n */\n public static runNewton1D(\n x: number,\n func: (x: number) => number | undefined,\n derivative: (x: number) => number | undefined,\n absoluteTolerance: number = Geometry.smallFloatingPoint,\n ): number | undefined {\n let numConverged = 0;\n let tolerance: number;\n const relTol = 1.0e-11;\n for (let iteration = 0; iteration < 20; iteration++) {\n const f = func(x);\n const df = derivative(x);\n if (f !== undefined && df !== undefined) {\n const dx = Geometry.conditionalDivideCoordinate(f, df);\n if (dx === undefined)\n return undefined;\n x -= dx;\n // console.log(x); // print approximations for debug\n tolerance = absoluteTolerance + Math.abs(x) * relTol;\n if (Math.abs(dx) < tolerance) {\n numConverged++;\n if (dx === 0.0 || numConverged > 1) // bypass convergence count on true 0 dx\n return x;\n } else {\n numConverged = 0;\n }\n }\n }\n return undefined;\n }\n}\n\n/**\n * Class to evaluate XY intersection between 2 curve primitives using the Newton method.\n * @internal\n */\nexport class CurveCurveIntersectionXYRRToRRD extends NewtonEvaluatorRRtoRRD {\n private _curveP: CurvePrimitive;\n private _curveQ: CurvePrimitive;\n private _rayP: Ray3d;\n private _rayQ: Ray3d;\n constructor(curveP: CurvePrimitive, curveQ: CurvePrimitive) {\n super();\n this._curveP = curveP;\n this._curveQ = curveQ;\n this._rayP = Ray3d.createZero();\n this._rayQ = Ray3d.createZero();\n }\n public evaluate(fractionU: number, fractionV: number): boolean {\n /**\n * To find an intersection between xy-curves P(u) = (x_p(u), y_p(u)) and Q(v) = (x_q(v), y_q(v)) we should solve\n * F(u,v) := P(u) - Q(v) = (0,0)\n * Using the Newton method we can find the fractions u and v at the intersection via\n * [u_{n+1}] [u_n] [x_p'(u_n) -x_q'(v_n)] [x_p(u_n) - x_q(v_n)]\n * = - Inv( )\n * [v_{n+1}] [v_n] [y_p'(u_n) -y_q'(v_n)] [y_p(u_n) - y_q(v_n)]\n * Note that this is xy intersection so we can ignore z.\n */\n this._curveP.fractionToPointAndDerivative(fractionU, this._rayP);\n this._curveQ.fractionToPointAndDerivative(fractionV, this._rayQ);\n this.currentF.setOriginAndVectorsXYZ(\n this._rayP.origin.x - this._rayQ.origin.x, this._rayP.origin.y - this._rayQ.origin.y, 0.0,\n this._rayP.direction.x, this._rayP.direction.y, 0.0,\n -this._rayQ.direction.x, -this._rayQ.direction.y, 0.0,\n );\n return true;\n }\n}\n\n/**\n * Class to evaluate XY close approach between a curve primitive and a point using the Newton method.\n * @internal\n */\nexport class CurvePointCloseApproachXYRtoRD extends NewtonEvaluatorRtoRD {\n private _curveP: CurvePrimitive;\n private _pointQ: Point3d;\n private _planeP: Plane3dByOriginAndVectors;\n constructor(curveP: CurvePrimitive, pointQ: Point3d) {\n super();\n this._curveP = curveP;\n this._pointQ = pointQ;\n this._planeP = Plane3dByOriginAndVectors.createXYPlane();\n }\n public evaluate(fractionU: number): boolean {\n /**\n * To find a close approach between xy-curve P(u) and xy-point q we should solve\n * F(u) := P'(u).(P(u) - q) = 0\n * For a solution u, the segment S(u) := P(u) - q is perpendicular to the curve tangent P'(u), which means S(u) is a close approach.\n * Using the Newton method we can find the fractions u at the close approach location via\n * u_{n+1} = u_n + F(u_n)/F'(u_n) = u_n + [ P'(u_n).S(u_n) ]/[ P''(u_n).S(u_n) + P'(u_n).P'(u_n) ]\n * Note that this is xy close approach so we can ignore z.\n */\n this._curveP.fractionToPointAnd2Derivatives(fractionU, this._planeP);\n const segX = this._planeP.origin.x - this._pointQ.x;\n const segY = this._planeP.origin.y - this._pointQ.y;\n const pDerivX = this._planeP.vectorU.x;\n const pDerivY = this._planeP.vectorU.y;\n const p2DerivX = this._planeP.vectorV.x;\n const p2DerivY = this._planeP.vectorV.y;\n this.currentF = pDerivX * segX + pDerivY * segY;\n this.currentdFdX = p2DerivX * segX + pDerivX * pDerivX + p2DerivY * segY + pDerivY * pDerivY;\n return true;\n }\n}\n\n/**\n * Class to evaluate XY close approach between 2 curve primitives using the Newton method.\n * @internal\n */\nexport class CurveCurveCloseApproachXYRRtoRRD extends NewtonEvaluatorRRtoRRD {\n private _curveP: CurvePrimitive;\n private _curveQ: CurvePrimitive;\n private _planeP: Plane3dByOriginAndVectors;\n private _planeQ: Plane3dByOriginAndVectors;\n constructor(curveP: CurvePrimitive, curveQ: CurvePrimitive) {\n super();\n this._curveP = curveP;\n this._curveQ = curveQ;\n this._planeP = Plane3dByOriginAndVectors.createXYPlane();\n this._planeQ = Plane3dByOriginAndVectors.createXYPlane();\n }\n public evaluate(fractionU: number, fractionV: number): boolean {\n /**\n * To find a close approach between xy-curves P(u) and Q(v) we should solve\n * F(u,v) := (P'(u).(P(u) - Q(v)), Q'(v).(P(u) - Q(v))) = (0,0)\n * For a solution (u,v), the segment S(u,v) := P(u) - Q(v) is perpendicular to the curve tangents P'(u) and Q'(v),\n * which means S(u,v) is a close approach.\n * Using the Newton method we can find the fractions u and v at the close approach location via\n * [u_{n+1}] [u_n] [P''(u_n).S(u_n,v_n) + P'(u_n).P'(u_n) -P'(u_n).Q'(v_n)] [P'(u_n).S(u_n,v_n)]\n * = - Inv( )\n * [v_{n+1}] [v_n] [Q'(v_n).P'(u_n) Q''(v_n).S(u_n,v_n) - Q'(v_n).Q'(v_n)] [Q'(v_n).S(u_n,v_n)]\n * Note that this is xy close approach so we can ignore z.\n */\n this._curveP.fractionToPointAnd2Derivatives(fractionU, this._planeP);\n this._curveQ.fractionToPointAnd2Derivatives(fractionV, this._planeQ);\n const segX = this._planeP.origin.x - this._planeQ.origin.x;\n const segY = this._planeP.origin.y - this._planeQ.origin.y;\n const pDerivX = this._planeP.vectorU.x;\n const pDerivY = this._planeP.vectorU.y;\n const qDerivX = this._planeQ.vectorU.x;\n const qDerivY = this._planeQ.vectorU.y;\n const p2DerivX = this._planeP.vectorV.x;\n const p2DerivY = this._planeP.vectorV.y;\n const q2DerivX = this._planeQ.vectorV.x;\n const q2DerivY = this._planeQ.vectorV.y;\n this.currentF.setOriginAndVectorsXYZ(\n pDerivX * segX + pDerivY * segY,\n qDerivX * segX + qDerivY * segY,\n 0.0,\n p2DerivX * segX + p2DerivY * segY + pDerivX * pDerivX + pDerivY * pDerivY,\n qDerivX * pDerivX + qDerivY * pDerivY,\n 0.0,\n -(pDerivX * qDerivX + pDerivY * qDerivY),\n q2DerivX * segX + q2DerivY * segY - qDerivX * qDerivX - qDerivY * qDerivY,\n 0.0,\n );\n return true;\n }\n}\n"]}
@@ -7,6 +7,7 @@
7
7
  * @internal
8
8
  */
9
9
  export class PascalCoefficients {
10
+ static _allRows = [];
10
11
  /**
11
12
  * * return a row of the pascal table.
12
13
  * * The contents must not be altered by the user !!!
@@ -85,5 +86,4 @@ export class PascalCoefficients {
85
86
  return result;
86
87
  }
87
88
  }
88
- PascalCoefficients._allRows = [];
89
89
  //# sourceMappingURL=PascalCoefficients.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PascalCoefficients.js","sourceRoot":"","sources":["../../../src/numerics/PascalCoefficients.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * PascalCoeffients class has static methods which return rows of the PascalTriangle.\r\n * @internal\r\n */\r\nexport class PascalCoefficients {\r\n private static _allRows: Float64Array[] = [];\r\n /**\r\n * * return a row of the pascal table.\r\n * * The contents must not be altered by the user !!!\r\n * * Hypothetically the request row can be any integer.\r\n * * BUT in practice, values 60 create integer entries that are too big for IEEE double.\r\n */\r\n public static getRow(row: number): Float64Array {\r\n const allRows = PascalCoefficients._allRows;\r\n if (allRows.length === 0) {\r\n // seed the table . . .\r\n allRows.push(new Float64Array([1]));\r\n allRows.push(new Float64Array([1, 1]));\r\n allRows.push(new Float64Array([1, 2, 1]));\r\n allRows.push(new Float64Array([1, 3, 3, 1]));\r\n allRows.push(new Float64Array([1, 4, 6, 4, 1]));\r\n allRows.push(new Float64Array([1, 5, 10, 10, 5, 1]));\r\n allRows.push(new Float64Array([1, 6, 15, 20, 15, 6, 1]));\r\n allRows.push(new Float64Array([1, 7, 21, 35, 35, 21, 7, 1]));\r\n }\r\n\r\n while (allRows.length <= row) {\r\n const k = allRows.length;\r\n const oldRow = allRows[k - 1];\r\n const newRow = new Float64Array(k + 1);\r\n newRow[0] = 1.0;\r\n for (let i = 1; i < k; i++)\r\n newRow[i] = oldRow[i - 1] + oldRow[i];\r\n newRow[k] = 1.0;\r\n allRows.push(newRow);\r\n }\r\n return allRows[row];\r\n }\r\n /**\r\n * Return an array with Bezier weighted pascal coefficients\r\n * @param order output size. The index of the row of the Pascal triangle supplying weights is `order - 1`.\r\n * @param u parameter value\r\n * @param result optional destination array of length `order`. If the destination array is too small, a new Float64Array is allocated.\r\n */\r\n public static getBezierBasisValues(order: number, u: number, result?: Float64Array): Float64Array {\r\n const row = order - 1;\r\n const pascalRow = PascalCoefficients.getRow(row);\r\n if (result === undefined || result.length < order)\r\n result = new Float64Array(order);\r\n for (let i = 0; i < order; i++)\r\n result[i] = pascalRow[i];\r\n // multiply by increasing powers of u ...\r\n let p = u;\r\n for (let i = 1; i < order; i++ , p *= u) {\r\n result[i] *= p;\r\n }\r\n // multiply by powers of (1-u), working from right\r\n const v = 1.0 - u;\r\n p = v;\r\n for (let i = order - 2; i >= 0; i-- , p *= v) {\r\n result[i] *= p;\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Return an array with derivatives of Bezier weighted pascal coefficients\r\n * @param order output size. The index of the row of the Pascal triangle supplying weights is `order - 2`.\r\n * @param u parameter value\r\n * @param result optional destination array of length `order`. If the destination array is too small, a new Float64Array is allocated.\r\n */\r\n public static getBezierBasisDerivatives(order: number, u: number, result?: Float64Array): Float64Array {\r\n if (result === undefined || result.length < order)\r\n result = new Float64Array(order);\r\n result = this.getBezierBasisValues(order - 1, u, result);\r\n // derivative is df/du = (order-1 ) * sum ( q[i+1] - q[i]) summed on 0 <= i < order - 1.\\\r\n // evaluate lower order basis, overwrite in place from right to left\r\n const f = order - 1;\r\n result[order - 1] = f * result[order - 2];\r\n for (let k = order - 2; k > 0; k--) {\r\n result[k] = f * (result[k - 1] - result[k]);\r\n }\r\n result[0] = - f * result[0];\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PascalCoefficients.js","sourceRoot":"","sources":["../../../src/numerics/PascalCoefficients.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 * PascalCoeffients class has static methods which return rows of the PascalTriangle.\n * @internal\n */\nexport class PascalCoefficients {\n private static _allRows: Float64Array[] = [];\n /**\n * * return a row of the pascal table.\n * * The contents must not be altered by the user !!!\n * * Hypothetically the request row can be any integer.\n * * BUT in practice, values 60 create integer entries that are too big for IEEE double.\n */\n public static getRow(row: number): Float64Array {\n const allRows = PascalCoefficients._allRows;\n if (allRows.length === 0) {\n // seed the table . . .\n allRows.push(new Float64Array([1]));\n allRows.push(new Float64Array([1, 1]));\n allRows.push(new Float64Array([1, 2, 1]));\n allRows.push(new Float64Array([1, 3, 3, 1]));\n allRows.push(new Float64Array([1, 4, 6, 4, 1]));\n allRows.push(new Float64Array([1, 5, 10, 10, 5, 1]));\n allRows.push(new Float64Array([1, 6, 15, 20, 15, 6, 1]));\n allRows.push(new Float64Array([1, 7, 21, 35, 35, 21, 7, 1]));\n }\n\n while (allRows.length <= row) {\n const k = allRows.length;\n const oldRow = allRows[k - 1];\n const newRow = new Float64Array(k + 1);\n newRow[0] = 1.0;\n for (let i = 1; i < k; i++)\n newRow[i] = oldRow[i - 1] + oldRow[i];\n newRow[k] = 1.0;\n allRows.push(newRow);\n }\n return allRows[row];\n }\n /**\n * Return an array with Bezier weighted pascal coefficients\n * @param order output size. The index of the row of the Pascal triangle supplying weights is `order - 1`.\n * @param u parameter value\n * @param result optional destination array of length `order`. If the destination array is too small, a new Float64Array is allocated.\n */\n public static getBezierBasisValues(order: number, u: number, result?: Float64Array): Float64Array {\n const row = order - 1;\n const pascalRow = PascalCoefficients.getRow(row);\n if (result === undefined || result.length < order)\n result = new Float64Array(order);\n for (let i = 0; i < order; i++)\n result[i] = pascalRow[i];\n // multiply by increasing powers of u ...\n let p = u;\n for (let i = 1; i < order; i++ , p *= u) {\n result[i] *= p;\n }\n // multiply by powers of (1-u), working from right\n const v = 1.0 - u;\n p = v;\n for (let i = order - 2; i >= 0; i-- , p *= v) {\n result[i] *= p;\n }\n return result;\n }\n\n /**\n * Return an array with derivatives of Bezier weighted pascal coefficients\n * @param order output size. The index of the row of the Pascal triangle supplying weights is `order - 2`.\n * @param u parameter value\n * @param result optional destination array of length `order`. If the destination array is too small, a new Float64Array is allocated.\n */\n public static getBezierBasisDerivatives(order: number, u: number, result?: Float64Array): Float64Array {\n if (result === undefined || result.length < order)\n result = new Float64Array(order);\n result = this.getBezierBasisValues(order - 1, u, result);\n // derivative is df/du = (order-1 ) * sum ( q[i+1] - q[i]) summed on 0 <= i < order - 1.\\\n // evaluate lower order basis, overwrite in place from right to left\n const f = order - 1;\n result[order - 1] = f * result[order - 2];\n for (let k = order - 2; k > 0; k--) {\n result[k] = f * (result[k - 1] - result[k]);\n }\n result[0] = - f * result[0];\n return result;\n }\n}\n"]}
@@ -23,7 +23,20 @@ export var ConstraintState;
23
23
  * @internal
24
24
  */
25
25
  export class PolarData {
26
+ static _defaultRadius = 1.0;
26
27
  static get defaultRadius() { return PolarData._defaultRadius; }
28
+ /** x coordinate, possibly unknown */
29
+ x;
30
+ /** y coordinate, possibly unknown */
31
+ y;
32
+ /** radius, possibly unknown */
33
+ r;
34
+ /** angle, possibly unknown */
35
+ theta;
36
+ /** point, line, or arc geometry, as determined by solveFromScalars */
37
+ geometry;
38
+ /** enumeration of resolved state validity conditions. */
39
+ state;
27
40
  /** Count the number of defined values among x,y,r, theta */
28
41
  get numberOfConstrainedScalars() {
29
42
  let n = 0;
@@ -158,5 +171,4 @@ export class PolarData {
158
171
  return result;
159
172
  }
160
173
  }
161
- PolarData._defaultRadius = 1.0;
162
174
  //# sourceMappingURL=PolarData.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PolarData.js","sourceRoot":"","sources":["../../../src/numerics/PolarData.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { Arc3d } from \"../curve/Arc3d\";\r\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\r\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\r\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\r\nimport { Geometry } from \"../Geometry\";\r\nimport { Angle } from \"../geometry3d/Angle\";\r\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\r\n\r\n/** Enumeration of how constraints have been resolved\r\n * @internal\r\n */\r\nexport enum ConstraintState {\r\n unknown = 0,\r\n singlePoint = 1,\r\n impossibleValues = -1,\r\n onCurve = 2,\r\n\r\n}\r\n\r\n/**\r\n * PolarData carries (possibly incomplete) data for converting among polar and cartesian coordinates.\r\n * @internal\r\n */\r\nexport class PolarData {\r\n private static _defaultRadius = 1.0;\r\n public static get defaultRadius(): number { return PolarData._defaultRadius; }\r\n /** x coordinate, possibly unknown */\r\n public x?: number;\r\n /** y coordinate, possibly unknown */\r\n public y?: number;\r\n /** radius, possibly unknown */\r\n public r?: number;\r\n /** angle, possibly unknown */\r\n public theta?: Angle;\r\n /** point, line, or arc geometry, as determined by solveFromScalars */\r\n public geometry?: GeometryQuery;\r\n /** enumeration of resolved state validity conditions. */\r\n public state?: ConstraintState;\r\n /** Count the number of defined values among x,y,r, theta */\r\n public get numberOfConstrainedScalars(): number {\r\n let n = 0;\r\n if (this.x !== undefined) n++;\r\n if (this.y !== undefined) n++;\r\n if (this.r !== undefined) n++;\r\n if (this.theta !== undefined) n++;\r\n return n;\r\n }\r\n /** Create with any combination of known and unknown scalars. */\r\n public static createMixedScalars(state?: ConstraintState, x?: number, y?: number, r?: number, theta?: Angle): PolarData {\r\n const result = new PolarData();\r\n result.x = x;\r\n result.y = y;\r\n result.r = r;\r\n result.theta = theta !== undefined ? theta.clone() : undefined;\r\n result.state = state;\r\n return result;\r\n }\r\n\r\n /** Clone the scalar data, replace the state.\r\n * * Geometry is NOT cloned.\r\n */\r\n public cloneScalarsWithState(newState: ConstraintState): PolarData {\r\n const result = new PolarData();\r\n result.x = this.x;\r\n result.y = this.y;\r\n result.r = this.r;\r\n result.theta = this.theta !== undefined ? this.theta.clone() : undefined;\r\n result.state = newState;\r\n return result;\r\n }\r\n\r\n /** Given a possibly incomplete set of x,y,r,theta, determine the possible completions. */\r\n public static solveFromScalars(known: PolarData): PolarData[] {\r\n const result = [];\r\n // .. fill out known combinations (x,y) (x,r) etc.\r\n // .. any \"singlePoints\" gets created with no geometry, but geometry fills in at end.\r\n // .. \"free on curve\" has curve filled in, with finite curve range controlled by PolarData.defaultRadius.\r\n if (known.x !== undefined) {\r\n if (known.y !== undefined) {\r\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.x, known.y, Geometry.hypotenuseXY(known.x, known.y), Angle.createAtan2(known.y, known.x)));\r\n } else if (known.r !== undefined) {\r\n const rr = known.r * known.r;\r\n const xx = known.x * known.x;\r\n const yy = rr - xx;\r\n if (yy < 0.0) {\r\n result.push(known.cloneScalarsWithState(ConstraintState.impossibleValues));\r\n } else {\r\n const y = Math.sqrt(yy);\r\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.x, y, known.r, Angle.createAtan2(y, known.x)));\r\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.x, -y, known.r, Angle.createAtan2(-y, known.x)));\r\n }\r\n } else if (known.theta !== undefined) {\r\n const r = Geometry.conditionalDivideFraction(known.x, known.theta.cos());\r\n // test 4*theta to isolate either positive or negative PI/2 case ...\r\n if (r === undefined) {\r\n // Anywhere on y axis does has x=0, this angle . . .\r\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\r\n q.geometry = LineSegment3d.createXYXY(0, PolarData._defaultRadius, 0, PolarData._defaultRadius);\r\n } else {\r\n const y = r * known.theta.sin();\r\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.x, y, r, known.theta));\r\n }\r\n } else { // only x known --- fill out a vertical line\r\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\r\n q.geometry = LineSegment3d.createXYZXYZ(known.x, PolarData._defaultRadius, 0, known.x, PolarData._defaultRadius, 0);\r\n }\r\n } else if (known.y !== undefined) { // and we already know x is undefined .....\r\n if (known.r !== undefined) {\r\n const rr = known.r * known.r;\r\n const yy = known.y * known.y;\r\n const xx = rr - yy;\r\n if (xx < 0.0) {\r\n result.push(known.cloneScalarsWithState(ConstraintState.impossibleValues));\r\n } else {\r\n const x = Math.sqrt(xx);\r\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, x, known.y, known.r, Angle.createAtan2(known.y, x)));\r\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, -x, known.y, known.r, Angle.createAtan2(known.y, -x)));\r\n }\r\n } else if (known.theta !== undefined) {\r\n const r = Geometry.conditionalDivideFraction(known.y, known.theta.sin());\r\n // test 4*theta to isolate either positive or negative PI/2 case ...\r\n if (r === undefined) {\r\n // Anywhere on y axis does has x=0, this angle . . .\r\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\r\n q.geometry = LineSegment3d.createXYZXYZ(0, PolarData._defaultRadius, 0, 0, PolarData._defaultRadius, 0);\r\n } else {\r\n const x = r * known.theta.cos();\r\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, x, known.y, r, known.theta));\r\n }\r\n } else { // only x known --- fill out a horizontal line\r\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\r\n q.geometry = LineSegment3d.createXYZXYZ(PolarData._defaultRadius, known.y, 0, PolarData._defaultRadius, known.y, 0);\r\n }\r\n } else if (known.r !== undefined) {\r\n if (known.theta !== undefined) {\r\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.r * known.theta.cos(), known.r * known.theta.sin(), known.r, known.theta));\r\n } else {\r\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\r\n q.geometry = Arc3d.createXY(Point3d.create(0, 0, 0), known.r);\r\n result.push(q);\r\n }\r\n } else if (known.theta !== undefined) {\r\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\r\n const x = PolarData._defaultRadius * known.theta.cos();\r\n const y = PolarData._defaultRadius * known.theta.sin();\r\n q.geometry = LineSegment3d.createXYXY(-x, -y, x, y);\r\n result.push(q);\r\n }\r\n // ----------------------------------------------------------------------------------------\r\n // add tangible geometry to single points ...\r\n for (const r of result) {\r\n if (r.state === ConstraintState.singlePoint && r.geometry === undefined)\r\n r.geometry = CoordinateXYZ.createXYZ(r.x, r.y, 0.0);\r\n }\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PolarData.js","sourceRoot":"","sources":["../../../src/numerics/PolarData.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*--------------------------------------------------------------------------------------------*/\nimport { Arc3d } from \"../curve/Arc3d\";\nimport { CoordinateXYZ } from \"../curve/CoordinateXYZ\";\nimport { GeometryQuery } from \"../curve/GeometryQuery\";\nimport { LineSegment3d } from \"../curve/LineSegment3d\";\nimport { Geometry } from \"../Geometry\";\nimport { Angle } from \"../geometry3d/Angle\";\nimport { Point3d } from \"../geometry3d/Point3dVector3d\";\n\n/** Enumeration of how constraints have been resolved\n * @internal\n */\nexport enum ConstraintState {\n unknown = 0,\n singlePoint = 1,\n impossibleValues = -1,\n onCurve = 2,\n\n}\n\n/**\n * PolarData carries (possibly incomplete) data for converting among polar and cartesian coordinates.\n * @internal\n */\nexport class PolarData {\n private static _defaultRadius = 1.0;\n public static get defaultRadius(): number { return PolarData._defaultRadius; }\n /** x coordinate, possibly unknown */\n public x?: number;\n /** y coordinate, possibly unknown */\n public y?: number;\n /** radius, possibly unknown */\n public r?: number;\n /** angle, possibly unknown */\n public theta?: Angle;\n /** point, line, or arc geometry, as determined by solveFromScalars */\n public geometry?: GeometryQuery;\n /** enumeration of resolved state validity conditions. */\n public state?: ConstraintState;\n /** Count the number of defined values among x,y,r, theta */\n public get numberOfConstrainedScalars(): number {\n let n = 0;\n if (this.x !== undefined) n++;\n if (this.y !== undefined) n++;\n if (this.r !== undefined) n++;\n if (this.theta !== undefined) n++;\n return n;\n }\n /** Create with any combination of known and unknown scalars. */\n public static createMixedScalars(state?: ConstraintState, x?: number, y?: number, r?: number, theta?: Angle): PolarData {\n const result = new PolarData();\n result.x = x;\n result.y = y;\n result.r = r;\n result.theta = theta !== undefined ? theta.clone() : undefined;\n result.state = state;\n return result;\n }\n\n /** Clone the scalar data, replace the state.\n * * Geometry is NOT cloned.\n */\n public cloneScalarsWithState(newState: ConstraintState): PolarData {\n const result = new PolarData();\n result.x = this.x;\n result.y = this.y;\n result.r = this.r;\n result.theta = this.theta !== undefined ? this.theta.clone() : undefined;\n result.state = newState;\n return result;\n }\n\n /** Given a possibly incomplete set of x,y,r,theta, determine the possible completions. */\n public static solveFromScalars(known: PolarData): PolarData[] {\n const result = [];\n // .. fill out known combinations (x,y) (x,r) etc.\n // .. any \"singlePoints\" gets created with no geometry, but geometry fills in at end.\n // .. \"free on curve\" has curve filled in, with finite curve range controlled by PolarData.defaultRadius.\n if (known.x !== undefined) {\n if (known.y !== undefined) {\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.x, known.y, Geometry.hypotenuseXY(known.x, known.y), Angle.createAtan2(known.y, known.x)));\n } else if (known.r !== undefined) {\n const rr = known.r * known.r;\n const xx = known.x * known.x;\n const yy = rr - xx;\n if (yy < 0.0) {\n result.push(known.cloneScalarsWithState(ConstraintState.impossibleValues));\n } else {\n const y = Math.sqrt(yy);\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.x, y, known.r, Angle.createAtan2(y, known.x)));\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.x, -y, known.r, Angle.createAtan2(-y, known.x)));\n }\n } else if (known.theta !== undefined) {\n const r = Geometry.conditionalDivideFraction(known.x, known.theta.cos());\n // test 4*theta to isolate either positive or negative PI/2 case ...\n if (r === undefined) {\n // Anywhere on y axis does has x=0, this angle . . .\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\n q.geometry = LineSegment3d.createXYXY(0, PolarData._defaultRadius, 0, PolarData._defaultRadius);\n } else {\n const y = r * known.theta.sin();\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.x, y, r, known.theta));\n }\n } else { // only x known --- fill out a vertical line\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\n q.geometry = LineSegment3d.createXYZXYZ(known.x, PolarData._defaultRadius, 0, known.x, PolarData._defaultRadius, 0);\n }\n } else if (known.y !== undefined) { // and we already know x is undefined .....\n if (known.r !== undefined) {\n const rr = known.r * known.r;\n const yy = known.y * known.y;\n const xx = rr - yy;\n if (xx < 0.0) {\n result.push(known.cloneScalarsWithState(ConstraintState.impossibleValues));\n } else {\n const x = Math.sqrt(xx);\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, x, known.y, known.r, Angle.createAtan2(known.y, x)));\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, -x, known.y, known.r, Angle.createAtan2(known.y, -x)));\n }\n } else if (known.theta !== undefined) {\n const r = Geometry.conditionalDivideFraction(known.y, known.theta.sin());\n // test 4*theta to isolate either positive or negative PI/2 case ...\n if (r === undefined) {\n // Anywhere on y axis does has x=0, this angle . . .\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\n q.geometry = LineSegment3d.createXYZXYZ(0, PolarData._defaultRadius, 0, 0, PolarData._defaultRadius, 0);\n } else {\n const x = r * known.theta.cos();\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, x, known.y, r, known.theta));\n }\n } else { // only x known --- fill out a horizontal line\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\n q.geometry = LineSegment3d.createXYZXYZ(PolarData._defaultRadius, known.y, 0, PolarData._defaultRadius, known.y, 0);\n }\n } else if (known.r !== undefined) {\n if (known.theta !== undefined) {\n result.push(PolarData.createMixedScalars(ConstraintState.singlePoint, known.r * known.theta.cos(), known.r * known.theta.sin(), known.r, known.theta));\n } else {\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\n q.geometry = Arc3d.createXY(Point3d.create(0, 0, 0), known.r);\n result.push(q);\n }\n } else if (known.theta !== undefined) {\n const q = known.cloneScalarsWithState(ConstraintState.onCurve);\n const x = PolarData._defaultRadius * known.theta.cos();\n const y = PolarData._defaultRadius * known.theta.sin();\n q.geometry = LineSegment3d.createXYXY(-x, -y, x, y);\n result.push(q);\n }\n // ----------------------------------------------------------------------------------------\n // add tangible geometry to single points ...\n for (const r of result) {\n if (r.state === ConstraintState.singlePoint && r.geometry === undefined)\n r.geometry = CoordinateXYZ.createXYZ(r.x, r.y, 0.0);\n }\n return result;\n }\n}\n"]}
@@ -20,6 +20,8 @@ import { Range1d, Range3d } from "../geometry3d/Range";
20
20
  * @internal
21
21
  */
22
22
  export class Degree2PowerPolynomial {
23
+ /** The three coefficients for the quadratic */
24
+ coffs;
23
25
  constructor(c0 = 0, c1 = 0, c2 = 0) {
24
26
  this.coffs = [c0, c1, c2];
25
27
  }
@@ -102,6 +104,8 @@ export class Degree2PowerPolynomial {
102
104
  * @internal
103
105
  */
104
106
  export class Degree3PowerPolynomial {
107
+ /** polynomial coefficients, index corresponds to power */
108
+ coffs;
105
109
  constructor(c0 = 0, c1 = 0, c2 = 0, c3 = 1) {
106
110
  this.coffs = [c0, c1, c2, c3];
107
111
  }
@@ -139,6 +143,8 @@ export class Degree3PowerPolynomial {
139
143
  * @internal
140
144
  */
141
145
  export class Degree4PowerPolynomial {
146
+ /** polynomial coefficients, index corresponds to power */
147
+ coffs;
142
148
  constructor(c0 = 0, c1 = 0, c2 = 0, c3 = 0, c4 = 0) {
143
149
  this.coffs = [c0, c1, c2, c3, c4];
144
150
  }
@@ -177,6 +183,10 @@ export class Degree4PowerPolynomial {
177
183
  * @internal
178
184
  */
179
185
  export class TorusImplicit {
186
+ /** major (xy plane) radius */
187
+ majorRadius;
188
+ /** hoop (perpendicular to major circle) radius */
189
+ minorRadius;
180
190
  constructor(majorRadius, minorRadius) {
181
191
  this.majorRadius = majorRadius;
182
192
  this.minorRadius = minorRadius;
@@ -292,6 +302,8 @@ export class TorusImplicit {
292
302
  * @internal
293
303
  */
294
304
  export class SphereImplicit {
305
+ /** Radius of sphere. */
306
+ radius;
295
307
  constructor(r) { this.radius = r; }
296
308
  /** Evaluate the implicit function at coordinates x,y,z */
297
309
  evaluateImplicitFunction(x, y, z) {
@@ -507,6 +519,8 @@ export class SphereImplicit {
507
519
  *
508
520
  */
509
521
  export class AnalyticRoots {
522
+ static _EQN_EPS = 1.0e-9;
523
+ static _safeDivideFactor = 1.0e-14;
510
524
  /** Absolute zero test with a tolerance that has worked well for the analytic root use case . . . */
511
525
  static isZero(x) {
512
526
  return Math.abs(x) < this._EQN_EPS;
@@ -979,8 +993,6 @@ export class AnalyticRoots {
979
993
  return solutionType;
980
994
  }
981
995
  }
982
- AnalyticRoots._EQN_EPS = 1.0e-9;
983
- AnalyticRoots._safeDivideFactor = 1.0e-14;
984
996
  /**
985
997
  * Manipulations of polynomials with where `coff[i]` multiplies x^i
986
998
  * @internal
@@ -1027,6 +1039,29 @@ export class PowerPolynomial {
1027
1039
  * @internal
1028
1040
  */
1029
1041
  export class TrigPolynomial {
1042
+ // tolerance for small angle decision.
1043
+ static _smallAngle = 1.0e-11;
1044
+ // see core\geometry\internaldocs\unitCircleEllipseIntersection.md for derivation of these coefficients.
1045
+ /** Standard Basis coefficients for the numerator of the y-coordinate y(t) = S(t)/W(t) in the rational semicircle parameterization. */
1046
+ static S = Float64Array.from([0.0, 2.0, -2.0]);
1047
+ /** Standard Basis coefficients for the numerator of the x-coordinate x(t) = C(t)/W(t) in the rational semicircle parameterization. */
1048
+ static C = Float64Array.from([1.0, -2.0]);
1049
+ /** Standard Basis coefficients for the denominator of x(t) and y(t) in the rational semicircle parameterization. */
1050
+ static W = Float64Array.from([1.0, -2.0, 2.0]);
1051
+ /** Standard Basis coefficients for C(t) * W(t). */
1052
+ static CW = Float64Array.from([1.0, -4.0, 6.0, -4.0]);
1053
+ /** Standard Basis coefficients for S(t) * W(t). */
1054
+ static SW = Float64Array.from([0.0, 2.0, -6.0, 8.0, -4.0]);
1055
+ /** Standard Basis coefficients for S(t) * C(t). */
1056
+ static SC = Float64Array.from([0.0, 2.0, -6.0, 4.0]);
1057
+ /** Standard Basis coefficients for S(t) * S(t). */
1058
+ static SS = Float64Array.from([0.0, 0.0, 4.0, -8.0, 4.0]);
1059
+ /** Standard Basis coefficients for C(t) * C(t). */
1060
+ static CC = Float64Array.from([1.0, -4.0, 4.0]);
1061
+ /** Standard Basis coefficients for W(t) * W(t). */
1062
+ static WW = Float64Array.from([1.0, -4.0, 8.0, -8.0, 4.0]);
1063
+ /** Standard Basis coefficients for C(t) * C(t) - S(t) * S(t). */
1064
+ static CCMinusSS = Float64Array.from([1.0, -4.0, 0.0, 8.0, -4.0]); // eslint-disable-line @typescript-eslint/naming-convention
1030
1065
  /**
1031
1066
  * Find the roots of a univariate polynomial created from substituting the rational parameterization of the unit
1032
1067
  * circle into a trigonometric polynomial. Roots are returned as radian angles.
@@ -1096,6 +1131,7 @@ export class TrigPolynomial {
1096
1131
  }
1097
1132
  return radians.length > 0;
1098
1133
  }
1134
+ static _coefficientRelTol = 1.0e-12;
1099
1135
  /**
1100
1136
  * Compute intersections of the unit circle `x^2 + y^2 = 1` with the general quadric (conic)
1101
1137
  * `axx x^2 + axy xy + ayy y^2 + ax x + ay y + a = 0`.
@@ -1207,36 +1243,20 @@ export class TrigPolynomial {
1207
1243
  return status;
1208
1244
  }
1209
1245
  }
1210
- // tolerance for small angle decision.
1211
- TrigPolynomial._smallAngle = 1.0e-11;
1212
- // see core\geometry\internaldocs\unitCircleEllipseIntersection.md for derivation of these coefficients.
1213
- /** Standard Basis coefficients for the numerator of the y-coordinate y(t) = S(t)/W(t) in the rational semicircle parameterization. */
1214
- TrigPolynomial.S = Float64Array.from([0.0, 2.0, -2.0]);
1215
- /** Standard Basis coefficients for the numerator of the x-coordinate x(t) = C(t)/W(t) in the rational semicircle parameterization. */
1216
- TrigPolynomial.C = Float64Array.from([1.0, -2.0]);
1217
- /** Standard Basis coefficients for the denominator of x(t) and y(t) in the rational semicircle parameterization. */
1218
- TrigPolynomial.W = Float64Array.from([1.0, -2.0, 2.0]);
1219
- /** Standard Basis coefficients for C(t) * W(t). */
1220
- TrigPolynomial.CW = Float64Array.from([1.0, -4.0, 6.0, -4.0]);
1221
- /** Standard Basis coefficients for S(t) * W(t). */
1222
- TrigPolynomial.SW = Float64Array.from([0.0, 2.0, -6.0, 8.0, -4.0]);
1223
- /** Standard Basis coefficients for S(t) * C(t). */
1224
- TrigPolynomial.SC = Float64Array.from([0.0, 2.0, -6.0, 4.0]);
1225
- /** Standard Basis coefficients for S(t) * S(t). */
1226
- TrigPolynomial.SS = Float64Array.from([0.0, 0.0, 4.0, -8.0, 4.0]);
1227
- /** Standard Basis coefficients for C(t) * C(t). */
1228
- TrigPolynomial.CC = Float64Array.from([1.0, -4.0, 4.0]);
1229
- /** Standard Basis coefficients for W(t) * W(t). */
1230
- TrigPolynomial.WW = Float64Array.from([1.0, -4.0, 8.0, -8.0, 4.0]);
1231
- /** Standard Basis coefficients for C(t) * C(t) - S(t) * S(t). */
1232
- TrigPolynomial.CCMinusSS = Float64Array.from([1.0, -4.0, 0.0, 8.0, -4.0]); // eslint-disable-line @typescript-eslint/naming-convention
1233
- TrigPolynomial._coefficientRelTol = 1.0e-12;
1234
1246
  /**
1235
1247
  * * bilinear expression
1236
1248
  * * `f(u,v) = a + b * u * c * v + d * u * v`
1237
1249
  * @internal
1238
1250
  */
1239
1251
  export class BilinearPolynomial {
1252
+ /** constant coefficient */
1253
+ a;
1254
+ /** u coefficient */
1255
+ b;
1256
+ /** v coefficient */
1257
+ c;
1258
+ /** uv coefficient */
1259
+ d;
1240
1260
  /**
1241
1261
  *
1242
1262
  * @param a constant coefficient
@@ -1303,6 +1323,12 @@ export class BilinearPolynomial {
1303
1323
  * @internal
1304
1324
  */
1305
1325
  export class SineCosinePolynomial {
1326
+ /** constant coefficient */
1327
+ a;
1328
+ /** cosine coefficient */
1329
+ cosineCoff;
1330
+ /** sine coefficient */
1331
+ sineCoff;
1306
1332
  /**
1307
1333
  *
1308
1334
  * @param a constant coefficient
@@ -1363,6 +1389,18 @@ export class SineCosinePolynomial {
1363
1389
  * @internal
1364
1390
  */
1365
1391
  export class ImplicitLineXY {
1392
+ /**
1393
+ * constant coefficient
1394
+ */
1395
+ a;
1396
+ /**
1397
+ * x coefficient
1398
+ */
1399
+ ax;
1400
+ /**
1401
+ * y coefficient
1402
+ */
1403
+ ay;
1366
1404
  /** construct the ImplicitLineXY from coefficients */
1367
1405
  constructor(a, ax, ay) {
1368
1406
  this.a = a;