@itwin/core-geometry 3.5.0-dev.7 → 3.6.0-dev.1

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