flo-mat 2.0.4 → 3.0.0

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 (652) hide show
  1. package/.quokka +4 -0
  2. package/browser/index.js +18434 -14538
  3. package/browser/index.min.js +1 -1
  4. package/node/closest-boundary-point/cull-bezier-pieces.d.ts +9 -0
  5. package/node/closest-boundary-point/cull-bezier-pieces.js +17 -0
  6. package/node/closest-boundary-point/cull-bezier-pieces.js.map +1 -0
  7. package/node/{mat/closest-boundary-point → closest-boundary-point}/cull-by-loose-bounding-box.d.ts +2 -2
  8. package/node/{mat/closest-boundary-point → closest-boundary-point}/cull-by-loose-bounding-box.js +2 -2
  9. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -0
  10. package/node/{mat/closest-boundary-point → closest-boundary-point}/cull-by-tight-boundary-box.d.ts +2 -2
  11. package/node/{mat/closest-boundary-point → closest-boundary-point}/cull-by-tight-boundary-box.js +1 -1
  12. package/node/closest-boundary-point/cull-by-tight-boundary-box.js.map +1 -0
  13. package/node/closest-boundary-point/dd-deflate-with-running-error.d.ts +25 -0
  14. package/node/closest-boundary-point/dd-deflate-with-running-error.js +68 -0
  15. package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +1 -0
  16. package/node/closest-boundary-point/foot-and-endpoint-info.d.ts +10 -0
  17. package/node/closest-boundary-point/foot-and-endpoint-info.js +2 -0
  18. package/node/closest-boundary-point/foot-and-endpoint-info.js.map +1 -0
  19. package/node/{mat/closest-boundary-point → closest-boundary-point}/get-best-distance-squared.d.ts +2 -2
  20. package/node/{mat/closest-boundary-point → closest-boundary-point}/get-best-distance-squared.js +2 -3
  21. package/node/closest-boundary-point/get-best-distance-squared.js.map +1 -0
  22. package/node/closest-boundary-point/get-close-boundary-points-certified.d.ts +15 -0
  23. package/node/closest-boundary-point/get-close-boundary-points-certified.js +40 -0
  24. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -0
  25. package/node/closest-boundary-point/get-closest-boundary-point-certified.d.ts +15 -0
  26. package/node/closest-boundary-point/get-closest-boundary-point-certified.js +42 -0
  27. package/node/closest-boundary-point/get-closest-boundary-point-certified.js.map +1 -0
  28. package/node/closest-boundary-point/get-p-from-box.d.ts +3 -0
  29. package/node/closest-boundary-point/get-p-from-box.js +11 -0
  30. package/node/closest-boundary-point/get-p-from-box.js.map +1 -0
  31. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.d.ts +12 -0
  32. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +93 -0
  33. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -0
  34. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +13 -0
  35. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +58 -0
  36. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -0
  37. package/node/{contact-point.d.ts → contact-point/contact-point.d.ts} +3 -3
  38. package/node/{contact-point.js → contact-point/contact-point.js} +1 -5
  39. package/node/contact-point/contact-point.js.map +1 -0
  40. package/node/{compare-curvatures-at-interface.js → corner/compare-curvatures-at-interface.js} +2 -2
  41. package/node/corner/compare-curvatures-at-interface.js.map +1 -0
  42. package/node/{mat → corner}/corner.d.ts +1 -1
  43. package/node/{mat → corner}/corner.js.map +1 -1
  44. package/node/corner/get-corner.d.ts +15 -0
  45. package/node/{curve.js → corner/get-corner.js} +6 -17
  46. package/node/corner/get-corner.js.map +1 -0
  47. package/node/{get-interface-ccw.js → corner/get-interface-ccw.js} +18 -33
  48. package/node/corner/get-interface-ccw.js.map +1 -0
  49. package/node/cp-node/clone.d.ts +1 -1
  50. package/node/cp-node/clone.js +6 -4
  51. package/node/cp-node/clone.js.map +1 -1
  52. package/node/cp-node/cp-node.d.ts +196 -0
  53. package/node/cp-node/cp-node.js +249 -0
  54. package/node/cp-node/cp-node.js.map +1 -0
  55. package/node/cp-node/create-cp-node.d.ts +4 -0
  56. package/node/cp-node/create-cp-node.js +8 -0
  57. package/node/cp-node/create-cp-node.js.map +1 -0
  58. package/node/cp-node/enhance-cp-node.d.ts +24 -0
  59. package/node/cp-node/enhance-cp-node.js +20 -0
  60. package/node/cp-node/enhance-cp-node.js.map +1 -0
  61. package/node/{get-boundary-bezier-parts-to-next.js → cp-node/get-boundary-bezier-parts-to-next.js} +1 -1
  62. package/node/cp-node/get-boundary-bezier-parts-to-next.js.map +1 -0
  63. package/node/{get-boundary-beziers-to-next.d.ts → cp-node/get-boundary-beziers-to-next.d.ts} +1 -1
  64. package/node/{get-boundary-beziers-to-next.js → cp-node/get-boundary-beziers-to-next.js} +1 -1
  65. package/node/cp-node/get-boundary-beziers-to-next.js.map +1 -0
  66. package/node/cp-node/get-cp-node-ordering.d.ts +8 -0
  67. package/node/cp-node/get-cp-node-ordering.js +12 -0
  68. package/node/cp-node/get-cp-node-ordering.js.map +1 -0
  69. package/node/{get-curve-to-next.js → cp-node/get-curve-to-next.js} +1 -1
  70. package/node/cp-node/get-curve-to-next.js.map +1 -0
  71. package/node/cp-node/remove.d.ts +1 -1
  72. package/node/cp-node/traverse-cp.d.ts +12 -0
  73. package/node/cp-node/traverse-cp.js +26 -0
  74. package/node/cp-node/traverse-cp.js.map +1 -0
  75. package/node/{traverse-edges.js → cp-node/traverse-edges.js} +4 -3
  76. package/node/cp-node/traverse-edges.js.map +1 -0
  77. package/node/{traverse-vertices.js → cp-node/traverse-vertices.js} +4 -3
  78. package/node/cp-node/traverse-vertices.js.map +1 -0
  79. package/node/{curve.d.ts → curve/curve.d.ts} +4 -17
  80. package/node/curve/curve.js +14 -0
  81. package/node/curve/curve.js.map +1 -0
  82. package/node/debug/cp-node-for-debugging.d.ts +2 -2
  83. package/node/debug/debug-elem-types.d.ts +8 -8
  84. package/node/debug/debug.d.ts +6 -6
  85. package/node/debug/debug.js +2 -2
  86. package/node/debug/debug.js.map +1 -1
  87. package/node/debug/functions/draw-elem/bounding-hull.d.ts +2 -2
  88. package/node/debug/functions/draw-elem/bounding-hull.js +3 -3
  89. package/node/debug/functions/draw-elem/bounding-hull.js.map +1 -1
  90. package/node/debug/functions/draw-elem/branch.d.ts +2 -2
  91. package/node/debug/functions/draw-elem/branch.js +4 -3
  92. package/node/debug/functions/draw-elem/branch.js.map +1 -1
  93. package/node/debug/functions/draw-elem/culls.d.ts +2 -2
  94. package/node/debug/functions/draw-elem/culls.js +2 -2
  95. package/node/debug/functions/draw-elem/culls.js.map +1 -1
  96. package/node/debug/functions/draw-elem/draw-circle-percent.d.ts +1 -1
  97. package/node/debug/functions/draw-elem/draw-circle-percent.js +1 -1
  98. package/node/debug/functions/draw-elem/draw-circle-percent.js.map +1 -1
  99. package/node/debug/functions/draw-elem/draw-elem.d.ts +3 -3
  100. package/node/debug/functions/draw-elem/draw-elem.js +3 -3
  101. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  102. package/node/debug/functions/draw-elem/dull-corner.d.ts +3 -3
  103. package/node/debug/functions/draw-elem/dull-corner.js +3 -4
  104. package/node/debug/functions/draw-elem/dull-corner.js.map +1 -1
  105. package/node/debug/functions/draw-elem/leaves.d.ts +2 -2
  106. package/node/debug/functions/draw-elem/leaves.js +1 -1
  107. package/node/debug/functions/draw-elem/leaves.js.map +1 -1
  108. package/node/debug/functions/draw-elem/loop.d.ts +2 -2
  109. package/node/debug/functions/draw-elem/loop.js +1 -2
  110. package/node/debug/functions/draw-elem/loop.js.map +1 -1
  111. package/node/debug/functions/draw-elem/loops.d.ts +1 -1
  112. package/node/debug/functions/draw-elem/loops.js +0 -1
  113. package/node/debug/functions/draw-elem/loops.js.map +1 -1
  114. package/node/debug/functions/draw-elem/loose-bounding-box.d.ts +2 -2
  115. package/node/debug/functions/draw-elem/loose-bounding-box.js +3 -3
  116. package/node/debug/functions/draw-elem/loose-bounding-box.js.map +1 -1
  117. package/node/debug/functions/draw-elem/mat.d.ts +3 -3
  118. package/node/debug/functions/draw-elem/mat.js +9 -7
  119. package/node/debug/functions/draw-elem/mat.js.map +1 -1
  120. package/node/debug/functions/draw-elem/max-vertex.d.ts +2 -2
  121. package/node/debug/functions/draw-elem/max-vertex.js +1 -1
  122. package/node/debug/functions/draw-elem/max-vertex.js.map +1 -1
  123. package/node/debug/functions/draw-elem/min-y.d.ts +3 -3
  124. package/node/debug/functions/draw-elem/min-y.js +2 -6
  125. package/node/debug/functions/draw-elem/min-y.js.map +1 -1
  126. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.d.ts +2 -2
  127. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js +2 -2
  128. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js.map +1 -1
  129. package/node/debug/functions/draw-elem/one-prong.d.ts +2 -2
  130. package/node/debug/functions/draw-elem/one-prong.js +6 -11
  131. package/node/debug/functions/draw-elem/one-prong.js.map +1 -1
  132. package/node/debug/functions/draw-elem/sharp-corner.d.ts +3 -3
  133. package/node/debug/functions/draw-elem/sharp-corner.js +3 -4
  134. package/node/debug/functions/draw-elem/sharp-corner.js.map +1 -1
  135. package/node/debug/functions/draw-elem/three-prong.d.ts +2 -2
  136. package/node/debug/functions/draw-elem/three-prong.js +8 -10
  137. package/node/debug/functions/draw-elem/three-prong.js.map +1 -1
  138. package/node/debug/functions/draw-elem/tight-bounding-box.d.ts +2 -2
  139. package/node/debug/functions/draw-elem/tight-bounding-box.js +3 -3
  140. package/node/debug/functions/draw-elem/tight-bounding-box.js.map +1 -1
  141. package/node/debug/functions/draw-elem/two-prong.d.ts +2 -2
  142. package/node/debug/functions/draw-elem/two-prong.js +7 -8
  143. package/node/debug/functions/draw-elem/two-prong.js.map +1 -1
  144. package/node/debug/functions/draw-elem/vertex.d.ts +4 -3
  145. package/node/debug/functions/draw-elem/vertex.js +11 -9
  146. package/node/debug/functions/draw-elem/vertex.js.map +1 -1
  147. package/node/debug/functions/general.d.ts +8 -8
  148. package/node/debug/functions/general.js +8 -8
  149. package/node/debug/functions/general.js.map +1 -1
  150. package/node/debug/functions/three-prong.d.ts +2 -2
  151. package/node/debug/functions/three-prong.js +10 -13
  152. package/node/debug/functions/three-prong.js.map +1 -1
  153. package/node/debug/functions/two-prong.d.ts +16 -5
  154. package/node/debug/functions/two-prong.js +56 -58
  155. package/node/debug/functions/two-prong.js.map +1 -1
  156. package/node/debug/three-prong-for-debugging.d.ts +6 -6
  157. package/node/debug/three-prong-for-debugging.js +1 -1
  158. package/node/debug/three-prong-for-debugging.js.map +1 -1
  159. package/node/debug/two-prong-for-debugging.d.ts +7 -7
  160. package/node/error-analysis/gamma.d.ts +26 -0
  161. package/node/error-analysis/gamma.js +35 -0
  162. package/node/error-analysis/gamma.js.map +1 -0
  163. package/node/find-2-prong/add-1-prong.d.ts +12 -0
  164. package/node/{mat/find-mat → find-2-prong}/add-1-prong.js +11 -11
  165. package/node/find-2-prong/add-1-prong.js.map +1 -0
  166. package/node/{mat/find-mat → find-2-prong}/add-2-prong.d.ts +6 -9
  167. package/node/{mat/find-mat → find-2-prong}/add-2-prong.js +26 -74
  168. package/node/find-2-prong/add-2-prong.js.map +1 -0
  169. package/node/find-2-prong/add-debug-info.d.ts +8 -0
  170. package/node/{mat/find-mat/find-2-prong → find-2-prong}/add-debug-info.js +5 -4
  171. package/node/find-2-prong/add-debug-info.js.map +1 -0
  172. package/node/find-2-prong/cull-bezier-pieces.d.ts +11 -0
  173. package/node/find-2-prong/cull-bezier-pieces.js +28 -0
  174. package/node/find-2-prong/cull-bezier-pieces.js.map +1 -0
  175. package/node/{mat/find-mat/find-2-prong → find-2-prong}/find-2-prong.d.ts +9 -13
  176. package/node/find-2-prong/find-2-prong.js +144 -0
  177. package/node/find-2-prong/find-2-prong.js.map +1 -0
  178. package/node/find-2-prong/find-and-add-2-prongs-on-all-paths.d.ts +15 -0
  179. package/node/{mat/find-mat → find-2-prong}/find-and-add-2-prongs-on-all-paths.js +5 -4
  180. package/node/find-2-prong/find-and-add-2-prongs-on-all-paths.js.map +1 -0
  181. package/node/{mat/find-mat → find-2-prong}/find-and-add-2-prongs.d.ts +5 -5
  182. package/node/find-2-prong/find-and-add-2-prongs.js +60 -0
  183. package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -0
  184. package/node/{mat/find-mat → find-2-prong}/find-and-add-hole-closing-2-prongs.d.ts +3 -3
  185. package/node/{mat/find-mat → find-2-prong}/find-and-add-hole-closing-2-prongs.js +5 -5
  186. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js.map +1 -0
  187. package/node/find-2-prong/find-equidistant-point-on-line-dd.d.ts +10 -0
  188. package/node/find-2-prong/find-equidistant-point-on-line-dd.js +56 -0
  189. package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +1 -0
  190. package/node/find-2-prong/get-initial-bezier-pieces.d.ts +15 -0
  191. package/node/find-2-prong/get-initial-bezier-pieces.js +40 -0
  192. package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -0
  193. package/node/find-2-prong/reduce-radius.d.ts +8 -0
  194. package/node/find-2-prong/reduce-radius.js +72 -0
  195. package/node/find-2-prong/reduce-radius.js.map +1 -0
  196. package/node/find-2-prong/squared-distance-between-dd.d.ts +2 -0
  197. package/node/find-2-prong/squared-distance-between-dd.js +17 -0
  198. package/node/find-2-prong/squared-distance-between-dd.js.map +1 -0
  199. package/node/find-2-prong/x-for-debugging.d.ts +9 -0
  200. package/node/find-2-prong/x-for-debugging.js.map +1 -0
  201. package/node/{mat/find-mat → find-3-prong.ts}/add-3-prong.d.ts +12 -7
  202. package/node/find-3-prong.ts/add-3-prong.js +82 -0
  203. package/node/find-3-prong.ts/add-3-prong.js.map +1 -0
  204. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-better-x.d.ts +4 -4
  205. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-better-x.js +1 -1
  206. package/node/find-3-prong.ts/calc-better-x.js.map +1 -0
  207. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-initial-3-prong-center.d.ts +3 -3
  208. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-initial-3-prong-center.js +5 -7
  209. package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +1 -0
  210. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong-for-delta3s.d.ts +6 -6
  211. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong-for-delta3s.js +11 -12
  212. package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +1 -0
  213. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong.d.ts +5 -5
  214. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong.js +52 -39
  215. package/node/find-3-prong.ts/find-3-prong.js.map +1 -0
  216. package/node/find-3-prong.ts/find-and-add-3-prongs.d.ts +5 -0
  217. package/node/find-3-prong.ts/find-and-add-3-prongs.js +74 -0
  218. package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +1 -0
  219. package/node/{mat/find-mat/find-and-add-3-prongs.d.ts → find-3-prong.ts/find-and-add-all-3-prongs.d.ts} +3 -3
  220. package/node/find-3-prong.ts/find-and-add-all-3-prongs.js +66 -0
  221. package/node/find-3-prong.ts/find-and-add-all-3-prongs.js.map +1 -0
  222. package/node/{mat/find-mat/find-3-prong → find-3-prong.ts}/get-closest-points.d.ts +3 -3
  223. package/node/find-3-prong.ts/get-closest-points.js +14 -0
  224. package/node/find-3-prong.ts/get-closest-points.js.map +1 -0
  225. package/node/{mat/find-mat → find-mat}/add-debug-info.d.ts +4 -4
  226. package/node/{mat/find-mat → find-mat}/add-debug-info.js +6 -6
  227. package/node/find-mat/add-debug-info.js.map +1 -0
  228. package/node/{mat/find-mat → find-mat}/create-initial-cp-graph.d.ts +5 -5
  229. package/node/{mat/find-mat → find-mat}/create-initial-cp-graph.js +5 -6
  230. package/node/find-mat/create-initial-cp-graph.js.map +1 -0
  231. package/node/find-mat/find-mat.d.ts +10 -0
  232. package/node/find-mat/find-mat.js +57 -0
  233. package/node/find-mat/find-mat.js.map +1 -0
  234. package/node/{find-mats.d.ts → find-mat/find-mats.d.ts} +1 -1
  235. package/node/find-mat/find-mats.js +58 -0
  236. package/node/find-mat/find-mats.js.map +1 -0
  237. package/node/find-mat/fix-ordering.d.ts +8 -0
  238. package/node/find-mat/fix-ordering.js +59 -0
  239. package/node/find-mat/fix-ordering.js.map +1 -0
  240. package/node/find-mat/get-dull-corners.d.ts +5 -0
  241. package/node/find-mat/get-dull-corners.js +22 -0
  242. package/node/find-mat/get-dull-corners.js.map +1 -0
  243. package/node/find-mat/get-for-1-prongs-on-loop.d.ts +11 -0
  244. package/node/find-mat/get-for-1-prongs-on-loop.js +28 -0
  245. package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -0
  246. package/node/find-mat/get-for-2-prongs-on-loop.d.ts +11 -0
  247. package/node/find-mat/get-for-2-prongs-on-loop.js +30 -0
  248. package/node/find-mat/get-for-2-prongs-on-loop.js.map +1 -0
  249. package/node/find-mat/get-sharp-corners.d.ts +5 -0
  250. package/node/find-mat/get-sharp-corners.js +21 -0
  251. package/node/find-mat/get-sharp-corners.js.map +1 -0
  252. package/node/find-mat/get-size-params.d.ts +7 -0
  253. package/node/find-mat/get-size-params.js +33 -0
  254. package/node/find-mat/get-size-params.js.map +1 -0
  255. package/node/geometry/circle.js.map +1 -0
  256. package/node/geometry/get-bounding-box-.js.map +1 -0
  257. package/node/{mat/geometry → geometry}/get-closest-square-distance-to-rect.d.ts +1 -1
  258. package/node/{mat/geometry → geometry}/get-closest-square-distance-to-rect.js +1 -1
  259. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -0
  260. package/node/{mat/geometry → geometry}/get-closest-squared-distance-to-rotated-rect.d.ts +1 -1
  261. package/node/{mat/geometry → geometry}/get-closest-squared-distance-to-rotated-rect.js +1 -1
  262. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -0
  263. package/node/get-curve/get-curve-between.d.ts +1 -1
  264. package/node/get-curve/get-curve-between.js +2 -2
  265. package/node/get-curve/get-curve-between.js.map +1 -1
  266. package/node/get-curve/get-edge-direction.d.ts +2 -2
  267. package/node/get-curve/get-edge-direction.js +2 -4
  268. package/node/get-curve/get-edge-direction.js.map +1 -1
  269. package/node/index.d.ts +24 -20
  270. package/node/index.js +21 -16
  271. package/node/index.js.map +1 -1
  272. package/node/loop/get-max-coordinate.d.ts +1 -1
  273. package/node/loop/get-max-coordinate.js +1 -1
  274. package/node/mat/add-to-cp-graph.d.ts +8 -7
  275. package/node/mat/add-to-cp-graph.js +6 -4
  276. package/node/mat/add-to-cp-graph.js.map +1 -1
  277. package/node/mat/bezier-piece.d.ts +2 -2
  278. package/node/mat/create-new-cp-tree.d.ts +3 -3
  279. package/node/mat/create-new-cp-tree.js +5 -7
  280. package/node/mat/create-new-cp-tree.js.map +1 -1
  281. package/node/mat/elem-type-two-prong.d.ts +1 -1
  282. package/node/mat/get-boundary-piece-beziers.d.ts +2 -2
  283. package/node/mat/get-boundary-piece-beziers.js +4 -4
  284. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  285. package/node/{get-branches.d.ts → mat/get-branches.d.ts} +1 -1
  286. package/node/{get-branches.js → mat/get-branches.js} +7 -6
  287. package/node/mat/get-branches.js.map +1 -0
  288. package/node/mat/get-largest-vertex.d.ts +2 -2
  289. package/node/mat/get-largest-vertex.js +1 -1
  290. package/node/mat/get-largest-vertex.js.map +1 -1
  291. package/node/mat/get-neighboring-cps.d.ts +6 -4
  292. package/node/mat/get-neighboring-cps.js +5 -3
  293. package/node/mat/get-neighboring-cps.js.map +1 -1
  294. package/node/mat/get-two-prong-type.d.ts +1 -1
  295. package/node/mat/get-two-prong-type.js +1 -1
  296. package/node/mat/get-two-prong-type.js.map +1 -1
  297. package/node/mat/is-another-cp-closeby.d.ts +9 -8
  298. package/node/mat/is-another-cp-closeby.js +21 -29
  299. package/node/mat/is-another-cp-closeby.js.map +1 -1
  300. package/node/{mat.d.ts → mat/mat.d.ts} +2 -2
  301. package/node/mat/mat.js.map +1 -0
  302. package/node/mat/simplify-mat-map-only.d.ts +1 -1
  303. package/node/mat/simplify-mat-map-only.js +4 -3
  304. package/node/mat/simplify-mat-map-only.js.map +1 -1
  305. package/node/{simplify-mat.d.ts → mat/simplify-mat.d.ts} +3 -5
  306. package/node/{simplify-mat.js → mat/simplify-mat.js} +11 -13
  307. package/node/mat/simplify-mat.js.map +1 -0
  308. package/node/mat/trim-mat.d.ts +1 -1
  309. package/node/mat/trim-mat.js +1 -1
  310. package/node/mat/trim-mat.js.map +1 -1
  311. package/node/point-on-shape/calc-pos-order.d.ts +13 -0
  312. package/node/point-on-shape/calc-pos-order.js +27 -0
  313. package/node/point-on-shape/calc-pos-order.js.map +1 -0
  314. package/node/point-on-shape/compare-poss.d.ts +10 -0
  315. package/node/point-on-shape/compare-poss.js +18 -0
  316. package/node/point-on-shape/compare-poss.js.map +1 -0
  317. package/node/point-on-shape/create-pos.d.ts +4 -0
  318. package/node/point-on-shape/create-pos.js +12 -0
  319. package/node/point-on-shape/create-pos.js.map +1 -0
  320. package/node/point-on-shape/get-osculating-circle.d.ts +10 -0
  321. package/node/point-on-shape/get-osculating-circle.js +25 -0
  322. package/node/point-on-shape/get-osculating-circle.js.map +1 -0
  323. package/node/point-on-shape/get-pos-corner.d.ts +7 -0
  324. package/node/point-on-shape/get-pos-corner.js +9 -0
  325. package/node/point-on-shape/get-pos-corner.js.map +1 -0
  326. package/node/point-on-shape/is-pos-corner.d.ts +6 -0
  327. package/node/point-on-shape/is-pos-corner.js +8 -0
  328. package/node/point-on-shape/is-pos-corner.js.map +1 -0
  329. package/node/point-on-shape/is-pos-dull-corner.d.ts +6 -0
  330. package/node/point-on-shape/is-pos-dull-corner.js +14 -0
  331. package/node/point-on-shape/is-pos-dull-corner.js.map +1 -0
  332. package/node/point-on-shape/is-pos-quite-sharp-corner.d.ts +6 -0
  333. package/node/point-on-shape/is-pos-quite-sharp-corner.js +14 -0
  334. package/node/point-on-shape/is-pos-quite-sharp-corner.js.map +1 -0
  335. package/node/point-on-shape/is-pos-sharp-corner.d.ts +6 -0
  336. package/node/point-on-shape/is-pos-sharp-corner.js +14 -0
  337. package/node/point-on-shape/is-pos-sharp-corner.js.map +1 -0
  338. package/node/point-on-shape/point-on-shape.d.ts +11 -0
  339. package/node/point-on-shape/point-on-shape.js +2 -0
  340. package/node/point-on-shape/point-on-shape.js.map +1 -0
  341. package/node/point-on-shape/pos-to-human-string.d.ts +8 -0
  342. package/node/point-on-shape/pos-to-human-string.js +12 -0
  343. package/node/point-on-shape/pos-to-human-string.js.map +1 -0
  344. package/node/{mat/to-scale-axis → sat}/add-debug-info.d.ts +2 -2
  345. package/node/{mat/to-scale-axis → sat}/add-debug-info.js +1 -1
  346. package/node/sat/add-debug-info.js.map +1 -0
  347. package/node/{mat/to-scale-axis → sat}/cull-non-cycles.d.ts +3 -3
  348. package/node/{mat/to-scale-axis → sat}/cull-non-cycles.js +6 -6
  349. package/node/sat/cull-non-cycles.js.map +1 -0
  350. package/node/{mat/to-scale-axis → sat}/cull.d.ts +3 -3
  351. package/node/{mat/to-scale-axis → sat}/cull.js +4 -4
  352. package/node/sat/cull.js.map +1 -0
  353. package/node/{mat → sat}/get-leaves.d.ts +2 -2
  354. package/node/sat/get-leaves.js +14 -0
  355. package/node/sat/get-leaves.js.map +1 -0
  356. package/node/{to-scale-axis.d.ts → sat/to-scale-axis.d.ts} +2 -2
  357. package/node/{to-scale-axis.js → sat/to-scale-axis.js} +11 -10
  358. package/node/sat/to-scale-axis.js.map +1 -0
  359. package/node/svg/get-loop-bounds.d.ts +7 -7
  360. package/node/svg/get-loop-bounds.js +11 -7
  361. package/node/svg/get-loop-bounds.js.map +1 -1
  362. package/node/svg/get-min-y-pos.d.ts +4 -4
  363. package/node/svg/get-min-y-pos.js +1 -1
  364. package/node/svg/get-shape-bounds.d.ts +6 -5
  365. package/node/svg/get-shape-bounds.js +6 -2
  366. package/node/svg/get-shape-bounds.js.map +1 -1
  367. package/node/sweep-line/sweep-line.d.ts +1 -1
  368. package/node/sweep-line/sweep-line.js +4 -4
  369. package/node/sweep-line/sweep-line.js.map +1 -1
  370. package/package.json +10 -10
  371. package/src/closest-boundary-point/closest-points-on-curve-precise.ts +75 -0
  372. package/src/closest-boundary-point/closest-points-on-curve.ts +72 -0
  373. package/src/closest-boundary-point/cull-bezier-pieces.ts +35 -0
  374. package/src/{mat/closest-boundary-point → closest-boundary-point}/cull-by-loose-bounding-box.ts +4 -3
  375. package/src/{mat/closest-boundary-point → closest-boundary-point}/cull-by-tight-boundary-box.ts +2 -2
  376. package/src/closest-boundary-point/dd-deflate-with-running-error.ts +88 -0
  377. package/src/closest-boundary-point/foot-and-endpoint-info.ts +16 -0
  378. package/src/{mat/closest-boundary-point → closest-boundary-point}/get-best-distance-squared.ts +3 -4
  379. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +69 -0
  380. package/src/closest-boundary-point/get-closest-boundary-point-certified.ts +70 -0
  381. package/src/closest-boundary-point/get-p-from-box.ts +14 -0
  382. package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +122 -0
  383. package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +75 -0
  384. package/src/{contact-point.ts → contact-point/contact-point.ts} +4 -6
  385. package/src/{compare-curvatures-at-interface.ts → corner/compare-curvatures-at-interface.ts} +2 -2
  386. package/src/{mat → corner}/corner.ts +1 -1
  387. package/src/{curve.ts → corner/get-corner.ts} +10 -49
  388. package/src/{get-interface-ccw.ts → corner/get-interface-ccw.ts} +28 -35
  389. package/src/cp-node/clone.ts +17 -6
  390. package/src/cp-node/cp-node.ts +422 -0
  391. package/src/cp-node/create-cp-node.ts +21 -0
  392. package/src/cp-node/enhance-cp-node.ts +27 -0
  393. package/src/{get-boundary-bezier-parts-to-next.ts → cp-node/get-boundary-bezier-parts-to-next.ts} +3 -3
  394. package/src/{get-boundary-beziers-to-next.ts → cp-node/get-boundary-beziers-to-next.ts} +2 -2
  395. package/src/cp-node/get-cp-node-ordering.ts +17 -0
  396. package/src/{get-curve-to-next.ts → cp-node/get-curve-to-next.ts} +1 -1
  397. package/src/cp-node/remove.ts +1 -1
  398. package/src/cp-node/traverse-cp.ts +35 -0
  399. package/src/{traverse-edges.ts → cp-node/traverse-edges.ts} +5 -5
  400. package/src/{traverse-vertices.ts → cp-node/traverse-vertices.ts} +5 -5
  401. package/src/curve/curve.ts +46 -0
  402. package/src/debug/cp-node-for-debugging.ts +2 -2
  403. package/src/debug/debug-elem-types.ts +8 -8
  404. package/src/debug/debug.ts +11 -11
  405. package/src/debug/functions/draw-elem/bounding-hull.ts +5 -3
  406. package/src/debug/functions/draw-elem/branch.ts +4 -4
  407. package/src/debug/functions/draw-elem/culls.ts +3 -3
  408. package/src/debug/functions/draw-elem/draw-circle-percent.ts +1 -1
  409. package/src/debug/functions/draw-elem/draw-elem.ts +10 -6
  410. package/src/debug/functions/draw-elem/dull-corner.ts +10 -6
  411. package/src/debug/functions/draw-elem/leaves.ts +2 -2
  412. package/src/debug/functions/draw-elem/loop.ts +4 -3
  413. package/src/debug/functions/draw-elem/loops.ts +1 -2
  414. package/src/debug/functions/draw-elem/loose-bounding-box.ts +8 -3
  415. package/src/debug/functions/draw-elem/mat.ts +16 -8
  416. package/src/debug/functions/draw-elem/max-vertex.ts +2 -2
  417. package/src/debug/functions/draw-elem/min-y.ts +4 -9
  418. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +10 -2
  419. package/src/debug/functions/draw-elem/one-prong.ts +12 -15
  420. package/src/debug/functions/draw-elem/sharp-corner.ts +10 -6
  421. package/src/debug/functions/draw-elem/three-prong.ts +13 -11
  422. package/src/debug/functions/draw-elem/tight-bounding-box.ts +9 -3
  423. package/src/debug/functions/draw-elem/two-prong.ts +12 -8
  424. package/src/debug/functions/draw-elem/vertex.ts +12 -11
  425. package/src/debug/functions/general.ts +10 -10
  426. package/src/debug/functions/three-prong.ts +16 -20
  427. package/src/debug/functions/two-prong.ts +89 -77
  428. package/src/debug/three-prong-for-debugging.ts +17 -16
  429. package/src/debug/two-prong-for-debugging.ts +7 -7
  430. package/src/error-analysis/gamma.ts +41 -0
  431. package/src/{mat/find-mat → find-2-prong}/add-1-prong.ts +19 -16
  432. package/src/{mat/find-mat → find-2-prong}/add-2-prong.ts +45 -91
  433. package/src/find-2-prong/add-debug-info.ts +49 -0
  434. package/src/{mat/find-mat/find-2-prong → find-2-prong}/cull-bezier-pieces.ts +9 -11
  435. package/src/find-2-prong/find-2-prong.ts +191 -0
  436. package/src/{mat/find-mat → find-2-prong}/find-and-add-2-prongs-on-all-paths.ts +12 -9
  437. package/src/find-2-prong/find-and-add-2-prongs.ts +88 -0
  438. package/src/{mat/find-mat → find-2-prong}/find-and-add-hole-closing-2-prongs.ts +7 -7
  439. package/src/find-2-prong/find-equidistant-point-on-line-dd.ts +77 -0
  440. package/src/{mat/find-mat/find-2-prong → find-2-prong}/find-equidistant-point-on-line.ts +1 -1
  441. package/src/find-2-prong/get-initial-bezier-pieces.ts +61 -0
  442. package/src/find-2-prong/pyth-trips.ts +146 -0
  443. package/src/find-2-prong/reduce-radius.ts +98 -0
  444. package/src/find-2-prong/squared-distance-between-dd.ts +25 -0
  445. package/src/find-2-prong/x-for-debugging.ts +13 -0
  446. package/src/find-3-prong.ts/add-3-prong.ts +110 -0
  447. package/src/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-better-x.ts +5 -5
  448. package/src/{mat/find-mat/find-3-prong → find-3-prong.ts}/calc-initial-3-prong-center.ts +11 -12
  449. package/src/{mat/find-mat/find-3-prong → find-3-prong.ts}/find-3-prong-for-delta3s.ts +28 -28
  450. package/src/find-3-prong.ts/find-3-prong.ts +148 -0
  451. package/src/find-3-prong.ts/find-and-add-3-prongs.ts +111 -0
  452. package/src/find-3-prong.ts/find-and-add-all-3-prongs.ts +109 -0
  453. package/src/find-3-prong.ts/get-closest-points.ts +24 -0
  454. package/src/{mat/find-mat → find-mat}/add-debug-info.ts +10 -10
  455. package/src/{mat/find-mat → find-mat}/create-initial-cp-graph.ts +11 -12
  456. package/src/find-mat/find-mat.ts +89 -0
  457. package/src/find-mat/find-mats.ts +83 -0
  458. package/src/find-mat/fix-ordering.ts +69 -0
  459. package/src/find-mat/get-dull-corners.ts +34 -0
  460. package/src/find-mat/get-for-1-prongs-on-loop.ts +40 -0
  461. package/src/find-mat/get-for-2-prongs-on-loop.ts +44 -0
  462. package/src/find-mat/get-sharp-corners.ts +33 -0
  463. package/src/find-mat/get-size-params.ts +34 -0
  464. package/src/{mat/find-mat → find-mat}/get-total-by.ts +4 -4
  465. package/src/{mat/geometry → geometry}/get-closest-square-distance-to-rect.ts +1 -1
  466. package/src/{mat/geometry → geometry}/get-closest-squared-distance-to-rotated-rect.ts +2 -2
  467. package/src/get-curve/get-curve-between.ts +7 -7
  468. package/src/get-curve/get-edge-direction.ts +11 -11
  469. package/src/index.ts +64 -21
  470. package/src/loop/get-max-coordinate.ts +1 -1
  471. package/src/mat/add-to-cp-graph.ts +15 -12
  472. package/src/mat/bezier-piece.ts +2 -2
  473. package/src/mat/cmp-cp-on-delta.ts +6 -3
  474. package/src/mat/create-new-cp-tree.ts +6 -9
  475. package/src/mat/elem-type-two-prong.ts +1 -1
  476. package/src/mat/get-boundary-piece-beziers.ts +7 -7
  477. package/src/{get-branches.ts → mat/get-branches.ts} +8 -8
  478. package/src/mat/get-edges-as-array.ts +2 -2
  479. package/src/mat/get-largest-three-prong.ts +3 -3
  480. package/src/mat/get-largest-vertex.ts +2 -2
  481. package/src/mat/get-neighboring-cps.ts +9 -6
  482. package/src/mat/get-two-prong-type.ts +1 -1
  483. package/src/mat/is-another-cp-closeby.ts +29 -44
  484. package/src/{mat.ts → mat/mat.ts} +2 -2
  485. package/src/mat/simplify-mat-map-only.ts +5 -5
  486. package/src/{simplify-mat.ts → mat/simplify-mat.ts} +12 -14
  487. package/src/mat/trim-mat.ts +3 -3
  488. package/src/point-on-shape/calc-pos-order.ts +35 -0
  489. package/src/point-on-shape/compare-poss.ts +26 -0
  490. package/src/point-on-shape/create-pos.ts +21 -0
  491. package/src/point-on-shape/get-osculating-circle.ts +39 -0
  492. package/src/point-on-shape/get-pos-corner.ts +16 -0
  493. package/src/point-on-shape/is-pos-corner.ts +12 -0
  494. package/src/point-on-shape/is-pos-dull-corner.ts +16 -0
  495. package/src/point-on-shape/is-pos-quite-dull-corner.ts +17 -0
  496. package/src/point-on-shape/is-pos-quite-sharp-corner.ts +17 -0
  497. package/src/point-on-shape/is-pos-sharp-corner.ts +17 -0
  498. package/src/point-on-shape/point-on-shape.ts +15 -0
  499. package/src/point-on-shape/pos-to-human-string.ts +16 -0
  500. package/src/{mat/to-scale-axis → sat}/add-debug-info.ts +3 -3
  501. package/src/{mat/to-scale-axis → sat}/cull-non-cycles.ts +7 -7
  502. package/src/{mat/to-scale-axis → sat}/cull.ts +6 -6
  503. package/src/{mat → sat}/get-leaves.ts +4 -4
  504. package/src/{mat/to-scale-axis → sat}/t-tree.ts +2 -2
  505. package/src/{to-scale-axis.ts → sat/to-scale-axis.ts} +16 -16
  506. package/src/{mat/to-scale-axis → sat}/traverse-spacial-tree.ts +5 -5
  507. package/src/svg/get-loop-bounds.ts +22 -17
  508. package/src/svg/get-min-y-pos.ts +3 -3
  509. package/src/svg/get-shape-bounds.ts +12 -9
  510. package/src/sweep-line/are-boxes-intersecting.ts +1 -1
  511. package/src/sweep-line/sweep-line.ts +7 -7
  512. package/tsconfig.json +3 -7
  513. package/wallaby.mjs +32 -0
  514. package/node/circle.js.map +0 -1
  515. package/node/compare-curvatures-at-interface.js.map +0 -1
  516. package/node/contact-point.js.map +0 -1
  517. package/node/cp-node.d.ts +0 -202
  518. package/node/cp-node.js +0 -321
  519. package/node/cp-node.js.map +0 -1
  520. package/node/curve.js.map +0 -1
  521. package/node/find-mats.js +0 -123
  522. package/node/find-mats.js.map +0 -1
  523. package/node/get-boundary-bezier-parts-to-next.js.map +0 -1
  524. package/node/get-boundary-beziers-to-next.js.map +0 -1
  525. package/node/get-bounding-box-.js.map +0 -1
  526. package/node/get-branches.js.map +0 -1
  527. package/node/get-curve-to-next.js.map +0 -1
  528. package/node/get-interface-ccw.js.map +0 -1
  529. package/node/loop.d.ts +0 -16
  530. package/node/loop.js +0 -35
  531. package/node/loop.js.map +0 -1
  532. package/node/mat/closest-boundary-point/closest-points-on-curve.d.ts +0 -14
  533. package/node/mat/closest-boundary-point/closest-points-on-curve.js +0 -73
  534. package/node/mat/closest-boundary-point/closest-points-on-curve.js.map +0 -1
  535. package/node/mat/closest-boundary-point/cull-bezier-pieces.d.ts +0 -9
  536. package/node/mat/closest-boundary-point/cull-bezier-pieces.js +0 -20
  537. package/node/mat/closest-boundary-point/cull-bezier-pieces.js.map +0 -1
  538. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js.map +0 -1
  539. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js.map +0 -1
  540. package/node/mat/closest-boundary-point/get-best-distance-squared.js.map +0 -1
  541. package/node/mat/closest-boundary-point/get-close-boundary-points.d.ts +0 -17
  542. package/node/mat/closest-boundary-point/get-close-boundary-points.js +0 -81
  543. package/node/mat/closest-boundary-point/get-close-boundary-points.js.map +0 -1
  544. package/node/mat/closest-boundary-point/get-closest-boundary-point.d.ts +0 -18
  545. package/node/mat/closest-boundary-point/get-closest-boundary-point.js +0 -41
  546. package/node/mat/closest-boundary-point/get-closest-boundary-point.js.map +0 -1
  547. package/node/mat/find-mat/add-1-prong.d.ts +0 -12
  548. package/node/mat/find-mat/add-1-prong.js.map +0 -1
  549. package/node/mat/find-mat/add-2-prong.js.map +0 -1
  550. package/node/mat/find-mat/add-3-prong.js +0 -55
  551. package/node/mat/find-mat/add-3-prong.js.map +0 -1
  552. package/node/mat/find-mat/add-debug-info.js.map +0 -1
  553. package/node/mat/find-mat/create-get-interesting-points-on-loop.d.ts +0 -11
  554. package/node/mat/find-mat/create-get-interesting-points-on-loop.js +0 -52
  555. package/node/mat/find-mat/create-get-interesting-points-on-loop.js.map +0 -1
  556. package/node/mat/find-mat/create-initial-cp-graph.js.map +0 -1
  557. package/node/mat/find-mat/find-2-prong/add-debug-info.d.ts +0 -8
  558. package/node/mat/find-mat/find-2-prong/add-debug-info.js.map +0 -1
  559. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.d.ts +0 -11
  560. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js +0 -30
  561. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js.map +0 -1
  562. package/node/mat/find-mat/find-2-prong/find-2-prong.js +0 -233
  563. package/node/mat/find-mat/find-2-prong/find-2-prong.js.map +0 -1
  564. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.d.ts +0 -9
  565. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js +0 -40
  566. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js.map +0 -1
  567. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.d.ts +0 -11
  568. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js +0 -38
  569. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js.map +0 -1
  570. package/node/mat/find-mat/find-2-prong/x-for-debugging.d.ts +0 -9
  571. package/node/mat/find-mat/find-2-prong/x-for-debugging.js.map +0 -1
  572. package/node/mat/find-mat/find-3-prong/calc-better-x.js.map +0 -1
  573. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js.map +0 -1
  574. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js.map +0 -1
  575. package/node/mat/find-mat/find-3-prong/find-3-prong.js.map +0 -1
  576. package/node/mat/find-mat/find-3-prong/get-closest-points.js +0 -17
  577. package/node/mat/find-mat/find-3-prong/get-closest-points.js.map +0 -1
  578. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.d.ts +0 -15
  579. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js.map +0 -1
  580. package/node/mat/find-mat/find-and-add-2-prongs.js +0 -74
  581. package/node/mat/find-mat/find-and-add-2-prongs.js.map +0 -1
  582. package/node/mat/find-mat/find-and-add-3-prongs.js +0 -147
  583. package/node/mat/find-mat/find-and-add-3-prongs.js.map +0 -1
  584. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js.map +0 -1
  585. package/node/mat/find-mat/get-potential-2-prongs.d.ts +0 -4
  586. package/node/mat/find-mat/get-potential-2-prongs.js +0 -17
  587. package/node/mat/find-mat/get-potential-2-prongs.js.map +0 -1
  588. package/node/mat/find-mat/get-sharp-corners.d.ts +0 -4
  589. package/node/mat/find-mat/get-sharp-corners.js +0 -18
  590. package/node/mat/find-mat/get-sharp-corners.js.map +0 -1
  591. package/node/mat/geometry/get-closest-square-distance-to-rect.js.map +0 -1
  592. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js.map +0 -1
  593. package/node/mat/get-contact-circles-at-interface.d.ts +0 -8
  594. package/node/mat/get-contact-circles-at-interface.js +0 -21
  595. package/node/mat/get-contact-circles-at-interface.js.map +0 -1
  596. package/node/mat/get-leaves.js +0 -13
  597. package/node/mat/get-leaves.js.map +0 -1
  598. package/node/mat/to-scale-axis/add-debug-info.js.map +0 -1
  599. package/node/mat/to-scale-axis/cull-non-cycles.js.map +0 -1
  600. package/node/mat/to-scale-axis/cull.js.map +0 -1
  601. package/node/mat.js.map +0 -1
  602. package/node/point-on-shape.d.ts +0 -73
  603. package/node/point-on-shape.js +0 -168
  604. package/node/point-on-shape.js.map +0 -1
  605. package/node/simplify-mat.js.map +0 -1
  606. package/node/to-scale-axis.js.map +0 -1
  607. package/node/traverse-edges.js.map +0 -1
  608. package/node/traverse-vertices.js.map +0 -1
  609. package/src/cp-node.ts +0 -388
  610. package/src/find-mats.ts +0 -171
  611. package/src/loop.ts +0 -56
  612. package/src/mat/closest-boundary-point/closest-point-on-curve-old.ts_ +0 -88
  613. package/src/mat/closest-boundary-point/closest-point-on-curve.ts_ +0 -95
  614. package/src/mat/closest-boundary-point/closest-points-on-curve.ts +0 -84
  615. package/src/mat/closest-boundary-point/cull-bezier-pieces.ts +0 -38
  616. package/src/mat/closest-boundary-point/get-close-boundary-points.ts +0 -107
  617. package/src/mat/closest-boundary-point/get-closest-boundary-point.ts +0 -64
  618. package/src/mat/find-mat/add-3-prong.ts +0 -75
  619. package/src/mat/find-mat/create-get-interesting-points-on-loop.ts +0 -73
  620. package/src/mat/find-mat/find-2-prong/add-debug-info.ts +0 -46
  621. package/src/mat/find-mat/find-2-prong/find-2-prong.ts +0 -316
  622. package/src/mat/find-mat/find-2-prong/get-initial-bezier-pieces.ts +0 -52
  623. package/src/mat/find-mat/find-2-prong/x-for-debugging.ts +0 -13
  624. package/src/mat/find-mat/find-3-prong/find-3-prong.ts +0 -106
  625. package/src/mat/find-mat/find-3-prong/get-closest-points.ts +0 -28
  626. package/src/mat/find-mat/find-and-add-2-prongs.ts +0 -108
  627. package/src/mat/find-mat/find-and-add-3-prongs.ts +0 -218
  628. package/src/mat/find-mat/get-potential-2-prongs.ts +0 -24
  629. package/src/mat/find-mat/get-sharp-corners.ts +0 -25
  630. package/src/mat/find-mat/get-total-abs-curvature.ts +0 -17
  631. package/src/mat/get-contact-circles-at-interface.ts +0 -26
  632. package/src/mat/to-scale-axis/add-to-tree.ts +0 -66
  633. package/src/mat/to-scale-axis/calc-groups.ts +0 -82
  634. package/src/mat/to-scale-axis/create-spacial-tree.ts +0 -41
  635. package/src/mat/to-scale-axis/get-engulfed-vertices.ts +0 -135
  636. package/src/point-on-shape.ts +0 -231
  637. package/src/svg/get-curvature-at-interface.ts +0 -55
  638. /package/node/{compare-curvatures-at-interface.d.ts → corner/compare-curvatures-at-interface.d.ts} +0 -0
  639. /package/node/{mat → corner}/corner.js +0 -0
  640. /package/node/{get-interface-ccw.d.ts → corner/get-interface-ccw.d.ts} +0 -0
  641. /package/node/{get-boundary-bezier-parts-to-next.d.ts → cp-node/get-boundary-bezier-parts-to-next.d.ts} +0 -0
  642. /package/node/{get-curve-to-next.d.ts → cp-node/get-curve-to-next.d.ts} +0 -0
  643. /package/node/{traverse-edges.d.ts → cp-node/traverse-edges.d.ts} +0 -0
  644. /package/node/{traverse-vertices.d.ts → cp-node/traverse-vertices.d.ts} +0 -0
  645. /package/node/{mat/find-mat/find-2-prong → find-2-prong}/x-for-debugging.js +0 -0
  646. /package/node/{circle.d.ts → geometry/circle.d.ts} +0 -0
  647. /package/node/{circle.js → geometry/circle.js} +0 -0
  648. /package/node/{get-bounding-box-.d.ts → geometry/get-bounding-box-.d.ts} +0 -0
  649. /package/node/{get-bounding-box-.js → geometry/get-bounding-box-.js} +0 -0
  650. /package/node/{mat.js → mat/mat.js} +0 -0
  651. /package/src/{circle.ts → geometry/circle.ts} +0 -0
  652. /package/src/{get-bounding-box-.ts → geometry/get-bounding-box-.ts} +0 -0
