@itwin/core-geometry 4.0.0-dev.54 → 4.0.0-dev.56

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 (489) hide show
  1. package/lib/cjs/Constant.js.map +1 -1
  2. package/lib/cjs/Geometry.d.ts +5 -1
  3. package/lib/cjs/Geometry.d.ts.map +1 -1
  4. package/lib/cjs/Geometry.js +5 -1
  5. package/lib/cjs/Geometry.js.map +1 -1
  6. package/lib/cjs/bspline/AkimaCurve3d.js.map +1 -1
  7. package/lib/cjs/bspline/BSpline1dNd.js.map +1 -1
  8. package/lib/cjs/bspline/BSplineCurve.js.map +1 -1
  9. package/lib/cjs/bspline/BSplineCurve3dH.js.map +1 -1
  10. package/lib/cjs/bspline/BSplineCurveOps.js.map +1 -1
  11. package/lib/cjs/bspline/BSplineSurface.js.map +1 -1
  12. package/lib/cjs/bspline/Bezier1dNd.js.map +1 -1
  13. package/lib/cjs/bspline/BezierCurve3d.js.map +1 -1
  14. package/lib/cjs/bspline/BezierCurve3dH.js.map +1 -1
  15. package/lib/cjs/bspline/BezierCurveBase.js.map +1 -1
  16. package/lib/cjs/bspline/InterpolationCurve3d.js.map +1 -1
  17. package/lib/cjs/bspline/KnotVector.js.map +1 -1
  18. package/lib/cjs/bspline/SurfaceLocationDetail.js.map +1 -1
  19. package/lib/cjs/clipping/AlternatingConvexClipTree.js.map +1 -1
  20. package/lib/cjs/clipping/BooleanClipFactory.js.map +1 -1
  21. package/lib/cjs/clipping/BooleanClipNode.js.map +1 -1
  22. package/lib/cjs/clipping/ClipPlane.js.map +1 -1
  23. package/lib/cjs/clipping/ClipPrimitive.js.map +1 -1
  24. package/lib/cjs/clipping/ClipUtils.js.map +1 -1
  25. package/lib/cjs/clipping/ClipVector.js.map +1 -1
  26. package/lib/cjs/clipping/ConvexClipPlaneSet.js.map +1 -1
  27. package/lib/cjs/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  28. package/lib/cjs/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  29. package/lib/cjs/core-geometry.js.map +1 -1
  30. package/lib/cjs/curve/Arc3d.js.map +1 -1
  31. package/lib/cjs/curve/ChainCollectorContext.js.map +1 -1
  32. package/lib/cjs/curve/ConstructCurveBetweenCurves.js.map +1 -1
  33. package/lib/cjs/curve/CoordinateXYZ.js.map +1 -1
  34. package/lib/cjs/curve/CurveChain.js.map +1 -1
  35. package/lib/cjs/curve/CurveChainWithDistanceIndex.js.map +1 -1
  36. package/lib/cjs/curve/CurveCollection.js.map +1 -1
  37. package/lib/cjs/curve/CurveCurve.js.map +1 -1
  38. package/lib/cjs/curve/CurveCurveCloseApproachXY.js.map +1 -1
  39. package/lib/cjs/curve/CurveCurveIntersectXY.js.map +1 -1
  40. package/lib/cjs/curve/CurveCurveIntersectXYZ.js.map +1 -1
  41. package/lib/cjs/curve/CurveExtendMode.js.map +1 -1
  42. package/lib/cjs/curve/CurveFactory.js.map +1 -1
  43. package/lib/cjs/curve/CurveLocationDetail.js.map +1 -1
  44. package/lib/cjs/curve/CurvePrimitive.js.map +1 -1
  45. package/lib/cjs/curve/CurveProcessor.js.map +1 -1
  46. package/lib/cjs/curve/CurveWireMomentsXYZ.js.map +1 -1
  47. package/lib/cjs/curve/GeometryQuery.js.map +1 -1
  48. package/lib/cjs/curve/LineSegment3d.js.map +1 -1
  49. package/lib/cjs/curve/LineString3d.js.map +1 -1
  50. package/lib/cjs/curve/Loop.js.map +1 -1
  51. package/lib/cjs/curve/ParityRegion.js.map +1 -1
  52. package/lib/cjs/curve/Path.js.map +1 -1
  53. package/lib/cjs/curve/PointString3d.js.map +1 -1
  54. package/lib/cjs/curve/ProxyCurve.js.map +1 -1
  55. package/lib/cjs/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  56. package/lib/cjs/curve/Query/CurveSplitContext.js.map +1 -1
  57. package/lib/cjs/curve/Query/CylindricalRange.js.map +1 -1
  58. package/lib/cjs/curve/Query/InOutTests.js.map +1 -1
  59. package/lib/cjs/curve/Query/PlanarSubdivision.js.map +1 -1
  60. package/lib/cjs/curve/Query/StrokeCountChain.js.map +1 -1
  61. package/lib/cjs/curve/Query/StrokeCountMap.js.map +1 -1
  62. package/lib/cjs/curve/RegionMomentsXY.js.map +1 -1
  63. package/lib/cjs/curve/RegionOps.js.map +1 -1
  64. package/lib/cjs/curve/RegionOpsClassificationSweeps.js.map +1 -1
  65. package/lib/cjs/curve/StrokeOptions.js.map +1 -1
  66. package/lib/cjs/curve/UnionRegion.js.map +1 -1
  67. package/lib/cjs/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  68. package/lib/cjs/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  69. package/lib/cjs/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  70. package/lib/cjs/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  71. package/lib/cjs/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  72. package/lib/cjs/curve/internalContexts/CurveLengthContext.js.map +1 -1
  73. package/lib/cjs/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  74. package/lib/cjs/curve/internalContexts/GapSearchContext.js.map +1 -1
  75. package/lib/cjs/curve/internalContexts/MultiChainCollector.js.map +1 -1
  76. package/lib/cjs/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  77. package/lib/cjs/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  78. package/lib/cjs/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  79. package/lib/cjs/curve/internalContexts/SumLengthsContext.js.map +1 -1
  80. package/lib/cjs/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  81. package/lib/cjs/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  82. package/lib/cjs/curve/spiral/ClothoidSeries.js.map +1 -1
  83. package/lib/cjs/curve/spiral/CubicEvaluator.js.map +1 -1
  84. package/lib/cjs/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  85. package/lib/cjs/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  86. package/lib/cjs/curve/spiral/DirectSpiral3d.js.map +1 -1
  87. package/lib/cjs/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  88. package/lib/cjs/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  89. package/lib/cjs/curve/spiral/NormalizedTransition.js.map +1 -1
  90. package/lib/cjs/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  91. package/lib/cjs/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  92. package/lib/cjs/curve/spiral/TransitionSpiral3d.js.map +1 -1
  93. package/lib/cjs/curve/spiral/XYCurveEvaluator.js.map +1 -1
  94. package/lib/cjs/geometry3d/Angle.d.ts +29 -34
  95. package/lib/cjs/geometry3d/Angle.d.ts.map +1 -1
  96. package/lib/cjs/geometry3d/Angle.js +31 -36
  97. package/lib/cjs/geometry3d/Angle.js.map +1 -1
  98. package/lib/cjs/geometry3d/AngleSweep.d.ts +48 -43
  99. package/lib/cjs/geometry3d/AngleSweep.d.ts.map +1 -1
  100. package/lib/cjs/geometry3d/AngleSweep.js +48 -43
  101. package/lib/cjs/geometry3d/AngleSweep.js.map +1 -1
  102. package/lib/cjs/geometry3d/BarycentricTriangle.js.map +1 -1
  103. package/lib/cjs/geometry3d/BilinearPatch.js.map +1 -1
  104. package/lib/cjs/geometry3d/CoincidentGeometryOps.js.map +1 -1
  105. package/lib/cjs/geometry3d/Ellipsoid.js.map +1 -1
  106. package/lib/cjs/geometry3d/FrameBuilder.js.map +1 -1
  107. package/lib/cjs/geometry3d/FrustumAnimation.js.map +1 -1
  108. package/lib/cjs/geometry3d/GeometryHandler.js.map +1 -1
  109. package/lib/cjs/geometry3d/GrowableBlockedArray.js.map +1 -1
  110. package/lib/cjs/geometry3d/GrowableFloat64Array.js.map +1 -1
  111. package/lib/cjs/geometry3d/GrowableXYArray.js.map +1 -1
  112. package/lib/cjs/geometry3d/GrowableXYZArray.js.map +1 -1
  113. package/lib/cjs/geometry3d/IndexedCollectionInterval.js.map +1 -1
  114. package/lib/cjs/geometry3d/IndexedXYCollection.js.map +1 -1
  115. package/lib/cjs/geometry3d/IndexedXYZCollection.js.map +1 -1
  116. package/lib/cjs/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  117. package/lib/cjs/geometry3d/Matrix3d.d.ts +5 -8
  118. package/lib/cjs/geometry3d/Matrix3d.d.ts.map +1 -1
  119. package/lib/cjs/geometry3d/Matrix3d.js +5 -8
  120. package/lib/cjs/geometry3d/Matrix3d.js.map +1 -1
  121. package/lib/cjs/geometry3d/OrderedRotationAngles.d.ts +3 -3
  122. package/lib/cjs/geometry3d/OrderedRotationAngles.d.ts.map +1 -1
  123. package/lib/cjs/geometry3d/OrderedRotationAngles.js +3 -3
  124. package/lib/cjs/geometry3d/OrderedRotationAngles.js.map +1 -1
  125. package/lib/cjs/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  126. package/lib/cjs/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  127. package/lib/cjs/geometry3d/Point2dArrayCarrier.d.ts +8 -10
  128. package/lib/cjs/geometry3d/Point2dArrayCarrier.d.ts.map +1 -1
  129. package/lib/cjs/geometry3d/Point2dArrayCarrier.js +8 -10
  130. package/lib/cjs/geometry3d/Point2dArrayCarrier.js.map +1 -1
  131. package/lib/cjs/geometry3d/Point2dVector2d.d.ts +37 -34
  132. package/lib/cjs/geometry3d/Point2dVector2d.d.ts.map +1 -1
  133. package/lib/cjs/geometry3d/Point2dVector2d.js +38 -35
  134. package/lib/cjs/geometry3d/Point2dVector2d.js.map +1 -1
  135. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts +17 -21
  136. package/lib/cjs/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  137. package/lib/cjs/geometry3d/Point3dArrayCarrier.js +16 -20
  138. package/lib/cjs/geometry3d/Point3dArrayCarrier.js.map +1 -1
  139. package/lib/cjs/geometry3d/Point3dVector3d.d.ts +84 -67
  140. package/lib/cjs/geometry3d/Point3dVector3d.d.ts.map +1 -1
  141. package/lib/cjs/geometry3d/Point3dVector3d.js +84 -67
  142. package/lib/cjs/geometry3d/Point3dVector3d.js.map +1 -1
  143. package/lib/cjs/geometry3d/PointHelpers.js.map +1 -1
  144. package/lib/cjs/geometry3d/PointStreaming.js.map +1 -1
  145. package/lib/cjs/geometry3d/PolygonOps.js.map +1 -1
  146. package/lib/cjs/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  147. package/lib/cjs/geometry3d/PolylineOps.js.map +1 -1
  148. package/lib/cjs/geometry3d/Range.js.map +1 -1
  149. package/lib/cjs/geometry3d/Ray3d.js.map +1 -1
  150. package/lib/cjs/geometry3d/ReusableObjectCache.js.map +1 -1
  151. package/lib/cjs/geometry3d/Segment1d.js.map +1 -1
  152. package/lib/cjs/geometry3d/SortablePolygon.js.map +1 -1
  153. package/lib/cjs/geometry3d/Transform.d.ts +76 -66
  154. package/lib/cjs/geometry3d/Transform.d.ts.map +1 -1
  155. package/lib/cjs/geometry3d/Transform.js +88 -77
  156. package/lib/cjs/geometry3d/Transform.js.map +1 -1
  157. package/lib/cjs/geometry3d/UVSurfaceOps.js.map +1 -1
  158. package/lib/cjs/geometry3d/XYZProps.js.map +1 -1
  159. package/lib/cjs/geometry3d/YawPitchRollAngles.d.ts +15 -16
  160. package/lib/cjs/geometry3d/YawPitchRollAngles.d.ts.map +1 -1
  161. package/lib/cjs/geometry3d/YawPitchRollAngles.js +14 -15
  162. package/lib/cjs/geometry3d/YawPitchRollAngles.js.map +1 -1
  163. package/lib/cjs/geometry4d/Map4d.js.map +1 -1
  164. package/lib/cjs/geometry4d/Matrix4d.js.map +1 -1
  165. package/lib/cjs/geometry4d/MomentData.js.map +1 -1
  166. package/lib/cjs/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  167. package/lib/cjs/geometry4d/Point4d.js.map +1 -1
  168. package/lib/cjs/numerics/BandedSystem.js.map +1 -1
  169. package/lib/cjs/numerics/BezierPolynomials.js.map +1 -1
  170. package/lib/cjs/numerics/ClusterableArray.js.map +1 -1
  171. package/lib/cjs/numerics/Complex.js.map +1 -1
  172. package/lib/cjs/numerics/ConvexPolygon2d.js.map +1 -1
  173. package/lib/cjs/numerics/Newton.js.map +1 -1
  174. package/lib/cjs/numerics/PascalCoefficients.js.map +1 -1
  175. package/lib/cjs/numerics/PolarData.js.map +1 -1
  176. package/lib/cjs/numerics/Polynomials.js.map +1 -1
  177. package/lib/cjs/numerics/Quadrature.js.map +1 -1
  178. package/lib/cjs/numerics/Range1dArray.js.map +1 -1
  179. package/lib/cjs/numerics/TriDiagonalSystem.js.map +1 -1
  180. package/lib/cjs/numerics/UnionFind.js.map +1 -1
  181. package/lib/cjs/numerics/UsageSums.js.map +1 -1
  182. package/lib/cjs/polyface/AuxData.js.map +1 -1
  183. package/lib/cjs/polyface/BoxTopology.js.map +1 -1
  184. package/lib/cjs/polyface/FacetFaceData.js.map +1 -1
  185. package/lib/cjs/polyface/FacetLocationDetail.js.map +1 -1
  186. package/lib/cjs/polyface/FacetOrientation.js.map +1 -1
  187. package/lib/cjs/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  188. package/lib/cjs/polyface/IndexedEdgeMatcher.js.map +1 -1
  189. package/lib/cjs/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  190. package/lib/cjs/polyface/Polyface.js.map +1 -1
  191. package/lib/cjs/polyface/PolyfaceBuilder.js.map +1 -1
  192. package/lib/cjs/polyface/PolyfaceClip.js.map +1 -1
  193. package/lib/cjs/polyface/PolyfaceData.js.map +1 -1
  194. package/lib/cjs/polyface/PolyfaceQuery.js.map +1 -1
  195. package/lib/cjs/polyface/RangeLengthData.js.map +1 -1
  196. package/lib/cjs/polyface/TaggedNumericData.js.map +1 -1
  197. package/lib/cjs/polyface/TriangleCandidate.js.map +1 -1
  198. package/lib/cjs/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  199. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  200. package/lib/cjs/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  201. package/lib/cjs/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  202. package/lib/cjs/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  203. package/lib/cjs/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  204. package/lib/cjs/polyface/multiclip/RangeSearch.js.map +1 -1
  205. package/lib/cjs/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  206. package/lib/cjs/polyface/multiclip/XYPointBuckets.js.map +1 -1
  207. package/lib/cjs/serialization/BGFBAccessors.js.map +1 -1
  208. package/lib/cjs/serialization/BGFBReader.js.map +1 -1
  209. package/lib/cjs/serialization/BGFBWriter.js.map +1 -1
  210. package/lib/cjs/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  211. package/lib/cjs/serialization/DeepCompare.js.map +1 -1
  212. package/lib/cjs/serialization/GeometrySamples.d.ts +72 -58
  213. package/lib/cjs/serialization/GeometrySamples.d.ts.map +1 -1
  214. package/lib/cjs/serialization/GeometrySamples.js +132 -108
  215. package/lib/cjs/serialization/GeometrySamples.js.map +1 -1
  216. package/lib/cjs/serialization/IModelJsonSchema.js.map +1 -1
  217. package/lib/cjs/solid/Box.js.map +1 -1
  218. package/lib/cjs/solid/Cone.js.map +1 -1
  219. package/lib/cjs/solid/LinearSweep.js.map +1 -1
  220. package/lib/cjs/solid/RotationalSweep.js.map +1 -1
  221. package/lib/cjs/solid/RuledSweep.js.map +1 -1
  222. package/lib/cjs/solid/SolidPrimitive.js.map +1 -1
  223. package/lib/cjs/solid/Sphere.js.map +1 -1
  224. package/lib/cjs/solid/SweepContour.js.map +1 -1
  225. package/lib/cjs/solid/TorusPipe.js.map +1 -1
  226. package/lib/cjs/topology/ChainMerge.js.map +1 -1
  227. package/lib/cjs/topology/Graph.js.map +1 -1
  228. package/lib/cjs/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  229. package/lib/cjs/topology/HalfEdgeGraphSearch.js.map +1 -1
  230. package/lib/cjs/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  231. package/lib/cjs/topology/HalfEdgeGraphValidation.js.map +1 -1
  232. package/lib/cjs/topology/HalfEdgeMarkSet.js.map +1 -1
  233. package/lib/cjs/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  234. package/lib/cjs/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  235. package/lib/cjs/topology/HalfEdgePositionDetail.js.map +1 -1
  236. package/lib/cjs/topology/HalfEdgePriorityQueue.js.map +1 -1
  237. package/lib/cjs/topology/InsertAndRetriangulateContext.js.map +1 -1
  238. package/lib/cjs/topology/MaskManager.js.map +1 -1
  239. package/lib/cjs/topology/Merging.js.map +1 -1
  240. package/lib/cjs/topology/RegularizeFace.js.map +1 -1
  241. package/lib/cjs/topology/SignedDataSummary.js.map +1 -1
  242. package/lib/cjs/topology/SpaceTriangulation.js.map +1 -1
  243. package/lib/cjs/topology/Triangulation.js.map +1 -1
  244. package/lib/cjs/topology/XYParitySearchContext.js.map +1 -1
  245. package/lib/esm/Constant.js.map +1 -1
  246. package/lib/esm/Geometry.d.ts +5 -1
  247. package/lib/esm/Geometry.d.ts.map +1 -1
  248. package/lib/esm/Geometry.js +5 -1
  249. package/lib/esm/Geometry.js.map +1 -1
  250. package/lib/esm/bspline/AkimaCurve3d.js.map +1 -1
  251. package/lib/esm/bspline/BSpline1dNd.js.map +1 -1
  252. package/lib/esm/bspline/BSplineCurve.js.map +1 -1
  253. package/lib/esm/bspline/BSplineCurve3dH.js.map +1 -1
  254. package/lib/esm/bspline/BSplineCurveOps.js.map +1 -1
  255. package/lib/esm/bspline/BSplineSurface.js.map +1 -1
  256. package/lib/esm/bspline/Bezier1dNd.js.map +1 -1
  257. package/lib/esm/bspline/BezierCurve3d.js.map +1 -1
  258. package/lib/esm/bspline/BezierCurve3dH.js.map +1 -1
  259. package/lib/esm/bspline/BezierCurveBase.js.map +1 -1
  260. package/lib/esm/bspline/InterpolationCurve3d.js.map +1 -1
  261. package/lib/esm/bspline/KnotVector.js.map +1 -1
  262. package/lib/esm/bspline/SurfaceLocationDetail.js.map +1 -1
  263. package/lib/esm/clipping/AlternatingConvexClipTree.js.map +1 -1
  264. package/lib/esm/clipping/BooleanClipFactory.js.map +1 -1
  265. package/lib/esm/clipping/BooleanClipNode.js.map +1 -1
  266. package/lib/esm/clipping/ClipPlane.js.map +1 -1
  267. package/lib/esm/clipping/ClipPrimitive.js.map +1 -1
  268. package/lib/esm/clipping/ClipUtils.js.map +1 -1
  269. package/lib/esm/clipping/ClipVector.js.map +1 -1
  270. package/lib/esm/clipping/ConvexClipPlaneSet.js.map +1 -1
  271. package/lib/esm/clipping/UnionOfConvexClipPlaneSets.js.map +1 -1
  272. package/lib/esm/clipping/internalContexts/LineStringOffsetClipperContext.js.map +1 -1
  273. package/lib/esm/core-geometry.js.map +1 -1
  274. package/lib/esm/curve/Arc3d.js.map +1 -1
  275. package/lib/esm/curve/ChainCollectorContext.js.map +1 -1
  276. package/lib/esm/curve/ConstructCurveBetweenCurves.js.map +1 -1
  277. package/lib/esm/curve/CoordinateXYZ.js.map +1 -1
  278. package/lib/esm/curve/CurveChain.js.map +1 -1
  279. package/lib/esm/curve/CurveChainWithDistanceIndex.js.map +1 -1
  280. package/lib/esm/curve/CurveCollection.js.map +1 -1
  281. package/lib/esm/curve/CurveCurve.js.map +1 -1
  282. package/lib/esm/curve/CurveCurveCloseApproachXY.js.map +1 -1
  283. package/lib/esm/curve/CurveCurveIntersectXY.js.map +1 -1
  284. package/lib/esm/curve/CurveCurveIntersectXYZ.js.map +1 -1
  285. package/lib/esm/curve/CurveExtendMode.js.map +1 -1
  286. package/lib/esm/curve/CurveFactory.js.map +1 -1
  287. package/lib/esm/curve/CurveLocationDetail.js.map +1 -1
  288. package/lib/esm/curve/CurvePrimitive.js.map +1 -1
  289. package/lib/esm/curve/CurveProcessor.js.map +1 -1
  290. package/lib/esm/curve/CurveWireMomentsXYZ.js.map +1 -1
  291. package/lib/esm/curve/GeometryQuery.js.map +1 -1
  292. package/lib/esm/curve/LineSegment3d.js.map +1 -1
  293. package/lib/esm/curve/LineString3d.js.map +1 -1
  294. package/lib/esm/curve/Loop.js.map +1 -1
  295. package/lib/esm/curve/ParityRegion.js.map +1 -1
  296. package/lib/esm/curve/Path.js.map +1 -1
  297. package/lib/esm/curve/PointString3d.js.map +1 -1
  298. package/lib/esm/curve/ProxyCurve.js.map +1 -1
  299. package/lib/esm/curve/Query/ConsolidateAdjacentPrimitivesContext.js.map +1 -1
  300. package/lib/esm/curve/Query/CurveSplitContext.js.map +1 -1
  301. package/lib/esm/curve/Query/CylindricalRange.js.map +1 -1
  302. package/lib/esm/curve/Query/InOutTests.js.map +1 -1
  303. package/lib/esm/curve/Query/PlanarSubdivision.js.map +1 -1
  304. package/lib/esm/curve/Query/StrokeCountChain.js.map +1 -1
  305. package/lib/esm/curve/Query/StrokeCountMap.js.map +1 -1
  306. package/lib/esm/curve/RegionMomentsXY.js.map +1 -1
  307. package/lib/esm/curve/RegionOps.js.map +1 -1
  308. package/lib/esm/curve/RegionOpsClassificationSweeps.js.map +1 -1
  309. package/lib/esm/curve/StrokeOptions.js.map +1 -1
  310. package/lib/esm/curve/UnionRegion.js.map +1 -1
  311. package/lib/esm/curve/internalContexts/AppendPlaneIntersectionStrokeHandler.js.map +1 -1
  312. package/lib/esm/curve/internalContexts/CloneCurvesContext.js.map +1 -1
  313. package/lib/esm/curve/internalContexts/CloneWithExpandedLineStrings.js.map +1 -1
  314. package/lib/esm/curve/internalContexts/ClosestPointStrokeHandler.js.map +1 -1
  315. package/lib/esm/curve/internalContexts/CountLinearPartsSearchContext.js.map +1 -1
  316. package/lib/esm/curve/internalContexts/CurveLengthContext.js.map +1 -1
  317. package/lib/esm/curve/internalContexts/CurveOffsetXYHandler.js.map +1 -1
  318. package/lib/esm/curve/internalContexts/GapSearchContext.js.map +1 -1
  319. package/lib/esm/curve/internalContexts/MultiChainCollector.js.map +1 -1
  320. package/lib/esm/curve/internalContexts/NewtonRtoRStrokeHandler.js.map +1 -1
  321. package/lib/esm/curve/internalContexts/PlaneAltitudeRangeContext.js.map +1 -1
  322. package/lib/esm/curve/internalContexts/PolygonOffsetContext.js.map +1 -1
  323. package/lib/esm/curve/internalContexts/SumLengthsContext.js.map +1 -1
  324. package/lib/esm/curve/internalContexts/TransformInPlaceContext.js.map +1 -1
  325. package/lib/esm/curve/spiral/AustralianRailCorpXYEvaluator.js.map +1 -1
  326. package/lib/esm/curve/spiral/ClothoidSeries.js.map +1 -1
  327. package/lib/esm/curve/spiral/CubicEvaluator.js.map +1 -1
  328. package/lib/esm/curve/spiral/CzechSpiralEvaluator.js.map +1 -1
  329. package/lib/esm/curve/spiral/DirectHalfCosineSpiralEvaluator.js.map +1 -1
  330. package/lib/esm/curve/spiral/DirectSpiral3d.js.map +1 -1
  331. package/lib/esm/curve/spiral/IntegratedSpiral3d.js.map +1 -1
  332. package/lib/esm/curve/spiral/MXCubicAlongArcSpiralEvaluator.js.map +1 -1
  333. package/lib/esm/curve/spiral/NormalizedTransition.js.map +1 -1
  334. package/lib/esm/curve/spiral/PolishCubicSpiralEvaluator.js.map +1 -1
  335. package/lib/esm/curve/spiral/TransitionConditionalProperties.js.map +1 -1
  336. package/lib/esm/curve/spiral/TransitionSpiral3d.js.map +1 -1
  337. package/lib/esm/curve/spiral/XYCurveEvaluator.js.map +1 -1
  338. package/lib/esm/geometry3d/Angle.d.ts +29 -34
  339. package/lib/esm/geometry3d/Angle.d.ts.map +1 -1
  340. package/lib/esm/geometry3d/Angle.js +31 -36
  341. package/lib/esm/geometry3d/Angle.js.map +1 -1
  342. package/lib/esm/geometry3d/AngleSweep.d.ts +48 -43
  343. package/lib/esm/geometry3d/AngleSweep.d.ts.map +1 -1
  344. package/lib/esm/geometry3d/AngleSweep.js +48 -43
  345. package/lib/esm/geometry3d/AngleSweep.js.map +1 -1
  346. package/lib/esm/geometry3d/BarycentricTriangle.js.map +1 -1
  347. package/lib/esm/geometry3d/BilinearPatch.js.map +1 -1
  348. package/lib/esm/geometry3d/CoincidentGeometryOps.js.map +1 -1
  349. package/lib/esm/geometry3d/Ellipsoid.js.map +1 -1
  350. package/lib/esm/geometry3d/FrameBuilder.js.map +1 -1
  351. package/lib/esm/geometry3d/FrustumAnimation.js.map +1 -1
  352. package/lib/esm/geometry3d/GeometryHandler.js.map +1 -1
  353. package/lib/esm/geometry3d/GrowableBlockedArray.js.map +1 -1
  354. package/lib/esm/geometry3d/GrowableFloat64Array.js.map +1 -1
  355. package/lib/esm/geometry3d/GrowableXYArray.js.map +1 -1
  356. package/lib/esm/geometry3d/GrowableXYZArray.js.map +1 -1
  357. package/lib/esm/geometry3d/IndexedCollectionInterval.js.map +1 -1
  358. package/lib/esm/geometry3d/IndexedXYCollection.js.map +1 -1
  359. package/lib/esm/geometry3d/IndexedXYZCollection.js.map +1 -1
  360. package/lib/esm/geometry3d/LongitudeLatitudeAltitude.js.map +1 -1
  361. package/lib/esm/geometry3d/Matrix3d.d.ts +5 -8
  362. package/lib/esm/geometry3d/Matrix3d.d.ts.map +1 -1
  363. package/lib/esm/geometry3d/Matrix3d.js +5 -8
  364. package/lib/esm/geometry3d/Matrix3d.js.map +1 -1
  365. package/lib/esm/geometry3d/OrderedRotationAngles.d.ts +3 -3
  366. package/lib/esm/geometry3d/OrderedRotationAngles.d.ts.map +1 -1
  367. package/lib/esm/geometry3d/OrderedRotationAngles.js +3 -3
  368. package/lib/esm/geometry3d/OrderedRotationAngles.js.map +1 -1
  369. package/lib/esm/geometry3d/Plane3dByOriginAndUnitNormal.js.map +1 -1
  370. package/lib/esm/geometry3d/Plane3dByOriginAndVectors.js.map +1 -1
  371. package/lib/esm/geometry3d/Point2dArrayCarrier.d.ts +8 -10
  372. package/lib/esm/geometry3d/Point2dArrayCarrier.d.ts.map +1 -1
  373. package/lib/esm/geometry3d/Point2dArrayCarrier.js +8 -10
  374. package/lib/esm/geometry3d/Point2dArrayCarrier.js.map +1 -1
  375. package/lib/esm/geometry3d/Point2dVector2d.d.ts +37 -34
  376. package/lib/esm/geometry3d/Point2dVector2d.d.ts.map +1 -1
  377. package/lib/esm/geometry3d/Point2dVector2d.js +38 -35
  378. package/lib/esm/geometry3d/Point2dVector2d.js.map +1 -1
  379. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts +17 -21
  380. package/lib/esm/geometry3d/Point3dArrayCarrier.d.ts.map +1 -1
  381. package/lib/esm/geometry3d/Point3dArrayCarrier.js +16 -20
  382. package/lib/esm/geometry3d/Point3dArrayCarrier.js.map +1 -1
  383. package/lib/esm/geometry3d/Point3dVector3d.d.ts +84 -67
  384. package/lib/esm/geometry3d/Point3dVector3d.d.ts.map +1 -1
  385. package/lib/esm/geometry3d/Point3dVector3d.js +84 -67
  386. package/lib/esm/geometry3d/Point3dVector3d.js.map +1 -1
  387. package/lib/esm/geometry3d/PointHelpers.js.map +1 -1
  388. package/lib/esm/geometry3d/PointStreaming.js.map +1 -1
  389. package/lib/esm/geometry3d/PolygonOps.js.map +1 -1
  390. package/lib/esm/geometry3d/PolylineCompressionByEdgeOffset.js.map +1 -1
  391. package/lib/esm/geometry3d/PolylineOps.js.map +1 -1
  392. package/lib/esm/geometry3d/Range.js.map +1 -1
  393. package/lib/esm/geometry3d/Ray3d.js.map +1 -1
  394. package/lib/esm/geometry3d/ReusableObjectCache.js.map +1 -1
  395. package/lib/esm/geometry3d/Segment1d.js.map +1 -1
  396. package/lib/esm/geometry3d/SortablePolygon.js.map +1 -1
  397. package/lib/esm/geometry3d/Transform.d.ts +76 -66
  398. package/lib/esm/geometry3d/Transform.d.ts.map +1 -1
  399. package/lib/esm/geometry3d/Transform.js +88 -77
  400. package/lib/esm/geometry3d/Transform.js.map +1 -1
  401. package/lib/esm/geometry3d/UVSurfaceOps.js.map +1 -1
  402. package/lib/esm/geometry3d/XYZProps.js.map +1 -1
  403. package/lib/esm/geometry3d/YawPitchRollAngles.d.ts +15 -16
  404. package/lib/esm/geometry3d/YawPitchRollAngles.d.ts.map +1 -1
  405. package/lib/esm/geometry3d/YawPitchRollAngles.js +14 -15
  406. package/lib/esm/geometry3d/YawPitchRollAngles.js.map +1 -1
  407. package/lib/esm/geometry4d/Map4d.js.map +1 -1
  408. package/lib/esm/geometry4d/Matrix4d.js.map +1 -1
  409. package/lib/esm/geometry4d/MomentData.js.map +1 -1
  410. package/lib/esm/geometry4d/PlaneByOriginAndVectors4d.js.map +1 -1
  411. package/lib/esm/geometry4d/Point4d.js.map +1 -1
  412. package/lib/esm/numerics/BandedSystem.js.map +1 -1
  413. package/lib/esm/numerics/BezierPolynomials.js.map +1 -1
  414. package/lib/esm/numerics/ClusterableArray.js.map +1 -1
  415. package/lib/esm/numerics/Complex.js.map +1 -1
  416. package/lib/esm/numerics/ConvexPolygon2d.js.map +1 -1
  417. package/lib/esm/numerics/Newton.js.map +1 -1
  418. package/lib/esm/numerics/PascalCoefficients.js.map +1 -1
  419. package/lib/esm/numerics/PolarData.js.map +1 -1
  420. package/lib/esm/numerics/Polynomials.js.map +1 -1
  421. package/lib/esm/numerics/Quadrature.js.map +1 -1
  422. package/lib/esm/numerics/Range1dArray.js.map +1 -1
  423. package/lib/esm/numerics/TriDiagonalSystem.js.map +1 -1
  424. package/lib/esm/numerics/UnionFind.js.map +1 -1
  425. package/lib/esm/numerics/UsageSums.js.map +1 -1
  426. package/lib/esm/polyface/AuxData.js.map +1 -1
  427. package/lib/esm/polyface/BoxTopology.js.map +1 -1
  428. package/lib/esm/polyface/FacetFaceData.js.map +1 -1
  429. package/lib/esm/polyface/FacetLocationDetail.js.map +1 -1
  430. package/lib/esm/polyface/FacetOrientation.js.map +1 -1
  431. package/lib/esm/polyface/GreedyTriangulationBetweenLineStrings.js.map +1 -1
  432. package/lib/esm/polyface/IndexedEdgeMatcher.js.map +1 -1
  433. package/lib/esm/polyface/IndexedPolyfaceVisitor.js.map +1 -1
  434. package/lib/esm/polyface/Polyface.js.map +1 -1
  435. package/lib/esm/polyface/PolyfaceBuilder.js.map +1 -1
  436. package/lib/esm/polyface/PolyfaceClip.js.map +1 -1
  437. package/lib/esm/polyface/PolyfaceData.js.map +1 -1
  438. package/lib/esm/polyface/PolyfaceQuery.js.map +1 -1
  439. package/lib/esm/polyface/RangeLengthData.js.map +1 -1
  440. package/lib/esm/polyface/TaggedNumericData.js.map +1 -1
  441. package/lib/esm/polyface/TriangleCandidate.js.map +1 -1
  442. package/lib/esm/polyface/multiclip/BuildAverageNormalsContext.js.map +1 -1
  443. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSet.js.map +1 -1
  444. package/lib/esm/polyface/multiclip/GriddedRaggedRange2dSetWithOverflow.js.map +1 -1
  445. package/lib/esm/polyface/multiclip/LinearSearchRange2dArray.js.map +1 -1
  446. package/lib/esm/polyface/multiclip/OffsetMeshContext.js.map +1 -1
  447. package/lib/esm/polyface/multiclip/Range2dSearchInterface.js.map +1 -1
  448. package/lib/esm/polyface/multiclip/RangeSearch.js.map +1 -1
  449. package/lib/esm/polyface/multiclip/SweepLineStringToFacetContext.js.map +1 -1
  450. package/lib/esm/polyface/multiclip/XYPointBuckets.js.map +1 -1
  451. package/lib/esm/serialization/BGFBAccessors.js.map +1 -1
  452. package/lib/esm/serialization/BGFBReader.js.map +1 -1
  453. package/lib/esm/serialization/BGFBWriter.js.map +1 -1
  454. package/lib/esm/serialization/BentleyGeometryFlatBuffer.js.map +1 -1
  455. package/lib/esm/serialization/DeepCompare.js.map +1 -1
  456. package/lib/esm/serialization/GeometrySamples.d.ts +72 -58
  457. package/lib/esm/serialization/GeometrySamples.d.ts.map +1 -1
  458. package/lib/esm/serialization/GeometrySamples.js +132 -108
  459. package/lib/esm/serialization/GeometrySamples.js.map +1 -1
  460. package/lib/esm/serialization/IModelJsonSchema.js.map +1 -1
  461. package/lib/esm/solid/Box.js.map +1 -1
  462. package/lib/esm/solid/Cone.js.map +1 -1
  463. package/lib/esm/solid/LinearSweep.js.map +1 -1
  464. package/lib/esm/solid/RotationalSweep.js.map +1 -1
  465. package/lib/esm/solid/RuledSweep.js.map +1 -1
  466. package/lib/esm/solid/SolidPrimitive.js.map +1 -1
  467. package/lib/esm/solid/Sphere.js.map +1 -1
  468. package/lib/esm/solid/SweepContour.js.map +1 -1
  469. package/lib/esm/solid/TorusPipe.js.map +1 -1
  470. package/lib/esm/topology/ChainMerge.js.map +1 -1
  471. package/lib/esm/topology/Graph.js.map +1 -1
  472. package/lib/esm/topology/HalfEdgeGraphFromIndexedLoopsContext.js.map +1 -1
  473. package/lib/esm/topology/HalfEdgeGraphSearch.js.map +1 -1
  474. package/lib/esm/topology/HalfEdgeGraphSpineContext.js.map +1 -1
  475. package/lib/esm/topology/HalfEdgeGraphValidation.js.map +1 -1
  476. package/lib/esm/topology/HalfEdgeMarkSet.js.map +1 -1
  477. package/lib/esm/topology/HalfEdgeNodeXYZUV.js.map +1 -1
  478. package/lib/esm/topology/HalfEdgePointInGraphSearch.js.map +1 -1
  479. package/lib/esm/topology/HalfEdgePositionDetail.js.map +1 -1
  480. package/lib/esm/topology/HalfEdgePriorityQueue.js.map +1 -1
  481. package/lib/esm/topology/InsertAndRetriangulateContext.js.map +1 -1
  482. package/lib/esm/topology/MaskManager.js.map +1 -1
  483. package/lib/esm/topology/Merging.js.map +1 -1
  484. package/lib/esm/topology/RegularizeFace.js.map +1 -1
  485. package/lib/esm/topology/SignedDataSummary.js.map +1 -1
  486. package/lib/esm/topology/SpaceTriangulation.js.map +1 -1
  487. package/lib/esm/topology/Triangulation.js.map +1 -1
  488. package/lib/esm/topology/XYParitySearchContext.js.map +1 -1
  489. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"TransitionConditionalProperties.js","sourceRoot":"","sources":["../../../../src/curve/spiral/TransitionConditionalProperties.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 Curve\n */\nimport { Geometry } from \"../../Geometry\";\nimport { Angle } from \"../../geometry3d/Angle\";\nimport { TransitionSpiral3d } from \"./TransitionSpiral3d\";\n// import {} from \"./\";\n/** A true transition spiral is a curve defined by its curvature, with the curvature function symmetric about midpoint.\n * * The symmetry condition creates a relationship among the following 4 quantities:\n * ** curvature0 = curvature (i.e. 1/radius) at start\n * ** curvature1 = curvature (i.e. 1/radius) at end\n * ** sweepRadians = signed turning angle from start to end\n * ** arcLength = length of curve\n * * The relationship is the equation\n * ** `sweepRadians = arcLength * average Curvature = arcLength * 0.5 * (curvature0 + curvature1)`\n * * That is, regardless of any curvature properties other than symmetry, specifying any 3 of the quantities fully determines the remaining one.\n * @public\n */\nexport class TransitionConditionalProperties {\n /** radius (or 0 at start) */\n public radius0: number | undefined;\n /** radius (or 0) at end */\n public radius1: number | undefined;\n /** bearing at start, measured from x towards y */\n public bearing0: Angle | undefined;\n /** bearing at end, measured from x towards y */\n public bearing1: Angle | undefined;\n /** curve length */\n public curveLength: number | undefined;\n /**\n * capture numeric or undefined values\n * @param radius0 start radius or undefined\n * @param radius1 end radius or undefined\n * @param bearing0 start bearing or undefined\n * @param bearing1 end bearing or undefined\n * @param arcLength arc length or undefined\n */\n public constructor(\n radius0: number | undefined,\n radius1: number | undefined,\n bearing0: Angle | undefined,\n bearing1: Angle | undefined,\n arcLength: number | undefined) {\n this.radius0 = radius0;\n this.radius1 = radius1;\n this.bearing0 = bearing0;\n this.bearing1 = bearing1;\n this.curveLength = arcLength;\n }\n /** return the number of defined values among the 5 properties. */\n public numDefinedProperties() {\n return Geometry.defined01(this.radius0)\n + Geometry.defined01(this.radius1)\n + Geometry.defined01(this.bearing0)\n + Geometry.defined01(this.bearing1)\n + Geometry.defined01(this.curveLength);\n }\n /** clone with all properties (i.e. preserve undefined states) */\n public clone(): TransitionConditionalProperties {\n return new TransitionConditionalProperties(\n this.radius0,\n this.radius1,\n this.bearing0 === undefined ? undefined : this.bearing0.clone(),\n this.bearing1 === undefined ? undefined : this.bearing1.clone(),\n this.curveLength);\n }\n /** Return true if all components are defined and agree equationally. */\n public getIsValidCompleteSet() {\n if (this.curveLength !== undefined && this.bearing0 !== undefined && this.bearing1 !== undefined\n && this.radius0 !== undefined && this.radius1 !== undefined) {\n const length1 = TransitionSpiral3d.radiusRadiusSweepRadiansToArcLength(this.radius0, this.radius1,\n this.bearing1.radians - this.bearing0.radians);\n return Geometry.isSameCoordinate(this.curveLength, length1);\n }\n return false;\n }\n /** Examine which properties are defined and compute the (single) undefined.\n * @returns Return true if the input state had precisely one undefined member.\n */\n public tryResolveAnySingleUnknown(): boolean {\n if (this.getIsValidCompleteSet())\n return true;\n if (this.bearing0 && this.bearing1) {\n const sweepRadians = this.bearing1.radians - this.bearing0.radians;\n if (this.curveLength === undefined && this.radius0 !== undefined && this.radius1 !== undefined) {\n this.curveLength = TransitionSpiral3d.radiusRadiusSweepRadiansToArcLength(this.radius0, this.radius1, sweepRadians);\n return true;\n }\n if (this.curveLength !== undefined && this.radius0 === undefined && this.radius1 !== undefined) {\n this.radius0 = TransitionSpiral3d.radius1LengthSweepRadiansToRadius0(this.radius1, this.curveLength, sweepRadians);\n return true;\n }\n if (this.curveLength !== undefined && this.radius0 !== undefined && this.radius1 === undefined) {\n this.radius1 = TransitionSpiral3d.radius0LengthSweepRadiansToRadius1(this.radius0, this.curveLength, sweepRadians);\n return true;\n }\n return false;\n }\n // at least one bearing is undefined ...\n if (this.curveLength === undefined || this.radius0 === undefined || this.radius1 === undefined)\n return false;\n\n if (this.bearing0) { // bearing 1 is undefined\n this.bearing1 = Angle.createRadians(this.bearing0.radians + TransitionSpiral3d.radiusRadiusLengthToSweepRadians(this.radius0, this.radius1, this.curveLength));\n return true;\n }\n\n if (this.bearing1) { // bearing 0 is undefined\n this.bearing0 = Angle.createRadians(this.bearing1.radians - TransitionSpiral3d.radiusRadiusLengthToSweepRadians(this.radius0, this.radius1, this.curveLength));\n return true;\n }\n return false;\n }\n private almostEqualCoordinate(a: number | undefined, b: number | undefined): boolean {\n if (a === undefined && b === undefined)\n return true;\n if (a !== undefined && b !== undefined)\n return Geometry.isSameCoordinate(a, b);\n return false;\n }\n private almostEqualBearing(a: Angle | undefined, b: Angle | undefined): boolean {\n if (a === undefined && b === undefined)\n return true;\n if (a !== undefined && b !== undefined)\n return a.isAlmostEqualNoPeriodShift(b);\n return false;\n }\n\n /**\n * Test if this and other have matching numeric and undefined members.\n */\n\n public isAlmostEqual(other?: TransitionConditionalProperties) {\n if (!other)\n return false;\n if (!this.almostEqualCoordinate(this.radius0, other.radius0))\n return false;\n if (!this.almostEqualCoordinate(this.radius1, other.radius1))\n return false;\n if (!this.almostEqualBearing(this.bearing0, other.bearing0))\n return false;\n if (!this.almostEqualBearing(this.bearing1, other.bearing1))\n return false;\n if (!this.almostEqualCoordinate(this.curveLength, other.curveLength))\n return false;\n return true;\n }\n /** Apply a NONZERO scale factor to all distances. */\n public applyScaleFactor(a: number) {\n if (this.radius0 !== undefined)\n this.radius0 *= a;\n if (this.radius1 !== undefined)\n this.radius1 *= a;\n if (this.curveLength !== undefined)\n this.curveLength *= a;\n }\n public static areAlmostEqual(a: TransitionConditionalProperties | undefined, b: TransitionConditionalProperties | undefined): boolean {\n if (a === undefined)\n return b === undefined;\n return a.isAlmostEqual(b);\n }\n}\n"]}