@@ -1,316 +0,0 @@
1
- /** @internal */
2
- declare const _debug_: Debug;
3
-
4
- import { LlRbTree } from 'flo-ll-rb-tree';
5
- import { lineLineIntersection, distanceBetween, squaredDistanceBetween, interpolate, dot } from 'flo-vector2d';
6
- import { evalDeCasteljau as evalDeCasteljau_ } from 'flo-bezier3';
7
- import { Debug } from '../../../debug/debug.js';
8
- import { getClosestBoundaryPoint } from
9
- '../../closest-boundary-point/get-closest-boundary-point.js';
10
- import { CpNode } from '../../../cp-node.js';
11
- import { Loop } from '../../../loop.js';
12
- import { Circle } from '../../../circle.js';
13
- import { getOsculatingCircle, IPointOnShape } from '../../../point-on-shape.js';
14
- import { BezierPiece } from '../../bezier-piece.js';
15
- import { add1Prong } from '../add-1-prong.js';
16
- import { addDebugInfo } from './add-debug-info.js';
17
- import { TXForDebugging } from './x-for-debugging.js';
18
- import { cullBezierPieces } from './cull-bezier-pieces.js';
19
- import { findEquidistantPointOnLine } from './find-equidistant-point-on-line.js';
20
- import { getInitialBezierPieces } from './get-initial-bezier-pieces.js';
21
- import { getCloseBoundaryPoints } from '../../closest-boundary-point/get-close-boundary-points.js';
22
-
23
-
24
- const evalDeCasteljau = evalDeCasteljau_;
25
-
26
-
27
- /**
28
- * @hidden
29
- * Adds a 2-prong to the MAT. The first point on the shape boundary is given and
30
- * the second one is found by the algorithm.
31
- *
32
- * A 2-prong is defined as a MAT circle that touches the shape at exactly 2
33
- * points.
34
- *
35
- * Before any 2-prongs are added the entire shape is our δΩ (1-prongs do not
36
- * reduce the boundary).
37
- *
38
- * As per the paper by Choi, Choi, Moon and Wee:
39
- * "The starting point of this algorithm is a choice of a circle Br(x)
40
- * centered at an interior point x which contains two boundary portions c and
41
- * d of dΩ as in Fig. 19."
42
- * In fact, we (and they) start by fixing one point on the boundary beforehand.
43
- * @param loops A shape represented by path loops
44
- * @param extreme The extreme coordinate value of the shape
45
- * @param squaredDiagonalLength The squared diagonal length of the shape
46
- * bounding box.
47
- * @param y The source point of the 2-prong to be found
48
- * @param isHoleClosing True if this is a hole-closing two-prong, false otherwise
49
- * @param k The loop array index
50
- */
51
-
52
- function find2Prong(
53
- loops: Loop[],
54
- extreme: number,
55
- squaredDiagonalLength: number,
56
- cpTrees: Map<Loop,LlRbTree<CpNode>>,
57
- y: IPointOnShape,
58
- isHoleClosing: boolean,
59
- k: number) {
60
-
61
- const MAX_ITERATIONS = 25;
62
- const squaredSeperationTolerance = (1e-6 * extreme)**2;
63
- // TODO - base deltas on theory or remove
64
- const oneProngTolerance = (1e-4)**2;
65
- const squaredErrorTolerance = 1e-2 * squaredSeperationTolerance;
66
- const maxOsculatingCircleRadiusSquared = squaredDiagonalLength;
67
-
68
- // The boundary piece that should contain the other point of
69
- // the 2-prong circle. (Defined by start and end points).
70
- const { bezierPieces, δ } = getInitialBezierPieces(
71
- isHoleClosing, k, loops, cpTrees, y
72
- );
73
- //console.log(bezierPieces.length)
74
-
75
- /** The center of the two-prong (successively refined) */
76
- let x: number[];
77
- let p: number[];
78
- let r: number;
79
- if (isHoleClosing) {
80
- p = [y.p[0], y.p[1]];
81
- x = [p[0], p[1] - Math.sqrt(maxOsculatingCircleRadiusSquared)];
82
- r = maxOsculatingCircleRadiusSquared;
83
- } else {
84
- p = y.p;
85
- //x = PointOnShape.getOsculatingCircle(maxOsculatingCircleRadiusSquared, y).center;
86
- x = getOsculatingCircle(maxOsculatingCircleRadiusSquared, y).center;
87
- r = squaredDistanceBetween(p,x);
88
- }
89
-
90
- // The lines below is an optimization.
91
- const r_ = reduceRadius(extreme, bezierPieces, p, x);
92
- if (r > r_) {
93
- x = interpolate(p, x, Math.sqrt(r_/r));
94
- }
95
-
96
-
97
- /** Trace the convergence (for debugging). */
98
- const xs: TXForDebugging[] = [];
99
- /** The antipode of the two-prong (successively refined) */
100
- let z: { pos: IPointOnShape; d: number };
101
- let i = 0;
102
- let done = 0;
103
- let failed = false; // The failed flag is set if a 2-prong cannot be found.
104
- let bezierPieces_ = bezierPieces;
105
- // ---> for (let b of bezierPieces) { d.fs.draw.bezierPiece(document.getElementsByTagName('g')[0], b.curve.ps, b.ts, 'nofill thin10 red', 100); }
106
- do {
107
- i++
108
-
109
- /** squared distance between source boundary point and circle center */
110
- const r = squaredDistanceBetween(x, y.p);
111
-
112
- bezierPieces_ = cullBezierPieces(bezierPieces_, x, r);
113
-
114
- z = getClosestBoundaryPoint(
115
- bezierPieces_,
116
- x,
117
- y.curve,
118
- y.t
119
- );
120
-
121
- if (z === undefined) {
122
- if (typeof _debug_ !== 'undefined') {
123
- const elems = _debug_.generated.elems;
124
- const elem = isHoleClosing
125
- ? elems.twoProng_holeClosing
126
- : elems.twoProng_regular
127
- const elemStr = isHoleClosing
128
- ? 'hole-closing: ' + elem.length
129
- : 'regular: ' + elem.length;
130
- console.log(
131
- 'failed: no closest point - ' + elemStr
132
- );
133
- }
134
- failed = true;
135
- break;
136
- }
137
-
138
- if (typeof _debug_ !== 'undefined') {
139
- xs.push({ x, y, z: z.pos, t: y.t });
140
- }
141
-
142
- /** squared distance between anti-pode boundary point and circle center */
143
- const d = squaredDistanceBetween(x, z.pos.p);
144
- //if (i === 1 && d*oneProngTolerance >= r) {
145
- if (i === 1 && r < d+oneProngTolerance) {
146
- // It is a 1-prong.
147
- add1Prong(Math.sqrt(maxOsculatingCircleRadiusSquared), cpTrees, y);
148
- return undefined;
149
- }
150
-
151
- // TODO - squaredSeperationTolerance should in future be replaced with
152
- // a relative error, i.e. distance between y (or z) / length(y (or z)).
153
- if (!isHoleClosing && squaredDistanceBetween(y.p, z.pos.p) <= squaredSeperationTolerance) {
154
- if (typeof _debug_ !== 'undefined') {
155
- /*
156
- let elems = _debug_.generated.elems;
157
- let elem = isHoleClosing
158
- ? elems.twoProng_holeClosing
159
- : elems.twoProng_regular
160
- let elemStr = isHoleClosing
161
- ? 'hole-closing: ' + elem.length
162
- : 'regular: ' + elem.length;
163
- console.log(
164
- 'failed: two-prong radius too small - ' + elemStr
165
- );
166
- */
167
- }
168
- failed = true;
169
- break;
170
- }
171
-
172
- // TODO - Accuracy optimization: tolerance should not be between x and
173
- // nextX, but rather (distance from x to y) - (distance from x to z)
174
-
175
- // Find the point on the line connecting y with x that is
176
- // equidistant from y and z. This will be our next x.
177
- const nextX = findEquidistantPointOnLine(x, y.p, z.pos.p);
178
-
179
- const squaredError = squaredDistanceBetween(x, nextX);
180
-
181
- x = nextX;
182
-
183
- if (squaredError < squaredErrorTolerance) {
184
- done++; // Do one more iteration
185
- } else if (i === MAX_ITERATIONS) {
186
- // Convergence was too slow.
187
- failed = true;
188
- break; // We're done
189
- }
190
- } while (done < 1);
191
-
192
- // TODO - Optimization: only do this if second closest point is within the
193
- // tolerance which can be checked in getClosestBoundaryPoint algorithm
194
- let zs: { pos: IPointOnShape; d: number; }[] = [];
195
- if (!failed) {
196
- zs = getCloseBoundaryPoints(
197
- bezierPieces_,
198
- x,
199
- y,
200
- distanceBetween(x, z.pos.p)
201
- );
202
-
203
- if (!zs.length) {
204
- // TODO - Numerical issue - fix
205
- zs.push(z);
206
- }
207
- }
208
-
209
- let circle: Circle;
210
- if (z !== undefined) {
211
- circle = { center: x, radius: distanceBetween(x, z.pos.p) };
212
- }
213
-
214
- if (typeof _debug_ !== 'undefined' && !failed) {
215
- xs.push({ x, y, z: z.pos, t: y.t });
216
- addDebugInfo(bezierPieces, failed, y, circle, z.pos, δ, xs, isHoleClosing);
217
- }
218
-
219
- return failed ? undefined : { circle, zs };
220
- }
221
-
222
-
223
- /**
224
- * @hidden
225
- * Reduces the circle radius initially as an optimization step.
226
- */
227
- function reduceRadius(
228
- extreme: number,
229
- bezierPieces: BezierPiece[],
230
- p: number[],
231
- x: number[]) {
232
-
233
- const TOLERANCE = extreme * 1e-3;
234
-
235
- let prevP = undefined;
236
- let minRadius = Number.POSITIVE_INFINITY;
237
- for (let i=0; i<bezierPieces.length; i++) {
238
- const bezierPiece = bezierPieces[i];
239
-
240
- const ps = bezierPiece.curve.ps;
241
-
242
- const p1 = evalDeCasteljau(ps, bezierPiece.ts[0]);
243
- let r1 = Number.POSITIVE_INFINITY;
244
-
245
- // Prevent evaluating the same points twice
246
- if (!prevP || prevP[0] !== p1[0] || prevP[1] !== p1[1]) {
247
- const cc1 = getCircleCenterFrom2PointsAndNormal(extreme, p, x, p1);
248
- if (cc1) { r1 = squaredDistanceBetween(p, cc1); }
249
- }
250
-
251
- let r2 = Number.POSITIVE_INFINITY;
252
- const p2 = evalDeCasteljau(ps, bezierPiece.ts[1]);
253
-
254
- const cc2 = getCircleCenterFrom2PointsAndNormal(extreme, p, x, p2);
255
- if (cc2) { r2 = squaredDistanceBetween(p, cc2); }
256
-
257
- prevP = p2;
258
-
259
- const d = Math.min(r1, r2);
260
-
261
- if (d < minRadius) {
262
- minRadius = d;
263
- }
264
- }
265
-
266
- // The extra bit is to account for floating point precision.
267
- // TODO - base delta on theory
268
- return minRadius + TOLERANCE;
269
- }
270
-
271
-
272
- /**
273
- * @hidden
274
- * @param p A point on the circle with normal pointing to x towards the center
275
- * of the circle.
276
- * @param x
277
- * @param p1 Another point on the circle.
278
- */
279
- function getCircleCenterFrom2PointsAndNormal(
280
- extreme: number,
281
- p: number[],
282
- x: number[],
283
- p1: number[]) {
284
-
285
- // TODO - remove delta
286
- const TOLERANCE = (1e-4 * extreme)**2;
287
-
288
- // Ignore if p and p1 are too close together
289
- if (squaredDistanceBetween(p,p1) < TOLERANCE) {
290
- return undefined;
291
- }
292
-
293
- /** The perpindicular bisector between the two given points on the circle */
294
- const pb = [
295
- (p[0] + p1[0]) / 2,
296
- (p[1] + p1[1]) / 2,
297
- ];
298
- const tan = [p1[0] - p[0], p1[1] - p[1]];
299
- const norm = [-tan[1], tan[0]]; // Rotate by 90 degrees
300
- const pb2 = [pb[0] + norm[0], pb[1] + norm[1]];
301
-
302
- const res = lineLineIntersection([p,x], [pb, pb2]);
303
-
304
- if (!res) { return undefined; }
305
-
306
- const resO = [res[0] - p[0], res[1] - p[1]];
307
- const xO = [x[0] - p[0], x[1] - p[1]];
308
- if (dot(resO, xO) < 0) {
309
- return undefined;
310
- }
311
-
312
- return res;
313
- }
314
-
315
-
316
- export { find2Prong }
@@ -1,52 +0,0 @@
1
- import { LlRbTree } from 'flo-ll-rb-tree';
2
- import { getNeighbouringPoints } from '../../get-neighboring-cps.js';
3
- import { getBoundaryPieceBeziers } from '../../get-boundary-piece-beziers.js';
4
- import { BezierPiece } from '../../bezier-piece.js';
5
- import { Loop } from '../../../loop.js';
6
- import { CpNode } from '../../../cp-node.js';
7
- import { isPosDullCorner, IPointOnShape } from '../../../point-on-shape.js';
8
-
9
-
10
- /** @hidden */
11
- function getInitialBezierPieces(
12
- isHoleClosing: boolean,
13
- k: number,
14
- loops: Loop[],
15
- cpTrees: Map<Loop,LlRbTree<CpNode>>,
16
- y: IPointOnShape) {
17
-
18
- let bezierPieces: BezierPiece[];
19
- let δ: CpNode[];
20
-
21
- if (isHoleClosing) {
22
- bezierPieces = [];
23
- for (let k2=0; k2<k; k2++) {
24
- const pieces: BezierPiece[] = loops[k2].curves
25
- .map(curve => ({ curve, ts: [0,1] }))
26
- bezierPieces.push(...pieces);
27
- }
28
- } else {
29
- //let order = PointOnShape.isDullCorner(y)
30
- const order = isPosDullCorner(y)
31
- ? y.t === 1 ? -1 : +1
32
- : 0;
33
- const loop = loops[k];
34
- const cpNode = getNeighbouringPoints(cpTrees.get(loop), y, order, 0)[0];
35
- δ = [cpNode, cpNode];
36
- if (!cpNode ||
37
- // The special case if there is only a single sharp corner or
38
- // terminating 2-prong currently in the MAT. Don't remove!
39
- (cpNode === cpNode.next.next)
40
- ) {
41
- bezierPieces = loop.curves
42
- .map(curve => ({ curve, ts: [0,1] }))
43
- } else {
44
- bezierPieces = getBoundaryPieceBeziers(δ);
45
- }
46
- }
47
-
48
- return { bezierPieces, δ };
49
- }
50
-
51
-
52
- export { getInitialBezierPieces }
@@ -1,13 +0,0 @@
1
- import { IPointOnShape } from '../../../point-on-shape.js';
2
-
3
-
4
- /** @hidden */
5
- type TXForDebugging = {
6
- x: number[];
7
- y: IPointOnShape;
8
- z: IPointOnShape;
9
- t: number;
10
- }
11
-
12
-
13
- export { TXForDebugging }
@@ -1,106 +0,0 @@
1
- /** @internal */
2
- declare const _debug_: Debug;
3
-
4
- import { fromTo } from 'flo-bezier3';
5
- import { Debug } from '../../../debug/debug.js';
6
- import { CpNode } from '../../../cp-node.js';
7
- import { Circle } from '../../../circle.js';
8
- import { IPointOnShape } from '../../../point-on-shape.js';
9
- import { createEmptyThreeProngForDebugging } from '../../../debug/three-prong-for-debugging.js';
10
- import { find3ProngForDelta3s } from './find-3-prong-for-delta3s.js';
11
- import { getBoundaryPieceBeziers } from '../../get-boundary-piece-beziers.js';
12
-
13
-
14
- /**
15
- * @hidden
16
- * Find and return a 3-prong from the given boundary piece.
17
- * @param δs A boundary piece
18
- * @param extreme The maximum coordinate value used to calculate floating point
19
- * tolerances.
20
- */
21
- function find3Prong(δs: CpNode[][], extreme: number) {
22
- const bezierPiecess = δs.map(getBoundaryPieceBeziers);
23
-
24
- if (typeof _debug_ !== 'undefined') {
25
- const threeProngs = _debug_.generated.elems.threeProng;
26
- threeProngs.push(createEmptyThreeProngForDebugging());
27
-
28
- const d = threeProngs[threeProngs.length-1];
29
- d.boundaries = [];
30
- for (const bezierPieces of bezierPiecess) {
31
- const boundary: number[][][] = [];
32
- d.boundaries.push(boundary);
33
- for (const bezierPiece of bezierPieces) {
34
- /* qqq
35
- let bezier = fromTo(bezierPiece.curve.ps)(
36
- bezierPiece.ts[0], bezierPiece.ts[1]
37
- );
38
- */
39
- const bezier = fromTo(
40
- bezierPiece.curve.ps,
41
- bezierPiece.ts[0], bezierPiece.ts[1]
42
- );
43
- boundary.push(bezier);
44
- }
45
- }
46
- d.traces = [];
47
- }
48
-
49
- const candidateThreeProngs = [];
50
-
51
- // The best candidate amongst the different 'permutations' of the given δs.
52
- let threeProng: {
53
- circle: Circle,
54
- ps: IPointOnShape[],
55
- δ3s: CpNode[][]
56
- };
57
- let bestIndx = undefined;
58
- let smallestError = Number.POSITIVE_INFINITY;
59
- for (let i=1; i<δs.length-1; i++) {
60
- for (let k=0; k<3; k++) {
61
- if (typeof _debug_ !== 'undefined') {
62
- const threeProngs = _debug_.generated.elems.threeProng;
63
- const d = threeProngs[threeProngs.length-1];
64
- const trace: number[][] = [];
65
- d.traces.push(trace);
66
- }
67
-
68
- const threeProngInfo =
69
- find3ProngForDelta3s(δs, i, k, bezierPiecess, extreme);
70
- if (!threeProngInfo) { continue; }
71
-
72
- const { circle, ps, error, δ3s } = threeProngInfo;
73
-
74
- if (typeof _debug_ !== 'undefined') {
75
- candidateThreeProngs.push({ circle, ps });
76
- }
77
-
78
- if (error < smallestError) {
79
- smallestError = error;
80
-
81
- bestIndx = i-1;
82
- threeProng = { circle, ps, δ3s };
83
- }
84
- }
85
- }
86
-
87
- //threeProng.δ3s = [δs[0], δs[bestIndx+1], δs[δs.length-1]];
88
-
89
- if (typeof _debug_ !== 'undefined') {
90
- const threeProngs = _debug_.generated.elems.threeProng;
91
- const d = threeProngs[threeProngs.length-1];
92
-
93
- d.generated = _debug_.generated;
94
- d.circle = threeProng.circle;
95
- d.poss = threeProng.ps;
96
- d.cp3ss = threeProng.δ3s;
97
- d.cpss = δs;
98
- d.bestIndx = bestIndx;
99
- d.candidateThreeProngs = candidateThreeProngs;
100
- }
101
-
102
- return threeProng;
103
- }
104
-
105
-
106
- export { find3Prong }
@@ -1,28 +0,0 @@
1
- import { BezierPiece } from '../../bezier-piece.js';
2
- import { getClosestBoundaryPoint } from '../../closest-boundary-point/get-closest-boundary-point.js';
3
-
4
-
5
- /**
6
- * @hidden
7
- * @param x
8
- * @param bezierPiece3s
9
- * @param extreme
10
- */
11
- function getClosestPoints(
12
- x: number[],
13
- bezierPiece3s: BezierPiece[][]) {
14
-
15
- return bezierPiece3s.map(bezierPieces => {
16
- const posInfo = getClosestBoundaryPoint(
17
- bezierPieces,
18
- x,
19
- undefined, // curve
20
- undefined // t
21
- );
22
-
23
- return posInfo ? posInfo.pos : undefined;
24
- });
25
- }
26
-
27
-
28
- export { getClosestPoints }
@@ -1,108 +0,0 @@
1
- /** @internal */
2
- declare const _debug_: Debug;
3
-
4
- import { LlRbTree } from 'flo-ll-rb-tree';
5
- import { Debug } from '../../debug/debug.js';
6
- import { Loop } from '../../loop.js';
7
- import { CpNode } from '../../cp-node.js';
8
- import { IPointOnShape } from '../../point-on-shape.js';
9
- import { getShapeBounds } from '../../svg/get-shape-bounds.js';
10
- import { Circle } from '../../circle.js';
11
- import { find2Prong } from './find-2-prong/find-2-prong.js';
12
- import { add2Prong } from './add-2-prong.js';
13
-
14
-
15
- /**
16
- * @hidden
17
- * Find and add two-prongs.
18
- * @param loops
19
- * @param cpGraphs
20
- * @param k
21
- * @param for2Prongs
22
- * @param extreme The maximum coordinate value used to calculate floating point
23
- * tolerances.
24
- */
25
- function findAndAdd2Prongs(
26
- loops: Loop[],
27
- cpGraphs: Map<Loop,LlRbTree<CpNode>>,
28
- k: number,
29
- for2Prongs: IPointOnShape[],
30
- extreme: number) {
31
-
32
- const len = for2Prongs.length;
33
- const index = indexLinear(len);
34
- //const index = indexInterlaced(len); // Keep for possible future use.
35
- let cpNode_;
36
-
37
- const bounds = getShapeBounds(loops);
38
- const squaredDiagonalLength =
39
- (bounds.maxX.p[0] - bounds.minX.p[0])**2 +
40
- (bounds.maxY.p[1] - bounds.minY.p[1])**2;
41
-
42
- for (let i=0; i<len; i++) {
43
- const pos = for2Prongs[index[i]];
44
-
45
- const twoProngInfo: { circle: Circle, zs: { pos: IPointOnShape, d: number }[] } = find2Prong(
46
- loops, extreme, squaredDiagonalLength, cpGraphs, pos, false, k
47
- );
48
-
49
- if (twoProngInfo) {
50
- const { circle, zs } = twoProngInfo;
51
- const cpNode = add2Prong(cpGraphs, circle, pos, zs, false, extreme);
52
- cpNode_ = cpNode_ || cpNode;
53
- }
54
-
55
- if (typeof _debug_ !== 'undefined') {
56
- if (i+1 === _debug_.directives.stopAfterTwoProngsNum) {
57
- return undefined;
58
- }
59
- }
60
- }
61
-
62
- return cpNode_;
63
- }
64
-
65
-
66
- /**
67
- * @hidden
68
- * Simple linear array indexing.
69
- * @param n
70
- */
71
- function indexLinear(n: number) {
72
- const arr = [];
73
- for (let i=0; i<n; i++) {
74
- arr.push(i);
75
- }
76
-
77
- return arr;
78
- }
79
-
80
-
81
- /**
82
- * @hidden
83
- * Creates a kind of interlaced index vector.
84
- * @param n
85
- */
86
- function indexInterlaced(n: number) {
87
- const source: { [index:number]: boolean } = {};
88
- const arr = [];
89
- // l is the lowest power of 2 so that 2^l > n
90
- let l = Math.pow(2, Math.floor(Math.log2(n)));
91
-
92
- while (l >= 1) {
93
- let k = 0;
94
- while (k < n) {
95
- if (!source[k]) {
96
- arr.push(k);
97
- source[k] = true;
98
- }
99
- k = k + l;
100
- }
101
- l = l/2;
102
- }
103
-
104
- return arr;
105
- }
106
-
107
-
108
- export { findAndAdd2Prongs }