1
+ {"version":3,"file":"TransitionConditionalProperties.js","sourceRoot":"","sources":["../../../../src/curve/spiral/TransitionConditionalProperties.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Angle } from \"../../geometry3d/Angle\";\r\nimport { TransitionSpiral3d } from \"./TransitionSpiral3d\";\r\n// import {} from \"./\";\r\n/** A true transition spiral is a curve defined by its curvature, with the curvature function symmetric about midpoint.\r\n * * The symmetry condition creates a relationship among the following 4 quantities:\r\n * ** curvature0 = curvature (i.e. 1/radius) at start\r\n * ** curvature1 = curvature (i.e. 1/radius) at end\r\n * ** sweepRadians = signed turning angle from start to end\r\n * ** arcLength = length of curve\r\n * * The relationship is the equation\r\n * ** `sweepRadians = arcLength * average Curvature = arcLength * 0.5 * (curvature0 + curvature1)`\r\n * * That is, regardless of any curvature properties other than symmetry, specifying any 3 of the quantities fully determines the remaining one.\r\n * @public\r\n */\r\nexport class TransitionConditionalProperties {\r\n /** radius (or 0 at start) */\r\n public radius0: number | undefined;\r\n /** radius (or 0) at end */\r\n public radius1: number | undefined;\r\n /** bearing at start, measured from x towards y */\r\n public bearing0: Angle | undefined;\r\n /** bearing at end, measured from x towards y */\r\n public bearing1: Angle | undefined;\r\n /** curve length */\r\n public curveLength: number | undefined;\r\n /**\r\n * capture numeric or undefined values\r\n * @param radius0 start radius or undefined\r\n * @param radius1 end radius or undefined\r\n * @param bearing0 start bearing or undefined\r\n * @param bearing1 end bearing or undefined\r\n * @param arcLength arc length or undefined\r\n */\r\n public constructor(\r\n radius0: number | undefined,\r\n radius1: number | undefined,\r\n bearing0: Angle | undefined,\r\n bearing1: Angle | undefined,\r\n arcLength: number | undefined) {\r\n this.radius0 = radius0;\r\n this.radius1 = radius1;\r\n this.bearing0 = bearing0;\r\n this.bearing1 = bearing1;\r\n this.curveLength = arcLength;\r\n }\r\n /** return the number of defined values among the 5 properties. */\r\n public numDefinedProperties() {\r\n return Geometry.defined01(this.radius0)\r\n + Geometry.defined01(this.radius1)\r\n + Geometry.defined01(this.bearing0)\r\n + Geometry.defined01(this.bearing1)\r\n + Geometry.defined01(this.curveLength);\r\n }\r\n /** clone with all properties (i.e. preserve undefined states) */\r\n public clone(): TransitionConditionalProperties {\r\n return new TransitionConditionalProperties(\r\n this.radius0,\r\n this.radius1,\r\n this.bearing0 === undefined ? undefined : this.bearing0.clone(),\r\n this.bearing1 === undefined ? undefined : this.bearing1.clone(),\r\n this.curveLength);\r\n }\r\n /** Return true if all components are defined and agree equationally. */\r\n public getIsValidCompleteSet() {\r\n if (this.curveLength !== undefined && this.bearing0 !== undefined && this.bearing1 !== undefined\r\n && this.radius0 !== undefined && this.radius1 !== undefined) {\r\n const length1 = TransitionSpiral3d.radiusRadiusSweepRadiansToArcLength(this.radius0, this.radius1,\r\n this.bearing1.radians - this.bearing0.radians);\r\n return Geometry.isSameCoordinate(this.curveLength, length1);\r\n }\r\n return false;\r\n }\r\n /** Examine which properties are defined and compute the (single) undefined.\r\n * @returns Return true if the input state had precisely one undefined member.\r\n */\r\n public tryResolveAnySingleUnknown(): boolean {\r\n if (this.getIsValidCompleteSet())\r\n return true;\r\n if (this.bearing0 && this.bearing1) {\r\n const sweepRadians = this.bearing1.radians - this.bearing0.radians;\r\n if (this.curveLength === undefined && this.radius0 !== undefined && this.radius1 !== undefined) {\r\n this.curveLength = TransitionSpiral3d.radiusRadiusSweepRadiansToArcLength(this.radius0, this.radius1, sweepRadians);\r\n return true;\r\n }\r\n if (this.curveLength !== undefined && this.radius0 === undefined && this.radius1 !== undefined) {\r\n this.radius0 = TransitionSpiral3d.radius1LengthSweepRadiansToRadius0(this.radius1, this.curveLength, sweepRadians);\r\n return true;\r\n }\r\n if (this.curveLength !== undefined && this.radius0 !== undefined && this.radius1 === undefined) {\r\n this.radius1 = TransitionSpiral3d.radius0LengthSweepRadiansToRadius1(this.radius0, this.curveLength, sweepRadians);\r\n return true;\r\n }\r\n return false;\r\n }\r\n // at least one bearing is undefined ...\r\n if (this.curveLength === undefined || this.radius0 === undefined || this.radius1 === undefined)\r\n return false;\r\n\r\n if (this.bearing0) { // bearing 1 is undefined\r\n this.bearing1 = Angle.createRadians(this.bearing0.radians + TransitionSpiral3d.radiusRadiusLengthToSweepRadians(this.radius0, this.radius1, this.curveLength));\r\n return true;\r\n }\r\n\r\n if (this.bearing1) { // bearing 0 is undefined\r\n this.bearing0 = Angle.createRadians(this.bearing1.radians - TransitionSpiral3d.radiusRadiusLengthToSweepRadians(this.radius0, this.radius1, this.curveLength));\r\n return true;\r\n }\r\n return false;\r\n }\r\n private almostEqualCoordinate(a: number | undefined, b: number | undefined): boolean {\r\n if (a === undefined && b === undefined)\r\n return true;\r\n if (a !== undefined && b !== undefined)\r\n return Geometry.isSameCoordinate(a, b);\r\n return false;\r\n }\r\n private almostEqualBearing(a: Angle | undefined, b: Angle | undefined): boolean {\r\n if (a === undefined && b === undefined)\r\n return true;\r\n if (a !== undefined && b !== undefined)\r\n return a.isAlmostEqualNoPeriodShift(b);\r\n return false;\r\n }\r\n\r\n /**\r\n * Test if this and other have matching numeric and undefined members.\r\n */\r\n\r\n public isAlmostEqual(other?: TransitionConditionalProperties) {\r\n if (!other)\r\n return false;\r\n if (!this.almostEqualCoordinate(this.radius0, other.radius0))\r\n return false;\r\n if (!this.almostEqualCoordinate(this.radius1, other.radius1))\r\n return false;\r\n if (!this.almostEqualBearing(this.bearing0, other.bearing0))\r\n return false;\r\n if (!this.almostEqualBearing(this.bearing1, other.bearing1))\r\n return false;\r\n if (!this.almostEqualCoordinate(this.curveLength, other.curveLength))\r\n return false;\r\n return true;\r\n }\r\n /** Apply a NONZERO scale factor to all distances. */\r\n public applyScaleFactor(a: number) {\r\n if (this.radius0 !== undefined)\r\n this.radius0 *= a;\r\n if (this.radius1 !== undefined)\r\n this.radius1 *= a;\r\n if (this.curveLength !== undefined)\r\n this.curveLength *= a;\r\n }\r\n public static areAlmostEqual(a: TransitionConditionalProperties | undefined, b: TransitionConditionalProperties | undefined): boolean {\r\n if (a === undefined)\r\n return b === undefined;\r\n return a.isAlmostEqual(b);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TransitionSpiral3d.js","sourceRoot":"","sources":["../../../../src/curve/spiral/TransitionSpiral3d.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAW,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAwCzE;;;;;;;;;;;;GAYG;AACH,MAAM,OAAgB,kBAAmB,SAAQ,cAAc;IAU7D,wEAAwE;IACxE,IAAW,sBAAsB,KAAgB,OAAO,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAKvF,0CAA0C;IAC1C,IAAW,YAAY,KAAgB,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAEnE,YAAsB,UAA8B,EAAE,YAAuB,EAAE,sBAA6C,EAAE,gBAA6D;QACzL,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC;QACjE,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,uBAAuB,GAAG,sBAAsB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1G,CAAC;IAED,IAAW,UAAU,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5D,iIAAiI;IAC1H,MAAM,CAAC,iBAAiB,CAAC,MAAc,IAAY,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC;IAEzG,+GAA+G;IACxG,MAAM,CAAC,iBAAiB,CAAC,SAAiB;QAC/C,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,iBAAiB;YAClD,OAAO,GAAG,CAAC;QACb,OAAO,GAAG,GAAG,SAAS,CAAC;IACzB,CAAC;IAQD,sEAAsE;IACtD,iBAAiB,CAAC,SAAiB,EAAE,SAAiB;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAChF,MAAM,eAAe,GAAG,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAChF,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QACtE,OAAO,CAAC,yBAAyB,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,sCAAsC;IACtB,gBAAgB,CAAC,SAAoB;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,2CAA2C;QAClF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,0DAA0D;IACnD,MAAM,CAAC,gBAAgB,CAAC,YAAuB;QACpD,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/H,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,oBAAoB,CAAC,EAAU,EAAE,EAAU;QACvD,OAAO,GAAG,GAAG,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IACrG,CAAC;IACD;;;;OAIG;IACI,MAAM,CAAC,wBAAwB,CAAC,EAAU,EAAE,QAAgB,EAAE,EAAU;QAC7E,OAAO,QAAQ,CAAC,WAAW,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5H,CAAC;IAED,qFAAqF;IAC9E,MAAM,CAAC,mCAAmC,CAAC,OAAe,EAAE,OAAe,EAAE,YAAoB;QACtG,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,yEAAyE;IAClE,MAAM,CAAC,gCAAgC,CAAC,OAAe,EAAE,OAAe,EAAE,SAAiB;QAChG,OAAO,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/E,CAAC;IAED,sFAAsF;IAC/E,MAAM,CAAC,kCAAkC,CAAC,OAAe,EAAE,SAAiB,EAAE,YAAoB;QACvG,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,GAAG,GAAG,YAAY,GAAG,SAAS,CAAC,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IAChI,CAAC;IACD,sFAAsF;IAC/E,MAAM,CAAC,kCAAkC,CAAC,OAAe,EAAE,SAAiB,EAAE,YAAoB;QACvG,OAAO,kBAAkB,CAAC,iBAAiB,CAAC,CAAC,GAAG,GAAG,YAAY,GAAG,SAAS,CAAC,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IAChI,CAAC;IACD,iFAAiF;IACjF,IAAW,gBAAgB,KAAkD,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC7G;;;;;OAKG;IACO,yBAAyB,CAAC,UAAqB;QACvD,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC;QACjE,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,6BAA6B;YAC7B,8DAA8D;YAC9D,MAAM,WAAW,GAAG,UAAU,CAAC,0BAA0B,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7E,gDAAgD;YAChD,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACnF,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,qBAAqB,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAClF,IAAI,IAAI,CAAC,gBAAgB;gBACvB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAE1D,OAAO,SAAS,CAAC;SAClB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACa,iBAAiB,CAAC,uBAA+C;QAC/E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC3E,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IACD,oDAAoD;IACpC,WAAW,CAAC,aAAsB,EAAE,SAAqB;QACvE,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAE,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACjE,aAAa,CAAC,WAAW,CAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACc,qBAAqB,CAAC,SAAiB,EAAE,SAAiB,EAAE,SAAqB;QAChG,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC;QACnC,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,OAAO,CAAC,UAAU,EAAG,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAE,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,CAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC;QAC/E,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,4BAA4B,CAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IACzF,CAAC;IACD;;;;OAIG;IACa,uBAAuB,CAAC,GAAqB,EAAE,OAAiB;QAC9E,OAAO,yBAAyB,CAAC,kCAAkC,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1F,CAAC;CACF","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 Curve\n */\n\nimport { Geometry } from \"../../Geometry\";\nimport { Matrix3d } from \"../../geometry3d/Matrix3d\";\nimport { Range1d, Range3d } from \"../../geometry3d/Range\";\nimport { Segment1d } from \"../../geometry3d/Segment1d\";\nimport { Transform } from \"../../geometry3d/Transform\";\nimport { CurvePrimitive } from \"../CurvePrimitive\";\nimport { CurveOffsetXYHandler } from \"../internalContexts/CurveOffsetXYHandler\";\nimport { PlaneAltitudeRangeContext } from \"../internalContexts/PlaneAltitudeRangeContext\";\nimport { OffsetOptions } from \"../internalContexts/PolygonOffsetContext\";\nimport { LineString3d } from \"../LineString3d\";\nimport { TransitionConditionalProperties } from \"./TransitionConditionalProperties\";\n\nimport type { Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport type { Ray3d } from \"../../geometry3d/Ray3d\";\n\n/**\n * This is the set of valid type names for \"integrated\" spirals\n * * Behavior is expressed by a `NormalizedTransition` snap function.\n * * The snap function varies smoothly from f(0)=0 to f(1)=1\n * * The various snap functions are:\n * * clothoid: linear\n * * biquadratic: 2 quadratics pieced together, joining with 1st derivative continuity at f(0.) = 0.5, with zero slope f'(0)=0 and f'(1)= 0\n * * bloss: A single cubic with zero slope at 0 and 1\n * * cosine: half of a cosine wave, centered around 0.5\n * * sine: full period of a sine wave added to the line f(u)=u\n * *\n * @public\n */\nexport type IntegratedSpiralTypeName = \"clothoid\" | \"bloss\" | \"biquadratic\" | \"cosine\" | \"sine\";\n\n/**\n * This is the set of valid type names for \"direct\" spirals.\n * \"Direct\" spirals can evaluate fractionToPoint by direct equations, i.e. not requiring the numeric integrations in \"Integrated\" spiral types.\n * @public\n */\nexport type DirectSpiralTypeName =\n \"JapaneseCubic\" // 1 term from each of the X,Y clothoid series expansions: y = x^3 / (6RL)\n | \"Arema\" // 2 terms from each of the X,Y clothoid series expansions. Identical to ChineseCubic!\n | \"ChineseCubic\" // Identical to Arema!\n | \"HalfCosine\" // high continuity cosine variation from quadratic.\n | \"AustralianRailCorp\" // cubic with high accuracy distance series\n | \"WesternAustralian\" // simple cubic -- 2 terms of x series, 1 term of y series.\n | \"Czech\" // simple cubic with two term distance approximation\n | \"MXCubicAlongArc\" // x obtained from fractional distance via 2-terms from series, y = x^3/ (6RL)\n | \"Polish\"\n | \"Italian\"\n ;\n\n/**\n * TransitionSpiral3d is a base class for multiple variants of spirals.\n * * The menagerie of spiral types have 2 broad categories:\n * * IntegratedSpiral3d -- a spiral whose direct function for curvature versus distance must be integrated to determine x,y\n * * The IntegratedSpiral3d types are enumerated in `IntegratedSpiralTypes`\n * * DirectSpiral3d -- a spiral implemented with direct calculation of x,y from fractional position along the spiral.\n * * The direct spiral types are enumerated in the `DirectSpiralType`\n * * The method set for CurvePrimitive support includes a `handleTransitionSpiral(g: TransitionSpiral3d)` which receives all the spiral types.\n * * The spiral class may impose expectations that its inflection is at the origin, with tangent along the x axis.\n * * This is generally necessary for direct spirals.\n * * This is not necessary for integrated spirals.\n * @public\n */\nexport abstract class TransitionSpiral3d extends CurvePrimitive {\n /** string name of spiral type */\n protected _spiralType: string;\n /** Original defining properties. */\n protected _designProperties: TransitionConditionalProperties | undefined;\n\n /** Fractional interval for the \"active\" part of a containing spiral.\n * (The radius, angle, and length conditions define a complete spiral, and some portion of it is \"active\")\n */\n protected _activeFractionInterval: Segment1d;\n /** Return (reference to) the active portion of the reference spiral. */\n public get activeFractionInterval(): Segment1d { return this._activeFractionInterval; }\n /** strokes in the active portion */\n public abstract get activeStrokes(): LineString3d;\n /** Placement transform */\n protected _localToWorld: Transform;\n /** (reference to) placement transform. */\n public get localToWorld(): Transform { return this._localToWorld; }\n\n protected constructor(spiralType: string | undefined, localToWorld: Transform, activeFractionInterval: Segment1d | undefined, designProperties: TransitionConditionalProperties | undefined) {\n super();\n this._spiralType = spiralType ? spiralType : \"unknownSpiralType\";\n this._designProperties = designProperties;\n this._localToWorld = localToWorld;\n this._activeFractionInterval = activeFractionInterval ? activeFractionInterval : Segment1d.create(0, 1);\n }\n\n public get spiralType(): string { return this._spiralType; }\n /** Return 1/r with convention that if true zero is given as radius it represents infinite radius (0 curvature, straight line) */\n public static radiusToCurvature(radius: number): number { return (radius === 0.0) ? 0.0 : 1.0 / radius; }\n\n /** Return 1/k with convention that if near-zero is given as curvature, its infinite radius is returned as 0 */\n public static curvatureToRadius(curvature: number): number {\n if (Math.abs(curvature) < Geometry.smallAngleRadians)\n return 0.0;\n return 1.0 / curvature;\n }\n\n /** Return a deep clone. */\n public abstract override clone(): TransitionSpiral3d;\n\n /** Recompute strokes */\n public abstract refreshComputedProperties(): void;\n\n /** Return (if possible) a spiral which is a portion of this curve. */\n public override clonePartialCurve(fractionA: number, fractionB: number): TransitionSpiral3d {\n const spiralB = this.clone();\n const globalFractionA = this._activeFractionInterval.fractionToPoint(fractionA);\n const globalFractionB = this._activeFractionInterval.fractionToPoint(fractionB);\n spiralB._activeFractionInterval.set(globalFractionA, globalFractionB);\n spiralB.refreshComputedProperties();\n return spiralB;\n }\n\n /** Clone with a transform applied */\n public override cloneTransformed(transform: Transform): TransitionSpiral3d {\n const result = this.clone();\n result.tryTransformInPlace(transform); // ok, we're confident it will always work.\n return result;\n }\n\n /** Return the average of the start and end curvatures. */\n public static averageCurvature(radiusLimits: Segment1d): number {\n return 0.5 * (TransitionSpiral3d.radiusToCurvature(radiusLimits.x0) + TransitionSpiral3d.radiusToCurvature(radiusLimits.x1));\n }\n /**\n * Given two radii (or zeros for 0 curvature) return the average curvature\n * @param r0 start radius, or 0 for line\n * @param r1 end radius, or 0 for line\n */\n public static averageCurvatureR0R1(r0: number, r1: number): number {\n return 0.5 * (TransitionSpiral3d.radiusToCurvature(r0) + TransitionSpiral3d.radiusToCurvature(r1));\n }\n /**\n * Given two radii (or zeros for 0 curvature) return the average curvature\n * @param r0 start radius, or 0 for line\n * @param r1 end radius, or 0 for line\n */\n public static interpolateCurvatureR0R1(r0: number, fraction: number, r1: number): number {\n return Geometry.interpolate(TransitionSpiral3d.radiusToCurvature(r0), fraction, TransitionSpiral3d.radiusToCurvature(r1));\n }\n\n /** Return the arc length of a transition spiral with given sweep and radius pair. */\n public static radiusRadiusSweepRadiansToArcLength(radius0: number, radius1: number, sweepRadians: number): number {\n return Math.abs(sweepRadians / TransitionSpiral3d.averageCurvatureR0R1(radius0, radius1));\n }\n\n /** Return the turn angle for spiral of given length between two radii */\n public static radiusRadiusLengthToSweepRadians(radius0: number, radius1: number, arcLength: number): number {\n return TransitionSpiral3d.averageCurvatureR0R1(radius0, radius1) * arcLength;\n }\n\n /** Return the end radius for spiral of given start radius, length, and turn angle. */\n public static radius0LengthSweepRadiansToRadius1(radius0: number, arcLength: number, sweepRadians: number) {\n return TransitionSpiral3d.curvatureToRadius((2.0 * sweepRadians / arcLength) - TransitionSpiral3d.radiusToCurvature(radius0));\n }\n /** Return the start radius for spiral of given end radius, length, and turn angle. */\n public static radius1LengthSweepRadiansToRadius0(radius1: number, arcLength: number, sweepRadians: number) {\n return TransitionSpiral3d.curvatureToRadius((2.0 * sweepRadians / arcLength) - TransitionSpiral3d.radiusToCurvature(radius1));\n }\n /** Return the original defining properties (if any) saved by the constructor. */\n public get designProperties(): TransitionConditionalProperties | undefined { return this._designProperties; }\n /**\n * * If transformA is rigid with uniform scale, apply the rigid part of transformA to the localToWorld transform and return the scale and rigid separation.\n * * If not rigid, do nothing and return undefined.\n * * Also apply the scale factor to the designProperties.\n * @param transformA\n */\n protected applyRigidPartOfTransform(transformA: Transform): { rigidAxes: Matrix3d, scale: number } | undefined {\n const rigidData = transformA.matrix.factorRigidWithSignedScale();\n if (rigidData !== undefined) {\n // [sQ a][R b] = [sQ*R sQb+a]\n // but we save it as [Q*R sQb+a] with spiral data scaled by s.\n const transformC0 = transformA.multiplyTransformTransform(this.localToWorld);\n // BUT pull the scale part out of the matrix ...\n const matrixC = rigidData.rigidAxes.multiplyMatrixMatrix(this.localToWorld.matrix);\n this._localToWorld = Transform.createOriginAndMatrix(transformC0.origin, matrixC);\n if (this.designProperties)\n this.designProperties.applyScaleFactor(rigidData.scale);\n\n return rigidData;\n }\n return undefined;\n }\n\n /**\n * Construct an offset of the instance curve as viewed in the xy-plane (ignoring z).\n * * No attempt is made to join the offsets of smaller constituent primitives. To construct a fully joined offset\n * for an aggregate instance (e.g., LineString3d, CurveChainWithDistanceIndex), use RegionOps.constructCurveXYOffset() instead.\n * @param offsetDistanceOrOptions offset distance (positive to left of the instance curve), or options object\n */\n public override constructOffsetXY(offsetDistanceOrOptions: number | OffsetOptions): CurvePrimitive | CurvePrimitive[] | undefined {\n const options = OffsetOptions.create(offsetDistanceOrOptions);\n const handler = new CurveOffsetXYHandler(this, options.leftOffsetDistance);\n this.emitStrokableParts(handler, options.strokeOptions);\n return handler.claimResult();\n }\n /** extend the range by the strokes of the spiral */\n public override extendRange(rangeToExtend: Range3d, transform?: Transform): void {\n const myRange = this.rangeBetweenFractions (0.0, 1.0, transform);\n rangeToExtend.extendRange (myRange);\n }\n\n /** return the range of spiral between fractions of the activeStrokes.\n * * Use activeStrokes point count times interval factor for initial evaluation count, but do at least 5\n */\n public override rangeBetweenFractions(fractionA: number, fractionB: number, transform?: Transform): Range3d {\n const strokes = this.activeStrokes;\n if (undefined === strokes)\n return Range3d.createNull ();\n let count = Math.ceil (strokes.numPoints() * Math.abs (fractionB - fractionA));\n count = Geometry.clamp (5, count, 30);\n return this.rangeBetweenFractionsByCount (fractionA, fractionB, count, transform, 0.5);\n }\n /** Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\n * @param ray ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.\n * @param lowHigh optional receiver for output\n * @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the end of the ray.\n */\n public override projectedParameterRange(ray: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined {\n return PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);\n }\n}\n"]}
1
+ {"version":3,"file":"TransitionSpiral3d.js","sourceRoot":"","sources":["../../../../src/curve/spiral/TransitionSpiral3d.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\n\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Matrix3d } from \"../../geometry3d/Matrix3d\";\r\nimport { Range1d, Range3d } from \"../../geometry3d/Range\";\r\nimport { Segment1d } from \"../../geometry3d/Segment1d\";\r\nimport { Transform } from \"../../geometry3d/Transform\";\r\nimport { CurvePrimitive } from \"../CurvePrimitive\";\r\nimport { CurveOffsetXYHandler } from \"../internalContexts/CurveOffsetXYHandler\";\r\nimport { PlaneAltitudeRangeContext } from \"../internalContexts/PlaneAltitudeRangeContext\";\r\nimport { OffsetOptions } from \"../internalContexts/PolygonOffsetContext\";\r\nimport { LineString3d } from \"../LineString3d\";\r\nimport { TransitionConditionalProperties } from \"./TransitionConditionalProperties\";\r\n\r\nimport type { Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport type { Ray3d } from \"../../geometry3d/Ray3d\";\r\n\r\n/**\r\n * This is the set of valid type names for \"integrated\" spirals\r\n * * Behavior is expressed by a `NormalizedTransition` snap function.\r\n * * The snap function varies smoothly from f(0)=0 to f(1)=1\r\n * * The various snap functions are:\r\n * * clothoid: linear\r\n * * biquadratic: 2 quadratics pieced together, joining with 1st derivative continuity at f(0.) = 0.5, with zero slope f'(0)=0 and f'(1)= 0\r\n * * bloss: A single cubic with zero slope at 0 and 1\r\n * * cosine: half of a cosine wave, centered around 0.5\r\n * * sine: full period of a sine wave added to the line f(u)=u\r\n * *\r\n * @public\r\n */\r\nexport type IntegratedSpiralTypeName = \"clothoid\" | \"bloss\" | \"biquadratic\" | \"cosine\" | \"sine\";\r\n\r\n/**\r\n * This is the set of valid type names for \"direct\" spirals.\r\n * \"Direct\" spirals can evaluate fractionToPoint by direct equations, i.e. not requiring the numeric integrations in \"Integrated\" spiral types.\r\n * @public\r\n */\r\nexport type DirectSpiralTypeName =\r\n \"JapaneseCubic\" // 1 term from each of the X,Y clothoid series expansions: y = x^3 / (6RL)\r\n | \"Arema\" // 2 terms from each of the X,Y clothoid series expansions. Identical to ChineseCubic!\r\n | \"ChineseCubic\" // Identical to Arema!\r\n | \"HalfCosine\" // high continuity cosine variation from quadratic.\r\n | \"AustralianRailCorp\" // cubic with high accuracy distance series\r\n | \"WesternAustralian\" // simple cubic -- 2 terms of x series, 1 term of y series.\r\n | \"Czech\" // simple cubic with two term distance approximation\r\n | \"MXCubicAlongArc\" // x obtained from fractional distance via 2-terms from series, y = x^3/ (6RL)\r\n | \"Polish\"\r\n | \"Italian\"\r\n ;\r\n\r\n/**\r\n * TransitionSpiral3d is a base class for multiple variants of spirals.\r\n * * The menagerie of spiral types have 2 broad categories:\r\n * * IntegratedSpiral3d -- a spiral whose direct function for curvature versus distance must be integrated to determine x,y\r\n * * The IntegratedSpiral3d types are enumerated in `IntegratedSpiralTypes`\r\n * * DirectSpiral3d -- a spiral implemented with direct calculation of x,y from fractional position along the spiral.\r\n * * The direct spiral types are enumerated in the `DirectSpiralType`\r\n * * The method set for CurvePrimitive support includes a `handleTransitionSpiral(g: TransitionSpiral3d)` which receives all the spiral types.\r\n * * The spiral class may impose expectations that its inflection is at the origin, with tangent along the x axis.\r\n * * This is generally necessary for direct spirals.\r\n * * This is not necessary for integrated spirals.\r\n * @public\r\n */\r\nexport abstract class TransitionSpiral3d extends CurvePrimitive {\r\n /** string name of spiral type */\r\n protected _spiralType: string;\r\n /** Original defining properties. */\r\n protected _designProperties: TransitionConditionalProperties | undefined;\r\n\r\n /** Fractional interval for the \"active\" part of a containing spiral.\r\n * (The radius, angle, and length conditions define a complete spiral, and some portion of it is \"active\")\r\n */\r\n protected _activeFractionInterval: Segment1d;\r\n /** Return (reference to) the active portion of the reference spiral. */\r\n public get activeFractionInterval(): Segment1d { return this._activeFractionInterval; }\r\n /** strokes in the active portion */\r\n public abstract get activeStrokes(): LineString3d;\r\n /** Placement transform */\r\n protected _localToWorld: Transform;\r\n /** (reference to) placement transform. */\r\n public get localToWorld(): Transform { return this._localToWorld; }\r\n\r\n protected constructor(spiralType: string | undefined, localToWorld: Transform, activeFractionInterval: Segment1d | undefined, designProperties: TransitionConditionalProperties | undefined) {\r\n super();\r\n this._spiralType = spiralType ? spiralType : \"unknownSpiralType\";\r\n this._designProperties = designProperties;\r\n this._localToWorld = localToWorld;\r\n this._activeFractionInterval = activeFractionInterval ? activeFractionInterval : Segment1d.create(0, 1);\r\n }\r\n\r\n public get spiralType(): string { return this._spiralType; }\r\n /** Return 1/r with convention that if true zero is given as radius it represents infinite radius (0 curvature, straight line) */\r\n public static radiusToCurvature(radius: number): number { return (radius === 0.0) ? 0.0 : 1.0 / radius; }\r\n\r\n /** Return 1/k with convention that if near-zero is given as curvature, its infinite radius is returned as 0 */\r\n public static curvatureToRadius(curvature: number): number {\r\n if (Math.abs(curvature) < Geometry.smallAngleRadians)\r\n return 0.0;\r\n return 1.0 / curvature;\r\n }\r\n\r\n /** Return a deep clone. */\r\n public abstract override clone(): TransitionSpiral3d;\r\n\r\n /** Recompute strokes */\r\n public abstract refreshComputedProperties(): void;\r\n\r\n /** Return (if possible) a spiral which is a portion of this curve. */\r\n public override clonePartialCurve(fractionA: number, fractionB: number): TransitionSpiral3d {\r\n const spiralB = this.clone();\r\n const globalFractionA = this._activeFractionInterval.fractionToPoint(fractionA);\r\n const globalFractionB = this._activeFractionInterval.fractionToPoint(fractionB);\r\n spiralB._activeFractionInterval.set(globalFractionA, globalFractionB);\r\n spiralB.refreshComputedProperties();\r\n return spiralB;\r\n }\r\n\r\n /** Clone with a transform applied */\r\n public override cloneTransformed(transform: Transform): TransitionSpiral3d {\r\n const result = this.clone();\r\n result.tryTransformInPlace(transform); // ok, we're confident it will always work.\r\n return result;\r\n }\r\n\r\n /** Return the average of the start and end curvatures. */\r\n public static averageCurvature(radiusLimits: Segment1d): number {\r\n return 0.5 * (TransitionSpiral3d.radiusToCurvature(radiusLimits.x0) + TransitionSpiral3d.radiusToCurvature(radiusLimits.x1));\r\n }\r\n /**\r\n * Given two radii (or zeros for 0 curvature) return the average curvature\r\n * @param r0 start radius, or 0 for line\r\n * @param r1 end radius, or 0 for line\r\n */\r\n public static averageCurvatureR0R1(r0: number, r1: number): number {\r\n return 0.5 * (TransitionSpiral3d.radiusToCurvature(r0) + TransitionSpiral3d.radiusToCurvature(r1));\r\n }\r\n /**\r\n * Given two radii (or zeros for 0 curvature) return the average curvature\r\n * @param r0 start radius, or 0 for line\r\n * @param r1 end radius, or 0 for line\r\n */\r\n public static interpolateCurvatureR0R1(r0: number, fraction: number, r1: number): number {\r\n return Geometry.interpolate(TransitionSpiral3d.radiusToCurvature(r0), fraction, TransitionSpiral3d.radiusToCurvature(r1));\r\n }\r\n\r\n /** Return the arc length of a transition spiral with given sweep and radius pair. */\r\n public static radiusRadiusSweepRadiansToArcLength(radius0: number, radius1: number, sweepRadians: number): number {\r\n return Math.abs(sweepRadians / TransitionSpiral3d.averageCurvatureR0R1(radius0, radius1));\r\n }\r\n\r\n /** Return the turn angle for spiral of given length between two radii */\r\n public static radiusRadiusLengthToSweepRadians(radius0: number, radius1: number, arcLength: number): number {\r\n return TransitionSpiral3d.averageCurvatureR0R1(radius0, radius1) * arcLength;\r\n }\r\n\r\n /** Return the end radius for spiral of given start radius, length, and turn angle. */\r\n public static radius0LengthSweepRadiansToRadius1(radius0: number, arcLength: number, sweepRadians: number) {\r\n return TransitionSpiral3d.curvatureToRadius((2.0 * sweepRadians / arcLength) - TransitionSpiral3d.radiusToCurvature(radius0));\r\n }\r\n /** Return the start radius for spiral of given end radius, length, and turn angle. */\r\n public static radius1LengthSweepRadiansToRadius0(radius1: number, arcLength: number, sweepRadians: number) {\r\n return TransitionSpiral3d.curvatureToRadius((2.0 * sweepRadians / arcLength) - TransitionSpiral3d.radiusToCurvature(radius1));\r\n }\r\n /** Return the original defining properties (if any) saved by the constructor. */\r\n public get designProperties(): TransitionConditionalProperties | undefined { return this._designProperties; }\r\n /**\r\n * * If transformA is rigid with uniform scale, apply the rigid part of transformA to the localToWorld transform and return the scale and rigid separation.\r\n * * If not rigid, do nothing and return undefined.\r\n * * Also apply the scale factor to the designProperties.\r\n * @param transformA\r\n */\r\n protected applyRigidPartOfTransform(transformA: Transform): { rigidAxes: Matrix3d, scale: number } | undefined {\r\n const rigidData = transformA.matrix.factorRigidWithSignedScale();\r\n if (rigidData !== undefined) {\r\n // [sQ a][R b] = [sQ*R sQb+a]\r\n // but we save it as [Q*R sQb+a] with spiral data scaled by s.\r\n const transformC0 = transformA.multiplyTransformTransform(this.localToWorld);\r\n // BUT pull the scale part out of the matrix ...\r\n const matrixC = rigidData.rigidAxes.multiplyMatrixMatrix(this.localToWorld.matrix);\r\n this._localToWorld = Transform.createOriginAndMatrix(transformC0.origin, matrixC);\r\n if (this.designProperties)\r\n this.designProperties.applyScaleFactor(rigidData.scale);\r\n\r\n return rigidData;\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Construct an offset of the instance curve as viewed in the xy-plane (ignoring z).\r\n * * No attempt is made to join the offsets of smaller constituent primitives. To construct a fully joined offset\r\n * for an aggregate instance (e.g., LineString3d, CurveChainWithDistanceIndex), use RegionOps.constructCurveXYOffset() instead.\r\n * @param offsetDistanceOrOptions offset distance (positive to left of the instance curve), or options object\r\n */\r\n public override constructOffsetXY(offsetDistanceOrOptions: number | OffsetOptions): CurvePrimitive | CurvePrimitive[] | undefined {\r\n const options = OffsetOptions.create(offsetDistanceOrOptions);\r\n const handler = new CurveOffsetXYHandler(this, options.leftOffsetDistance);\r\n this.emitStrokableParts(handler, options.strokeOptions);\r\n return handler.claimResult();\r\n }\r\n /** extend the range by the strokes of the spiral */\r\n public override extendRange(rangeToExtend: Range3d, transform?: Transform): void {\r\n const myRange = this.rangeBetweenFractions (0.0, 1.0, transform);\r\n rangeToExtend.extendRange (myRange);\r\n }\r\n\r\n /** return the range of spiral between fractions of the activeStrokes.\r\n * * Use activeStrokes point count times interval factor for initial evaluation count, but do at least 5\r\n */\r\n public override rangeBetweenFractions(fractionA: number, fractionB: number, transform?: Transform): Range3d {\r\n const strokes = this.activeStrokes;\r\n if (undefined === strokes)\r\n return Range3d.createNull ();\r\n let count = Math.ceil (strokes.numPoints() * Math.abs (fractionB - fractionA));\r\n count = Geometry.clamp (5, count, 30);\r\n return this.rangeBetweenFractionsByCount (fractionA, fractionB, count, transform, 0.5);\r\n }\r\n /** Project instance geometry (via dispatch) onto the given ray, and return the extreme fractional parameters of projection.\r\n * @param ray ray onto which the instance is projected. A `Vector3d` is treated as a `Ray3d` with zero origin.\r\n * @param lowHigh optional receiver for output\r\n * @returns range of fractional projection parameters onto the ray, where 0.0 is start of the ray and 1.0 is the end of the ray.\r\n */\r\n public override projectedParameterRange(ray: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined {\r\n return PlaneAltitudeRangeContext.findExtremeFractionsAlongDirection(this, ray, lowHigh);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"XYCurveEvaluator.js","sourceRoot":"","sources":["../../../../src/curve/spiral/XYCurveEvaluator.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 Curve\n */\nimport { Geometry } from \"../../Geometry\";\nimport { Plane3dByOriginAndVectors } from \"../../geometry3d/Plane3dByOriginAndVectors\";\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\nimport { Quadrature } from \"../../numerics/Quadrature\";\nimport { SimpleNewton } from \"../../numerics/Newton\";\n/**\n * XYCurveEvaluator is an abstract with methods for evaluating X and Y parts of a curve parameterized by a fraction.\n * * The required methods call for independent X and Y evaluation.\n * * Base class methods package those (multiple) calls into point, ray, and plane structures.\n * * A implementation that has evaluation substantial cost that can be shared among x,y parts or between\n * primary functions and derivatives might choose to implement the point and derivative methods directly.\n * @internal\n */\nexport abstract class XYCurveEvaluator {\n /** return a deep copy of the evaluator */\n public abstract clone(): XYCurveEvaluator;\n /** test for near identical evaluator */\n public abstract isAlmostEqual(other: any): boolean;\n /** Evaluate X at fractional position. */\n public abstract fractionToX(fraction: number): number;\n /** Evaluate Y at fractional position. */\n public abstract fractionToY(fraction: number): number;\n /** Evaluate derivative of X with respect to fraction at fractional position. */\n public abstract fractionToDX(fraction: number): number;\n /** Evaluate derivative of Y with respect to fraction at fractional position. */\n public abstract fractionToDY(fraction: number): number;\n /** Evaluate second derivative of X with respect to fraction at fractional position. */\n public abstract fractionToDDX(fraction: number): number;\n /** Evaluate second derivative of Y with respect to fraction at fractional position. */\n public abstract fractionToDDY(fraction: number): number;\n /** Evaluate both X and Y at fractional coordinate, return bundled as a point. */\n /** Evaluate second derivative of X with respect to fraction at fractional position. */\n public abstract fractionToD3X(fraction: number): number;\n /** Evaluate second derivative of Y with respect to fraction at fractional position. */\n public abstract fractionToD3Y(fraction: number): number;\n /** Evaluate both X and Y at fractional coordinate, return bundled as a point. */\n public fractionToPoint(fraction: number, result?: Point3d): Point3d {\n return Point3d.create(this.fractionToX(fraction), this.fractionToY(fraction), 0.0, result);\n }\n /** Evaluate both X and Y and their first derivatives at fractional coordinate, return bundled as origin and (non-unit) direction vector. */\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d {\n return Ray3d.createXYZUVW(this.fractionToX(fraction), this.fractionToY(fraction), 0.0,\n this.fractionToDX(fraction), this.fractionToDY(fraction), 0,\n result);\n }\n /** Evaluate both X and Y and their second derivatives at fractional coordinate, return bundled as origin and (non-unit) vectorU an vectorV. */\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(\n this.fractionToX(fraction), this.fractionToY(fraction), 0.0,\n this.fractionToDX(fraction), this.fractionToDY(fraction), 0,\n this.fractionToDDX(fraction), this.fractionToDDY(fraction), 0,\n result);\n }\n /**\n * Return the magnitude of the tangent vector at fraction.\n * @param fraction fractional position along the curve\n */\n public fractionToTangentMagnitude(fraction: number): number {\n const u = this.fractionToDX(fraction);\n const v = this.fractionToDY(fraction);\n return Geometry.hypotenuseXY(u, v);\n }\n\n /** Invert the fractionToX function for given X. */\n\n public abstract xToFraction(x: number): number | undefined;\n /** Initialize class level work arrays for 5 point Gaussian Quadrature. */\n // Class resources for integration . . .\n // These static variables are reused on calls to integrateFromStartFraction\n protected static _gaussX: Float64Array;\n protected static _gaussWeight: Float64Array;\n protected static _gaussMapper: (xA: number, xB: number, arrayX: Float64Array, arrayW: Float64Array) => number;\n public static initWorkSpace() {\n XYCurveEvaluator._gaussX = new Float64Array(5);\n XYCurveEvaluator._gaussWeight = new Float64Array(5);\n XYCurveEvaluator._gaussMapper = Quadrature.setupGauss5;\n }\n /**\n * Integrate between nominal fractions with default gauss rule.\n * * The caller is expected to choose nearby fractions so that the single gauss interval accuracy is good.\n * @param fraction0\n * @param fraction1\n */\n public integrateDistanceBetweenFractions(fraction0: number, fraction1: number): number {\n const gaussX = XYCurveEvaluator._gaussX;\n const gaussWeight = XYCurveEvaluator._gaussWeight;\n const numEval = XYCurveEvaluator._gaussMapper(fraction0, fraction1, gaussX, gaussWeight);\n let sum = 0;\n for (let k = 0; k < numEval; k++) {\n sum += gaussWeight[k] * this.fractionToTangentMagnitude(gaussX[k]);\n }\n return sum;\n }\n /**\n * Inverse integrated distance\n * @param fraction0 start of fraction interval\n * @param fraction1 end of fraction interval\n * @param distance0 distance at start\n * @param distance1 distance at end\n * @param targetDistance intermediate distance.\n */\n public inverseDistanceFraction(fraction0: number, fraction1: number, distance0: number, distance1: number, targetDistance: number): number | undefined {\n const startFraction = Geometry.inverseInterpolate(fraction0, distance0, fraction1, distance1, targetDistance);\n if (startFraction !== undefined) {\n return SimpleNewton.runNewton1D(startFraction,\n (fraction: number) => {\n const d = this.integrateDistanceBetweenFractions(fraction0, fraction);\n return distance0 + d - targetDistance;\n },\n (fraction: number) => this.fractionToTangentMagnitude(fraction));\n }\n return undefined;\n }\n\n /**\n *\n * @param fraction fractional position along x axis\n * @param xy xy coordinates of point on the curve\n * @param d1xy\n * @param d2xy\n * @param d3xy\n */\n public fractionToPointAnd3Derivatives(fraction: number, xy: Point3d, d1xy?: Vector3d, d2xy?: Vector3d, d3xy?: Vector3d) {\n xy.set(this.fractionToX(fraction), this.fractionToY(fraction), 0);\n if (d1xy)\n d1xy.set(this.fractionToDX(fraction), this.fractionToDY(fraction), 0);\n if (d2xy)\n d2xy.set(this.fractionToDDX(fraction), this.fractionToDDY(fraction), 0);\n if (d3xy)\n d3xy.set(this.fractionToD3X(fraction), this.fractionToD3Y(fraction), 0);\n }\n /** Apply a uniform scale around the origin. */\n public abstract scaleInPlace(scaleFactor: number): void;\n}\n// at load time, initialize gauss quadrature workspace\nXYCurveEvaluator.initWorkSpace();\n"]}
1
+ {"version":3,"file":"XYCurveEvaluator.js","sourceRoot":"","sources":["../../../../src/curve/spiral/XYCurveEvaluator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Curve\r\n */\r\nimport { Geometry } from \"../../Geometry\";\r\nimport { Plane3dByOriginAndVectors } from \"../../geometry3d/Plane3dByOriginAndVectors\";\r\nimport { Point3d, Vector3d } from \"../../geometry3d/Point3dVector3d\";\r\nimport { Ray3d } from \"../../geometry3d/Ray3d\";\r\nimport { Quadrature } from \"../../numerics/Quadrature\";\r\nimport { SimpleNewton } from \"../../numerics/Newton\";\r\n/**\r\n * XYCurveEvaluator is an abstract with methods for evaluating X and Y parts of a curve parameterized by a fraction.\r\n * * The required methods call for independent X and Y evaluation.\r\n * * Base class methods package those (multiple) calls into point, ray, and plane structures.\r\n * * A implementation that has evaluation substantial cost that can be shared among x,y parts or between\r\n * primary functions and derivatives might choose to implement the point and derivative methods directly.\r\n * @internal\r\n */\r\nexport abstract class XYCurveEvaluator {\r\n /** return a deep copy of the evaluator */\r\n public abstract clone(): XYCurveEvaluator;\r\n /** test for near identical evaluator */\r\n public abstract isAlmostEqual(other: any): boolean;\r\n /** Evaluate X at fractional position. */\r\n public abstract fractionToX(fraction: number): number;\r\n /** Evaluate Y at fractional position. */\r\n public abstract fractionToY(fraction: number): number;\r\n /** Evaluate derivative of X with respect to fraction at fractional position. */\r\n public abstract fractionToDX(fraction: number): number;\r\n /** Evaluate derivative of Y with respect to fraction at fractional position. */\r\n public abstract fractionToDY(fraction: number): number;\r\n /** Evaluate second derivative of X with respect to fraction at fractional position. */\r\n public abstract fractionToDDX(fraction: number): number;\r\n /** Evaluate second derivative of Y with respect to fraction at fractional position. */\r\n public abstract fractionToDDY(fraction: number): number;\r\n /** Evaluate both X and Y at fractional coordinate, return bundled as a point. */\r\n /** Evaluate second derivative of X with respect to fraction at fractional position. */\r\n public abstract fractionToD3X(fraction: number): number;\r\n /** Evaluate second derivative of Y with respect to fraction at fractional position. */\r\n public abstract fractionToD3Y(fraction: number): number;\r\n /** Evaluate both X and Y at fractional coordinate, return bundled as a point. */\r\n public fractionToPoint(fraction: number, result?: Point3d): Point3d {\r\n return Point3d.create(this.fractionToX(fraction), this.fractionToY(fraction), 0.0, result);\r\n }\r\n /** Evaluate both X and Y and their first derivatives at fractional coordinate, return bundled as origin and (non-unit) direction vector. */\r\n public fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d {\r\n return Ray3d.createXYZUVW(this.fractionToX(fraction), this.fractionToY(fraction), 0.0,\r\n this.fractionToDX(fraction), this.fractionToDY(fraction), 0,\r\n result);\r\n }\r\n /** Evaluate both X and Y and their second derivatives at fractional coordinate, return bundled as origin and (non-unit) vectorU an vectorV. */\r\n public fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors {\r\n return Plane3dByOriginAndVectors.createOriginAndVectorsXYZ(\r\n this.fractionToX(fraction), this.fractionToY(fraction), 0.0,\r\n this.fractionToDX(fraction), this.fractionToDY(fraction), 0,\r\n this.fractionToDDX(fraction), this.fractionToDDY(fraction), 0,\r\n result);\r\n }\r\n /**\r\n * Return the magnitude of the tangent vector at fraction.\r\n * @param fraction fractional position along the curve\r\n */\r\n public fractionToTangentMagnitude(fraction: number): number {\r\n const u = this.fractionToDX(fraction);\r\n const v = this.fractionToDY(fraction);\r\n return Geometry.hypotenuseXY(u, v);\r\n }\r\n\r\n /** Invert the fractionToX function for given X. */\r\n\r\n public abstract xToFraction(x: number): number | undefined;\r\n /** Initialize class level work arrays for 5 point Gaussian Quadrature. */\r\n // Class resources for integration . . .\r\n // These static variables are reused on calls to integrateFromStartFraction\r\n protected static _gaussX: Float64Array;\r\n protected static _gaussWeight: Float64Array;\r\n protected static _gaussMapper: (xA: number, xB: number, arrayX: Float64Array, arrayW: Float64Array) => number;\r\n public static initWorkSpace() {\r\n XYCurveEvaluator._gaussX = new Float64Array(5);\r\n XYCurveEvaluator._gaussWeight = new Float64Array(5);\r\n XYCurveEvaluator._gaussMapper = Quadrature.setupGauss5;\r\n }\r\n /**\r\n * Integrate between nominal fractions with default gauss rule.\r\n * * The caller is expected to choose nearby fractions so that the single gauss interval accuracy is good.\r\n * @param fraction0\r\n * @param fraction1\r\n */\r\n public integrateDistanceBetweenFractions(fraction0: number, fraction1: number): number {\r\n const gaussX = XYCurveEvaluator._gaussX;\r\n const gaussWeight = XYCurveEvaluator._gaussWeight;\r\n const numEval = XYCurveEvaluator._gaussMapper(fraction0, fraction1, gaussX, gaussWeight);\r\n let sum = 0;\r\n for (let k = 0; k < numEval; k++) {\r\n sum += gaussWeight[k] * this.fractionToTangentMagnitude(gaussX[k]);\r\n }\r\n return sum;\r\n }\r\n /**\r\n * Inverse integrated distance\r\n * @param fraction0 start of fraction interval\r\n * @param fraction1 end of fraction interval\r\n * @param distance0 distance at start\r\n * @param distance1 distance at end\r\n * @param targetDistance intermediate distance.\r\n */\r\n public inverseDistanceFraction(fraction0: number, fraction1: number, distance0: number, distance1: number, targetDistance: number): number | undefined {\r\n const startFraction = Geometry.inverseInterpolate(fraction0, distance0, fraction1, distance1, targetDistance);\r\n if (startFraction !== undefined) {\r\n return SimpleNewton.runNewton1D(startFraction,\r\n (fraction: number) => {\r\n const d = this.integrateDistanceBetweenFractions(fraction0, fraction);\r\n return distance0 + d - targetDistance;\r\n },\r\n (fraction: number) => this.fractionToTangentMagnitude(fraction));\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n *\r\n * @param fraction fractional position along x axis\r\n * @param xy xy coordinates of point on the curve\r\n * @param d1xy\r\n * @param d2xy\r\n * @param d3xy\r\n */\r\n public fractionToPointAnd3Derivatives(fraction: number, xy: Point3d, d1xy?: Vector3d, d2xy?: Vector3d, d3xy?: Vector3d) {\r\n xy.set(this.fractionToX(fraction), this.fractionToY(fraction), 0);\r\n if (d1xy)\r\n d1xy.set(this.fractionToDX(fraction), this.fractionToDY(fraction), 0);\r\n if (d2xy)\r\n d2xy.set(this.fractionToDDX(fraction), this.fractionToDDY(fraction), 0);\r\n if (d3xy)\r\n d3xy.set(this.fractionToD3X(fraction), this.fractionToD3Y(fraction), 0);\r\n }\r\n /** Apply a uniform scale around the origin. */\r\n public abstract scaleInPlace(scaleFactor: number): void;\r\n}\r\n// at load time, initialize gauss quadrature workspace\r\nXYCurveEvaluator.initWorkSpace();\r\n"]}
@@ -90,11 +90,11 @@ export declare class Angle implements BeJSONFunctions {
90
90
  */
91
91
  setFromJSON(json?: AngleProps, defaultValRadians?: number): void;
92
92
  /**
93
- * Create an Angle from a JSON object
94
- * @param json object from JSON.parse. If a number, value is in *DEGREES*
95
- * @param defaultValRadians if json is undefined, default value in radians.
96
- * @return a new Angle
97
- */
93
+ * Create an Angle from a JSON object
94
+ * @param json object from JSON.parse. If a number, value is in *DEGREES*
95
+ * @param defaultValRadians if json is undefined, default value in radians.
96
+ * @return a new Angle
97
+ */
98
98
  static fromJSON(json?: AngleProps, defaultValRadians?: number): Angle;
99
99
  /** Convert an Angle to a JSON object as a number in degrees */
100
100
  toJSON(): AngleProps;
@@ -114,25 +114,19 @@ export declare class Angle implements BeJSONFunctions {
114
114
  * @param degrees angle in radians
115
115
  */
116
116
  static radiansToDegrees(radians: number): number;
117
- /**
118
- * Return the cosine of this Angle object's angle.
119
- */
117
+ /** Return the cosine of this Angle object's angle */
120
118
  cos(): number;
121
- /**
122
- * Return the sine of this Angle object's angle.
123
- */
119
+ /** Return the sine of this Angle object's angle */
124
120
  sin(): number;
125
- /**
126
- * Return the tangent of this Angle object's angle.
127
- */
121
+ /** Return the tangent of this Angle object's angle */
128
122
  tan(): number;
129
123
  /** Test if a radians (absolute) value is nearly 2PI or larger! */
130
124
  static isFullCircleRadians(radians: number): boolean;
131
125
  /** Test if the radians value is a half circle */
132
126
  static isHalfCircleRadians(radians: number): boolean;
133
- /** test if the angle is a full circle */
127
+ /** Test if the angle is a full circle */
134
128
  get isFullCircle(): boolean;
135
- /** test if the angle is a half circle (in either direction) */
129
+ /** Test if the angle is a half circle (in either direction) */
136
130
  get isHalfCircle(): boolean;
137
131
  /** Adjust a radians value so it is positive in 0..360 */
138
132
  static adjustDegrees0To360(degrees: number): number;
@@ -142,7 +136,7 @@ export declare class Angle implements BeJSONFunctions {
142
136
  static adjustRadians0To2Pi(radians: number): number;
143
137
  /** Adjust a radians value so it is positive in -PI..PI */
144
138
  static adjustRadiansMinusPiPlusPi(radians: number): number;
145
- /** return a (newly allocated) Angle object with value 0 radians */
139
+ /** Return a (newly allocated) Angle object with value 0 radians */
146
140
  static zero(): Angle;
147
141
  /** Test if the angle is exactly zero. */
148
142
  get isExactZero(): boolean;
@@ -205,24 +199,23 @@ export declare class Angle implements BeJSONFunctions {
205
199
  /** If value is close to -1, -0.5, 0, 0.5, 1, adjust it to the exact value. */
206
200
  static cleanupTrigValue(value: number, tolerance?: number): number;
207
201
  /**
208
- * Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
209
- * an ellipse using x(t) = c + U cos(t) + V sin(t) so U and V are at angle t=0 degree and t=90 degree. The
210
- * half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
211
- * * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
212
- * * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
213
- * perpendicular to the ellipse.
214
- * * Then 0 = W(t0).x'(t0) = (U cos(t0) + V sin(t0)).(V cos(t0) - U sin(t0)) = U.V cos(2t0) + 0.5 (V.V - U.U) sin(2t0)
215
- * implies sin(2t0) / cos(2t0) = 2 U.V / (U.U - V.V), i.e., t0 can be computed given the three dot products on the RHS.
216
- * math details can be found at docs/learning/geometry/Angle.md
217
- * @param dotUU dot product of vectorU with itself
218
- * @param dotVV dot product of vectorV with itself
219
- * @param dotUV dot product of vectorU with vectorV
220
- */
202
+ * Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
203
+ * an ellipse using x(t) = c + U cos(t) + V sin(t) so U and V are at angle t=0 degree and t=90 degree. The
204
+ * half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
205
+ * * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
206
+ * * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
207
+ * perpendicular to the ellipse.
208
+ * * Then 0 = W(t0).x'(t0) = (U cos(t0) + V sin(t0)).(V cos(t0) - U sin(t0)) = U.V cos(2t0) + 0.5 (V.V - U.U) sin(2t0)
209
+ * implies sin(2t0) / cos(2t0) = 2 U.V / (U.U - V.V), i.e., t0 can be computed given the three dot products on the RHS.
210
+ * math details can be found at docs/learning/geometry/Angle.md
211
+ * @param dotUU dot product of vectorU with itself
212
+ * @param dotVV dot product of vectorV with itself
213
+ * @param dotUV dot product of vectorU with vectorV
214
+ */
221
215
  static dotProductsToHalfAngleTrigValues(dotUU: number, dotVV: number, dotUV: number, favorZero?: boolean): TrigValues;
222
216
  /**
223
- * * Returns the angle between two vectors, with the vectors given as xyz components
217
+ * Returns the angle between two vectors, with the vectors given as xyz components
224
218
  * * The returned angle is between 0 and PI
225
- *
226
219
  * @param ux x component of vector u
227
220
  * @param uy y component of vector u
228
221
  * @param uz z component of vector u
@@ -232,7 +225,8 @@ export declare class Angle implements BeJSONFunctions {
232
225
  */
233
226
  static radiansBetweenVectorsXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number;
234
227
  /**
235
- * * Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve angle to a full 2PI range.
228
+ * Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve
229
+ * angle to a full 2PI range.
236
230
  * * The returned angle is (-PI < radians <= PI) or (0 <= radians < 2 * PI)
237
231
  * * The angle is in the plane of the U and V vectors.
238
232
  * * The upVector determines a positive side of the plane but need not be strictly perpendicular to the plane.
@@ -246,7 +240,8 @@ export declare class Angle implements BeJSONFunctions {
246
240
  * @param upVectorX x component of vector to positive side of plane.
247
241
  * @param upVectorY y component of vector to positive side of plane.
248
242
  * @param upVectorZ z component of vector to positive side of plane.
249
- * @param adjustToAllPositive if true, return strictly non-negative sweep (0 <= radians < 2*PI). If false, return signed (-PI < radians <= PI)
243
+ * @param adjustToAllPositive if true, return strictly non-negative sweep (0 <= radians < 2*PI). If false, return
244
+ * signed (-PI < radians <= PI)
250
245
  */
251
246
  static orientedRadiansBetweenVectorsXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, upVectorX: number, upVectorY: number, upVectorZ: number, adjustToPositive?: boolean): number;
252
247
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Angle.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Angle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Angle.d.ts","sourceRoot":"","sources":["../../../src/geometry3d/Angle.ts"],"names":[],"mappings":"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"}
@@ -125,11 +125,11 @@ class Angle {
125
125
  }
126
126
  }
127
127
  /**
128
- * Create an Angle from a JSON object
129
- * @param json object from JSON.parse. If a number, value is in *DEGREES*
130
- * @param defaultValRadians if json is undefined, default value in radians.
131
- * @return a new Angle
132
- */
128
+ * Create an Angle from a JSON object
129
+ * @param json object from JSON.parse. If a number, value is in *DEGREES*
130
+ * @param defaultValRadians if json is undefined, default value in radians.
131
+ * @return a new Angle
132
+ */
133
133
  static fromJSON(json, defaultValRadians) {
134
134
  const val = new Angle();
135
135
  val.setFromJSON(json, defaultValRadians);
@@ -184,21 +184,15 @@ class Angle {
184
184
  // all larger radians reference from 360 degrees (2PI)
185
185
  return 360.0 + 180 * ((radians - 2.0 * pi) / pi);
186
186
  }
187
- /**
188
- * Return the cosine of this Angle object's angle.
189
- */
187
+ /** Return the cosine of this Angle object's angle */
190
188
  cos() {
191
189
  return Math.cos(this._radians);
192
190
  }
193
- /**
194
- * Return the sine of this Angle object's angle.
195
- */
191
+ /** Return the sine of this Angle object's angle */
196
192
  sin() {
197
193
  return Math.sin(this._radians);
198
194
  }
199
- /**
200
- * Return the tangent of this Angle object's angle.
201
- */
195
+ /** Return the tangent of this Angle object's angle */
202
196
  tan() {
203
197
  return Math.tan(this._radians);
204
198
  }
@@ -210,11 +204,11 @@ class Angle {
210
204
  static isHalfCircleRadians(radians) {
211
205
  return Math.abs(Math.abs(radians) - Math.PI) <= Geometry.smallAngleRadians;
212
206
  }
213
- /** test if the angle is a full circle */
207
+ /** Test if the angle is a full circle */
214
208
  get isFullCircle() {
215
209
  return Angle.isFullCircleRadians(this._radians);
216
210
  }
217
- /** test if the angle is a half circle (in either direction) */
211
+ /** Test if the angle is a half circle (in either direction) */
218
212
  get isHalfCircle() {
219
213
  return Angle.isHalfCircleRadians(this._radians);
220
214
  }
@@ -283,7 +277,7 @@ class Angle {
283
277
  // fall through for NaN disaster.
284
278
  return 0;
285
279
  }
286
- /** return a (newly allocated) Angle object with value 0 radians */
280
+ /** Return a (newly allocated) Angle object with value 0 radians */
287
281
  static zero() {
288
282
  return new Angle(0);
289
283
  }
@@ -437,19 +431,19 @@ class Angle {
437
431
  return value;
438
432
  }
439
433
  /**
440
- * Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
441
- * an ellipse using x(t) = c + U cos(t) + V sin(t) so U and V are at angle t=0 degree and t=90 degree. The
442
- * half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
443
- * * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
444
- * * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
445
- * perpendicular to the ellipse.
446
- * * Then 0 = W(t0).x'(t0) = (U cos(t0) + V sin(t0)).(V cos(t0) - U sin(t0)) = U.V cos(2t0) + 0.5 (V.V - U.U) sin(2t0)
447
- * implies sin(2t0) / cos(2t0) = 2 U.V / (U.U - V.V), i.e., t0 can be computed given the three dot products on the RHS.
448
- * math details can be found at docs/learning/geometry/Angle.md
449
- * @param dotUU dot product of vectorU with itself
450
- * @param dotVV dot product of vectorV with itself
451
- * @param dotUV dot product of vectorU with vectorV
452
- */
434
+ * Return the half angle cosine, sine, and radians for given dot products between vectors. The vectors define
435
+ * an ellipse using x(t) = c + U cos(t) + V sin(t) so U and V are at angle t=0 degree and t=90 degree. The
436
+ * half angle t0 is an angle such that x(t0) is one of the ellipse semi-axis.
437
+ * * This construction arises e.g. in `Arc3d.toScaledMatrix3d`.
438
+ * * Given ellipse x(t) = c + U cos(t) + V sin(t), find t0 such that radial vector W(t0) = x(t0) - c is
439
+ * perpendicular to the ellipse.
440
+ * * Then 0 = W(t0).x'(t0) = (U cos(t0) + V sin(t0)).(V cos(t0) - U sin(t0)) = U.V cos(2t0) + 0.5 (V.V - U.U) sin(2t0)
441
+ * implies sin(2t0) / cos(2t0) = 2 U.V / (U.U - V.V), i.e., t0 can be computed given the three dot products on the RHS.
442
+ * math details can be found at docs/learning/geometry/Angle.md
443
+ * @param dotUU dot product of vectorU with itself
444
+ * @param dotVV dot product of vectorV with itself
445
+ * @param dotUV dot product of vectorU with vectorV
446
+ */
453
447
  static dotProductsToHalfAngleTrigValues(dotUU, dotVV, dotUV, favorZero = true) {
454
448
  const cos2t0 = dotUU - dotVV;
455
449
  const sin2t0 = 2.0 * dotUV;
@@ -458,9 +452,8 @@ class Angle {
458
452
  return Angle.trigValuesToHalfAngleTrigValues(cos2t0, sin2t0);
459
453
  }
460
454
  /**
461
- * * Returns the angle between two vectors, with the vectors given as xyz components
455
+ * Returns the angle between two vectors, with the vectors given as xyz components
462
456
  * * The returned angle is between 0 and PI
463
- *
464
457
  * @param ux x component of vector u
465
458
  * @param uy y component of vector u
466
459
  * @param uz z component of vector u
@@ -473,7 +466,8 @@ class Angle {
473
466
  return Math.atan2(Geometry.crossProductMagnitude(ux, uy, uz, vx, vy, vz), uDotV);
474
467
  }
475
468
  /**
476
- * * Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve angle to a full 2PI range.
469
+ * Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve
470
+ * angle to a full 2PI range.
477
471
  * * The returned angle is (-PI < radians <= PI) or (0 <= radians < 2 * PI)
478
472
  * * The angle is in the plane of the U and V vectors.
479
473
  * * The upVector determines a positive side of the plane but need not be strictly perpendicular to the plane.
@@ -487,7 +481,8 @@ class Angle {
487
481
  * @param upVectorX x component of vector to positive side of plane.
488
482
  * @param upVectorY y component of vector to positive side of plane.
489
483
  * @param upVectorZ z component of vector to positive side of plane.
490
- * @param adjustToAllPositive if true, return strictly non-negative sweep (0 <= radians < 2*PI). If false, return signed (-PI < radians <= PI)
484
+ * @param adjustToAllPositive if true, return strictly non-negative sweep (0 <= radians < 2*PI). If false, return
485
+ * signed (-PI < radians <= PI)
491
486
  */
492
487
  static orientedRadiansBetweenVectorsXYZ(ux, uy, uz, vx, vy, vz, upVectorX, upVectorY, upVectorZ, adjustToPositive = false) {
493
488
  const uDotV = ux * vx + uy * vy + uz * vz;
@@ -498,8 +493,8 @@ class Angle {
498
493
  const crossMagnitude = Geometry.hypotenuseXYZ(wx, wy, wz);
499
494
  if (upDotW < 0.0) {
500
495
  if (adjustToPositive) {
501
- // The turn is greater than 180 degrees. Take a peculiarly oriented atan2 to get the excess-180 part as addition to PI.
502
- // This gives the smoothest numerical transition passing PI.
496
+ // The turn is greater than 180 degrees. Take a peculiarly oriented atan2 to get the excess-180 part as
497
+ // addition to PI. This gives the smoothest numerical transition passing PI.
503
498
  return Math.PI + Math.atan2(crossMagnitude, -uDotV);
504
499
  }
505
500
  else {