flo-mat 4.1.4 → 5.0.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 (379) hide show
  1. package/__tests__/closest-boundary-point/get-endpoint-info.spec.ts +140 -0
  2. package/__tests__/closest-boundary-point/root-interval-to-distance-squared-interval.spec.ts +87 -0
  3. package/__tests__/cp-node/circle-identity.spec.ts +56 -0
  4. package/__tests__/cp-node/fs/get-all-on-loop-by-loop.spec.ts +55 -0
  5. package/__tests__/cp-node/fs/get-angle-between-mat-curves.spec.ts +39 -3
  6. package/__tests__/cp-node/fs/get-boundary-bezier-parts-to-next.spec.ts +87 -3
  7. package/__tests__/cp-node/fs/get-boundary-beziers-between.spec.ts +68 -3
  8. package/__tests__/cp-node/fs/get-boundary-beziers-to-next.spec.ts +41 -3
  9. package/__tests__/cp-node/fs/get-boundary-distance-to-next.spec.ts +20 -3
  10. package/__tests__/cp-node/fs/get-branch-beziers.spec.ts +42 -3
  11. package/__tests__/cp-node/fs/get-branch.spec.ts +60 -3
  12. package/__tests__/cp-node/fs/get-cp-node-ordering.spec.ts +19 -3
  13. package/__tests__/cp-node/fs/get-distance-to-next.spec.ts +37 -4
  14. package/__tests__/cp-node/fs/get-edge-direction.spec.ts +50 -3
  15. package/__tests__/cp-node/fs/get-first-exit.spec.ts +78 -3
  16. package/__tests__/cp-node/fs/get-hole-closers.spec.ts +32 -3
  17. package/__tests__/cp-node/fs/get-implied-boundary-bezier-between.spec.ts +48 -3
  18. package/__tests__/cp-node/fs/get-mat-curve-between.spec.ts +77 -3
  19. package/__tests__/cp-node/fs/get-mat-curve-to-next.spec.ts +17 -4
  20. package/__tests__/cp-node/fs/get-mat-curves-between.spec.ts +38 -3
  21. package/__tests__/cp-node/fs/get-salience.spec.ts +68 -3
  22. package/__tests__/cp-node/fs/get-vertex-forward-children.spec.ts +40 -3
  23. package/__tests__/cp-node/fs/insert-cp-node.spec.ts +87 -3
  24. package/__tests__/cp-node/fs/is-special.spec.ts +1 -1
  25. package/__tests__/cp-node/fs/remove-cp-node.spec.ts +42 -3
  26. package/__tests__/find-2-prong/calc-seperation-tolerance.spec.ts +46 -0
  27. package/__tests__/find-2-prong/get-medial/dd-get-medial-point-coeffs-same-curve.spec.ts +7 -5
  28. package/__tests__/find-2-prong/get-medial/dd-get-medial-point-coeffs.spec.ts +4 -2
  29. package/__tests__/find-2-prong/get-medial/get-closest-points.spec.ts +1 -1
  30. package/__tests__/floyd-warshall/get-graph.spec.ts +100 -0
  31. package/__tests__/get-mats-with-hole.ts +28 -0
  32. package/__tests__/get-mats1.spec.ts +61 -0
  33. package/__tests__/get-mats1.ts +75 -67
  34. package/__tests__/helpers/cp-node-by-id.ts +27 -0
  35. package/__tests__/helpers/expect-point-close.ts +42 -0
  36. package/__tests__/mat/hausdorff-distance-one-sided-exceeds.spec.ts +129 -0
  37. package/__tests__/mat/simplify-mat.spec.ts +85 -0
  38. package/__tests__/reconstruct-from-mat/reconstruct-from-mat.spec.ts +39 -0
  39. package/__tests__/specific-cases/test-svgs/achispado.svg +14 -0
  40. package/__tests__/utils/get-beziers-from-tangents.spec.ts +142 -0
  41. package/browser/index.js +17882 -13800
  42. package/browser/index.min.js +1 -1
  43. package/node/add-n-prong.ts/join-spokes.js +3 -2
  44. package/node/add-n-prong.ts/join-spokes.js.map +1 -1
  45. package/node/closest-boundary-point/cull-curve-pieces.d.ts +21 -0
  46. package/node/closest-boundary-point/cull-curve-pieces.js +40 -0
  47. package/node/closest-boundary-point/cull-curve-pieces.js.map +1 -0
  48. package/node/closest-boundary-point/get-close-boundary-points-certified.js +5 -2
  49. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
  50. package/node/closest-boundary-point/get-endpoint-info.d.ts +39 -0
  51. package/node/closest-boundary-point/get-endpoint-info.js +78 -0
  52. package/node/closest-boundary-point/get-endpoint-info.js.map +1 -0
  53. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +5 -19
  54. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -1
  55. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +17 -5
  56. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +37 -50
  57. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -1
  58. package/node/corner/get-corner.d.ts +18 -1
  59. package/node/corner/get-corner.js +8 -1
  60. package/node/corner/get-corner.js.map +1 -1
  61. package/node/corner/get-interface-ccw.js.map +1 -1
  62. package/node/cp-node/cp-node.d.ts +4 -3
  63. package/node/cp-node/fs/enhance-cp-node.d.ts +9 -9
  64. package/node/cp-node/fs/get-all-on-loop-by-loop.js +0 -4
  65. package/node/cp-node/fs/get-all-on-loop-by-loop.js.map +1 -1
  66. package/node/cp-node/fs/get-angle-between-mat-curves.d.ts +1 -1
  67. package/node/cp-node/fs/get-angle-between-mat-curves.js +7 -4
  68. package/node/cp-node/fs/get-angle-between-mat-curves.js.map +1 -1
  69. package/node/cp-node/fs/get-boundary-beziers-between.d.ts +6 -4
  70. package/node/cp-node/fs/get-boundary-beziers-between.js +6 -4
  71. package/node/cp-node/fs/get-boundary-beziers-between.js.map +1 -1
  72. package/node/cp-node/fs/get-branch-beziers.d.ts +2 -1
  73. package/node/cp-node/fs/get-branch-beziers.js +3 -2
  74. package/node/cp-node/fs/get-branch-beziers.js.map +1 -1
  75. package/node/cp-node/fs/get-branch.js +1 -2
  76. package/node/cp-node/fs/get-branch.js.map +1 -1
  77. package/node/cp-node/fs/get-distance-to-next.js +4 -2
  78. package/node/cp-node/fs/get-distance-to-next.js.map +1 -1
  79. package/node/cp-node/fs/get-edge-direction.js +3 -2
  80. package/node/cp-node/fs/get-edge-direction.js.map +1 -1
  81. package/node/cp-node/fs/get-first-exit.d.ts +7 -3
  82. package/node/cp-node/fs/get-first-exit.js +13 -11
  83. package/node/cp-node/fs/get-first-exit.js.map +1 -1
  84. package/node/cp-node/fs/get-implied-boundary-bezier-between.d.ts +10 -2
  85. package/node/cp-node/fs/get-implied-boundary-bezier-between.js +11 -54
  86. package/node/cp-node/fs/get-implied-boundary-bezier-between.js.map +1 -1
  87. package/node/cp-node/fs/get-mat-curve-between.d.ts +5 -3
  88. package/node/cp-node/fs/get-mat-curve-between.js +6 -49
  89. package/node/cp-node/fs/get-mat-curve-between.js.map +1 -1
  90. package/node/cp-node/fs/get-mat-curve-to-next.d.ts +1 -1
  91. package/node/cp-node/fs/get-mat-curves-between.d.ts +8 -0
  92. package/node/cp-node/fs/get-mat-curves-between.js +9 -2
  93. package/node/cp-node/fs/get-mat-curves-between.js.map +1 -1
  94. package/node/cp-node/fs/get-real-prong-count.d.ts +2 -1
  95. package/node/cp-node/fs/get-real-prong-count.js +11 -5
  96. package/node/cp-node/fs/get-real-prong-count.js.map +1 -1
  97. package/node/cp-node/fs/get-salience.d.ts +10 -0
  98. package/node/cp-node/fs/get-salience.js +17 -1
  99. package/node/cp-node/fs/get-salience.js.map +1 -1
  100. package/node/cp-node/fs/is-fully-terminating.d.ts +4 -2
  101. package/node/cp-node/fs/is-fully-terminating.js +6 -17
  102. package/node/cp-node/fs/is-fully-terminating.js.map +1 -1
  103. package/node/cp-node/fs/is-on-same-circle.d.ts +3 -0
  104. package/node/cp-node/fs/is-on-same-circle.js +4 -4
  105. package/node/cp-node/fs/is-on-same-circle.js.map +1 -1
  106. package/node/cp-node/fs/is-on-same-loop.d.ts +1 -1
  107. package/node/cp-node/fs/is-special.d.ts +7 -0
  108. package/node/cp-node/fs/is-special.js +9 -2
  109. package/node/cp-node/fs/is-special.js.map +1 -1
  110. package/node/cp-node/fs/is-vertex.d.ts +1 -1
  111. package/node/cp-node/fs/traverse-edges.d.ts +7 -3
  112. package/node/cp-node/fs/traverse-edges.js +7 -3
  113. package/node/cp-node/fs/traverse-edges.js.map +1 -1
  114. package/node/cp-node/stringification/from-stringifyable.d.ts +2 -2
  115. package/node/cp-node/stringification/from-stringifyable.js +17 -1
  116. package/node/cp-node/stringification/from-stringifyable.js.map +1 -1
  117. package/node/cp-node/stringification/to-stringifyable.d.ts +3 -3
  118. package/node/cp-node/stringification/to-stringifyable.js +3 -3
  119. package/node/debug/debug.d.ts +26 -3
  120. package/node/debug/debug.js +16 -5
  121. package/node/debug/debug.js.map +1 -1
  122. package/node/find-2-prong/add-2-prong.js +7 -9
  123. package/node/find-2-prong/add-2-prong.js.map +1 -1
  124. package/node/find-2-prong/calc-seperation-tolerance.d.ts +28 -5
  125. package/node/find-2-prong/calc-seperation-tolerance.js +32 -89
  126. package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -1
  127. package/node/find-2-prong/find-2-prong.js +8 -10
  128. package/node/find-2-prong/find-2-prong.js.map +1 -1
  129. package/node/find-2-prong/find-and-add-2-prongs.js +2 -2
  130. package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -1
  131. package/node/find-2-prong/get-medial/get-antipodal-points.d.ts +1 -2
  132. package/node/find-2-prong/get-medial/get-antipodal-points.js +2 -3
  133. package/node/find-2-prong/get-medial/get-antipodal-points.js.map +1 -1
  134. package/node/find-2-prong/get-medial/get-closest-points.d.ts +1 -8
  135. package/node/find-2-prong/get-medial/get-closest-points.js +4 -40
  136. package/node/find-2-prong/get-medial/get-closest-points.js.map +1 -1
  137. package/node/find-2-prong/reduce-radius.d.ts +1 -1
  138. package/node/find-2-prong/reduce-radius.js +6 -3
  139. package/node/find-2-prong/reduce-radius.js.map +1 -1
  140. package/node/find-3-prong/calc-better-x.js +1 -1
  141. package/node/find-3-prong/calc-better-x.js.map +1 -1
  142. package/node/find-3-prong/find-3-prong-for-delta3s.d.ts +3 -2
  143. package/node/find-3-prong/find-3-prong-for-delta3s.js +36 -42
  144. package/node/find-3-prong/find-3-prong-for-delta3s.js.map +1 -1
  145. package/node/find-3-prong/find-3-prong.js +3 -1
  146. package/node/find-3-prong/find-3-prong.js.map +1 -1
  147. package/node/find-3-prong/find-and-add-3-prongs.js +16 -0
  148. package/node/find-3-prong/find-and-add-3-prongs.js.map +1 -1
  149. package/node/find-mat/create-initial-cp-tree.js +2 -2
  150. package/node/find-mat/create-initial-cp-tree.js.map +1 -1
  151. package/node/find-mat/find-mat.js +3 -4
  152. package/node/find-mat/find-mat.js.map +1 -1
  153. package/node/find-mat/find-mats.d.ts +6 -12
  154. package/node/find-mat/find-mats.js +10 -27
  155. package/node/find-mat/find-mats.js.map +1 -1
  156. package/node/find-mat/get-dull-corners-on-loop.js +2 -2
  157. package/node/find-mat/get-dull-corners-on-loop.js.map +1 -1
  158. package/node/find-mat/get-for-1-prongs-on-loop.js +36 -8
  159. package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -1
  160. package/node/find-mat/get-meta.d.ts +14 -4
  161. package/node/find-mat/get-meta.js +30 -24
  162. package/node/find-mat/get-meta.js.map +1 -1
  163. package/node/find-mat/get-sharp-corners.js +2 -2
  164. package/node/find-mat/get-sharp-corners.js.map +1 -1
  165. package/node/find-mat/mat-options.d.ts +2 -2
  166. package/node/floyd-warshall/get-graph.d.ts +12 -1
  167. package/node/floyd-warshall/get-graph.js +41 -38
  168. package/node/floyd-warshall/get-graph.js.map +1 -1
  169. package/node/geometry/get-bounding-box-.d.ts +16 -2
  170. package/node/geometry/get-bounding-box-.js +5 -2
  171. package/node/geometry/get-bounding-box-.js.map +1 -1
  172. package/node/geometry/get-closest-square-distance-to-rect.d.ts +3 -0
  173. package/node/geometry/get-closest-square-distance-to-rect.js +7 -5
  174. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
  175. package/node/geometry/get-closest-squared-distance-to-rotated-rect.d.ts +4 -0
  176. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js +12 -5
  177. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  178. package/node/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.js +1 -2
  179. package/node/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.js.map +1 -1
  180. package/node/index.d.ts +3 -2
  181. package/node/index.js +2 -1
  182. package/node/index.js.map +1 -1
  183. package/node/mat/clone-mat.d.ts +9 -0
  184. package/node/mat/clone-mat.js +17 -0
  185. package/node/mat/clone-mat.js.map +1 -0
  186. package/node/mat/clone-meta.d.ts +12 -0
  187. package/node/mat/clone-meta.js +24 -0
  188. package/node/mat/clone-meta.js.map +1 -0
  189. package/node/mat/get-boundary-piece-beziers.d.ts +5 -0
  190. package/node/mat/get-boundary-piece-beziers.js +7 -93
  191. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  192. package/node/mat/get-closeby-cp-if-exist.js +2 -1
  193. package/node/mat/get-closeby-cp-if-exist.js.map +1 -1
  194. package/node/mat/get-largest-3-prong.d.ts +6 -0
  195. package/node/mat/get-largest-3-prong.js +8 -5
  196. package/node/mat/get-largest-3-prong.js.map +1 -1
  197. package/node/mat/get-largest-vertex.d.ts +15 -1
  198. package/node/mat/get-largest-vertex.js +20 -7
  199. package/node/mat/get-largest-vertex.js.map +1 -1
  200. package/node/mat/hausdorff-distance-one-sided-exceeds.d.ts +79 -0
  201. package/node/mat/hausdorff-distance-one-sided-exceeds.js +251 -0
  202. package/node/mat/hausdorff-distance-one-sided-exceeds.js.map +1 -0
  203. package/node/mat/mat-meta.d.ts +0 -6
  204. package/node/mat/simplify-mat.d.ts +25 -8
  205. package/node/mat/simplify-mat.js +182 -53
  206. package/node/mat/simplify-mat.js.map +1 -1
  207. package/node/mat/trim-mat.d.ts +4 -2
  208. package/node/mat/trim-mat.js +3 -1
  209. package/node/mat/trim-mat.js.map +1 -1
  210. package/node/point-on-shape/get-boundary-tangent-line.d.ts +19 -0
  211. package/node/point-on-shape/get-boundary-tangent-line.js +33 -0
  212. package/node/point-on-shape/get-boundary-tangent-line.js.map +1 -0
  213. package/node/point-on-shape/get-osculating-circle.d.ts +6 -4
  214. package/node/point-on-shape/get-osculating-circle.js +6 -4
  215. package/node/point-on-shape/get-osculating-circle.js.map +1 -1
  216. package/node/point-on-shape/get-pos-corner.js +2 -2
  217. package/node/point-on-shape/get-pos-corner.js.map +1 -1
  218. package/node/point-on-shape/point-on-shape.d.ts +5 -0
  219. package/node/reconstruct-from-mat/reconstruct-from-mat.js +20 -80
  220. package/node/reconstruct-from-mat/reconstruct-from-mat.js.map +1 -1
  221. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.d.ts +4 -0
  222. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.js +4 -0
  223. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.js.map +1 -1
  224. package/node/sat/cull.d.ts +7 -6
  225. package/node/sat/cull.js +13 -16
  226. package/node/sat/cull.js.map +1 -1
  227. package/node/sat/get-sat-culls.d.ts +12 -2
  228. package/node/sat/get-sat-culls.js +21 -16
  229. package/node/sat/get-sat-culls.js.map +1 -1
  230. package/node/svg/get-shape-bounds.d.ts +1 -12
  231. package/node/svg/get-shape-bounds.js +2 -3
  232. package/node/svg/get-shape-bounds.js.map +1 -1
  233. package/node/sweep-line/sweep-line.js.map +1 -1
  234. package/node/utils/get-beziers-from-tangents.d.ts +28 -0
  235. package/node/utils/get-beziers-from-tangents.js +92 -0
  236. package/node/utils/get-beziers-from-tangents.js.map +1 -0
  237. package/node/vertex/remove-vertex.d.ts +5 -3
  238. package/node/vertex/remove-vertex.js +5 -3
  239. package/node/vertex/remove-vertex.js.map +1 -1
  240. package/package.json +16 -16
  241. package/qv-infinite-loop.md +120 -0
  242. package/src/add-n-prong.ts/join-spokes.ts +4 -2
  243. package/src/closest-boundary-point/cull-curve-pieces.ts +49 -0
  244. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +5 -2
  245. package/src/closest-boundary-point/get-endpoint-info.ts +96 -0
  246. package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +5 -23
  247. package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +42 -60
  248. package/src/corner/get-corner.ts +10 -1
  249. package/src/corner/get-interface-ccw.ts +2 -2
  250. package/src/cp-node/cp-node.ts +4 -3
  251. package/src/cp-node/fs/get-all-on-loop-by-loop.ts +0 -4
  252. package/src/cp-node/fs/get-angle-between-mat-curves.ts +9 -5
  253. package/src/cp-node/fs/get-boundary-beziers-between.ts +10 -8
  254. package/src/cp-node/fs/get-branch-beziers.ts +3 -2
  255. package/src/cp-node/fs/get-branch.ts +1 -2
  256. package/src/cp-node/fs/get-distance-to-next.ts +4 -2
  257. package/src/cp-node/fs/get-edge-direction.ts +4 -2
  258. package/src/cp-node/fs/get-first-exit.ts +15 -14
  259. package/src/cp-node/fs/get-implied-boundary-bezier-between.ts +18 -70
  260. package/src/cp-node/fs/get-mat-curve-between.ts +10 -67
  261. package/src/cp-node/fs/get-mat-curves-between.ts +9 -2
  262. package/src/cp-node/fs/get-real-prong-count.ts +11 -7
  263. package/src/cp-node/fs/get-salience.ts +15 -2
  264. package/src/cp-node/fs/is-fully-terminating.ts +6 -22
  265. package/src/cp-node/fs/is-on-same-circle.ts +6 -7
  266. package/src/cp-node/fs/is-on-same-loop.ts +2 -2
  267. package/src/cp-node/fs/is-special.ts +11 -6
  268. package/src/cp-node/fs/is-vertex.ts +1 -1
  269. package/src/cp-node/fs/traverse-edges.ts +8 -4
  270. package/src/cp-node/stringification/from-stringifyable.ts +75 -58
  271. package/src/cp-node/stringification/to-stringifyable.ts +3 -3
  272. package/src/debug/debug.ts +44 -8
  273. package/src/find-2-prong/add-2-prong.ts +9 -11
  274. package/src/find-2-prong/calc-seperation-tolerance.ts +34 -115
  275. package/src/find-2-prong/find-2-prong.ts +9 -11
  276. package/src/find-2-prong/find-and-add-2-prongs.ts +2 -2
  277. package/src/find-2-prong/get-medial/get-antipodal-points.ts +1 -3
  278. package/src/find-2-prong/get-medial/get-closest-points.ts +6 -51
  279. package/src/find-2-prong/reduce-radius.ts +6 -4
  280. package/src/find-3-prong/calc-better-x.ts +2 -2
  281. package/src/find-3-prong/find-3-prong-for-delta3s.ts +197 -214
  282. package/src/find-3-prong/find-3-prong.ts +54 -51
  283. package/src/find-3-prong/find-and-add-3-prongs.ts +20 -1
  284. package/src/find-mat/create-initial-cp-tree.ts +2 -2
  285. package/src/find-mat/find-mat.ts +4 -6
  286. package/src/find-mat/find-mats.ts +83 -105
  287. package/src/find-mat/get-dull-corners-on-loop.ts +2 -2
  288. package/src/find-mat/get-for-1-prongs-on-loop.ts +40 -8
  289. package/src/find-mat/get-meta.ts +34 -39
  290. package/src/find-mat/get-sharp-corners.ts +2 -2
  291. package/src/find-mat/mat-options.ts +2 -2
  292. package/src/floyd-warshall/get-graph.ts +46 -47
  293. package/src/geometry/get-bounding-box-.ts +5 -2
  294. package/src/geometry/get-closest-square-distance-to-rect.ts +7 -7
  295. package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +15 -13
  296. package/src/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.ts +1 -2
  297. package/src/index.ts +3 -2
  298. package/src/mat/clone-mat.ts +9 -3
  299. package/src/mat/clone-meta.ts +8 -0
  300. package/src/mat/get-boundary-piece-beziers.ts +16 -117
  301. package/src/mat/get-closeby-cp-if-exist.ts +3 -1
  302. package/src/mat/get-largest-3-prong.ts +9 -6
  303. package/src/mat/get-largest-vertex.ts +25 -9
  304. package/src/mat/hausdorff-distance-one-sided-exceeds.ts +314 -0
  305. package/src/mat/mat-meta.ts +0 -9
  306. package/src/mat/simplify-mat.ts +254 -116
  307. package/src/mat/trim-mat.ts +6 -4
  308. package/src/point-on-shape/get-boundary-tangent-line.ts +36 -0
  309. package/src/point-on-shape/get-osculating-circle.ts +7 -5
  310. package/src/point-on-shape/get-pos-corner.ts +2 -2
  311. package/src/point-on-shape/point-on-shape.ts +5 -0
  312. package/src/reconstruct-from-mat/reconstruct-from-mat.ts +22 -111
  313. package/src/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.ts +4 -0
  314. package/src/sat/cull.ts +16 -20
  315. package/src/sat/get-sat-culls.ts +28 -23
  316. package/src/svg/get-shape-bounds.ts +2 -3
  317. package/src/sweep-line/sweep-line.ts +1 -1
  318. package/src/utils/deg-to-rad.ts +4 -2
  319. package/src/utils/get-beziers-from-tangents.ts +110 -0
  320. package/src/utils/map-map.ts +1 -1
  321. package/src/utils/rad-to-deg.ts +4 -1
  322. package/src/vertex/remove-vertex.ts +5 -3
  323. package/webpack.config.cjs +7 -2
  324. package/__tests__/cp-node/fs/get-distance-between.spec.ts +0 -7
  325. package/__tests__/cp-node/fs/get-terminating-on-circle.spec.ts +0 -24
  326. package/__tests__/cp-node/fs/is-single-3-prong.spec.ts +0 -17
  327. package/__tests__/cp-node/fs/iterate-all-on-loop.spec.ts +0 -17
  328. package/__tests__/cp-node/fs/traverse-all-forward.spec.ts +0 -14
  329. package/node/closest-boundary-point/cull-bezier-pieces-1.d.ts +0 -9
  330. package/node/closest-boundary-point/cull-bezier-pieces-1.js +0 -17
  331. package/node/closest-boundary-point/cull-bezier-pieces-1.js.map +0 -1
  332. package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +0 -13
  333. package/node/closest-boundary-point/cull-by-loose-bounding-box.js +0 -27
  334. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +0 -1
  335. package/node/closest-boundary-point/cull-by-tight-boundary-box.d.ts +0 -11
  336. package/node/closest-boundary-point/cull-by-tight-boundary-box.js +0 -27
  337. package/node/closest-boundary-point/cull-by-tight-boundary-box.js.map +0 -1
  338. package/node/cp-node/fs/find-first.d.ts +0 -10
  339. package/node/cp-node/fs/find-first.js +0 -19
  340. package/node/cp-node/fs/find-first.js.map +0 -1
  341. package/node/debug/functions/check-ordering.d.ts +0 -4
  342. package/node/debug/functions/check-ordering.js +0 -43
  343. package/node/debug/functions/check-ordering.js.map +0 -1
  344. package/node/find-2-prong/cull-bezier-pieces.d.ts +0 -13
  345. package/node/find-2-prong/cull-bezier-pieces.js +0 -43
  346. package/node/find-2-prong/cull-bezier-pieces.js.map +0 -1
  347. package/node/floyd-warshall/get-hole-closer-pairs.d.ts +0 -8
  348. package/node/floyd-warshall/get-hole-closer-pairs.js +0 -27
  349. package/node/floyd-warshall/get-hole-closer-pairs.js.map +0 -1
  350. package/node/utils/dual-set.d.ts +0 -27
  351. package/node/utils/dual-set.js +0 -55
  352. package/node/utils/dual-set.js.map +0 -1
  353. package/node/utils/tri-map.d.ts +0 -27
  354. package/node/utils/tri-map.js +0 -49
  355. package/node/utils/tri-map.js.map +0 -1
  356. package/src/closest-boundary-point/cull-bezier-pieces-1.ts +0 -36
  357. package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +0 -42
  358. package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +0 -43
  359. package/src/closest-boundary-point/get-p-from-box.ts +0 -14
  360. package/src/cp-node/fs/add-distance-from.ts +0 -49
  361. package/src/cp-node/fs/get-distance-between.ts +0 -16
  362. package/src/cp-node/fs/get-terminating-on-circle.ts +0 -24
  363. package/src/cp-node/fs/is-single-3-prong.ts +0 -15
  364. package/src/cp-node/fs/iterate-all-on-loop.ts +0 -15
  365. package/src/cp-node/fs/traverse-all-forward.ts +0 -24
  366. package/src/debug/functions/draw/draw-beziers-as-single-path.ts +0 -40
  367. package/src/debug/functions/draw/draw-disk.ts +0 -34
  368. package/src/debug/functions/draw/xmlns.ts +0 -5
  369. package/src/find-2-prong/cull-bezier-pieces.ts +0 -61
  370. package/src/find-2-prong/find-and-add-2-prong.ts +0 -30
  371. package/src/find-2-prong/get-medial/get-closest-points-d.ts +0 -213
  372. package/src/find-2-prong/x-for-debugging.ts +0 -13
  373. package/src/floyd-warshall/get-hole-closer-pairs.ts +0 -35
  374. package/src/mat/get-two-prong-type.ts +0 -13
  375. package/src/point-on-shape/is-pos-dull-corner.ts +0 -18
  376. package/src/point-on-shape/is-pos-quite-dull-corner.ts +0 -18
  377. package/src/point-on-shape/is-pos-quite-sharp-corner.ts +0 -18
  378. package/src/point-on-shape/pos-to-human-string.ts +0 -18
  379. package/src/sweep-line/are-boxes-intersecting.ts +0 -37
@@ -1,17 +1,24 @@
1
1
  import { squaredDistanceBetweenPointAndLineSegment, squaredDistanceBetween } from 'flo-vector2d';
2
+ const { min } = Math;
2
3
  /**
4
+ * Returns the closest squared distance from the point `p` to the given
5
+ * (rotated) rectangle given by its 4 corners in order, i.e. `0` if `p` is
6
+ * inside the rectangle.
7
+ *
3
8
  * @internal
4
9
  */
5
10
  function getClosestSquaredDistanceToRotatedRect(ps, p) {
6
- const ds = [0, 1, 2, 3]
7
- .map(i => squaredDistanceBetweenPointAndLineSegment(p, [ps[i], ps[(i + 1) % 4]]));
11
+ const d0 = squaredDistanceBetweenPointAndLineSegment(p, [ps[0], ps[1]]);
12
+ const d1 = squaredDistanceBetweenPointAndLineSegment(p, [ps[1], ps[2]]);
13
+ const d2 = squaredDistanceBetweenPointAndLineSegment(p, [ps[2], ps[3]]);
14
+ const d3 = squaredDistanceBetweenPointAndLineSegment(p, [ps[3], ps[0]]);
8
15
  const width = squaredDistanceBetween(ps[0], ps[1]);
9
16
  const height = squaredDistanceBetween(ps[0], ps[3]);
10
- if (ds[0] <= height && ds[2] <= height &&
11
- ds[1] <= width && ds[3] <= width) {
17
+ if (d0 <= height && d2 <= height &&
18
+ d1 <= width && d3 <= width) {
12
19
  return 0; // Inside rotated rect
13
20
  }
14
- return Math.min(...ds);
21
+ return min(d0, d1, d2, d3);
15
22
  }
16
23
  export { getClosestSquaredDistanceToRotatedRect };
17
24
  //# sourceMappingURL=get-closest-squared-distance-to-rotated-rect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-closest-squared-distance-to-rotated-rect.js","sourceRoot":"","sources":["../../src/geometry/get-closest-squared-distance-to-rotated-rect.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,yCAAyC,EAAE,sBAAsB,EACpE,MAAM,cAAc,CAAC;AAGtB;;GAEG;AACH,SAAS,sCAAsC,CAAC,EAAc,EAAE,CAAW;IACvE,MAAM,EAAE,GAAG,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC;SACnB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,yCAAyC,CAC3C,CAAC,EACD,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAC3B,CACJ,CAAC;IAEF,MAAM,KAAK,GAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM;QAClC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;QAEpC,OAAO,CAAC,CAAC,CAAC,sBAAsB;IACpC,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3B,CAAC;AAGD,OAAO,EAAE,sCAAsC,EAAE,CAAA"}
1
+ {"version":3,"file":"get-closest-squared-distance-to-rotated-rect.js","sourceRoot":"","sources":["../../src/geometry/get-closest-squared-distance-to-rotated-rect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yCAAyC,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEjG,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAGrB;;;;;;GAMG;AACH,SAAS,sCAAsC,CAAC,EAAc,EAAE,CAAW;IACvE,MAAM,EAAE,GAAG,yCAAyC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,yCAAyC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,yCAAyC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,yCAAyC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExE,MAAM,KAAK,GAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM;QAC5B,EAAE,IAAI,KAAK,IAAK,EAAE,IAAI,KAAK,EAAE,CAAC;QAE9B,OAAO,CAAC,CAAC,CAAC,sBAAsB;IACpC,CAAC;IAED,OAAO,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/B,CAAC;AAGD,OAAO,EAAE,sCAAsC,EAAE,CAAA"}
@@ -1,6 +1,5 @@
1
1
  import { toPowerBasisDd } from 'flo-bezier3';
2
- import { twoDiff, ddMultDouble2, ddAddDd, ddMultDd, ddNegativeOf, ddMultByNeg2, ddMultBy2, ddDiffDouble } from 'double-double';
3
- const td = twoDiff;
2
+ import { ddMultDouble2, ddAddDd, ddMultDd, ddNegativeOf, ddMultByNeg2, ddMultBy2, ddDiffDouble } from 'double-double';
4
3
  const qmd = ddMultDouble2;
5
4
  const qaq = ddAddDd;
6
5
  const qmq = ddMultDd;
@@ -1 +1 @@
1
- {"version":3,"file":"dd-get-medial-point-coeffs-bez3.js","sourceRoot":"","sources":["../../../src/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE/H,MAAM,EAAE,GAAG,OAAO,CAAC;AACnB,MAAM,GAAG,GAAG,aAAa,CAAC;AAC1B,MAAM,GAAG,GAAG,OAAO,CAAC;AACpB,MAAM,GAAG,GAAG,QAAQ,CAAC;AACrB,MAAM,GAAG,GAAG,YAAY,CAAC;AACzB,MAAM,IAAI,GAAG,YAAY,CAAC;AAC1B,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,GAAG,GAAG,YAAY,CAAC;AAGzB;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAS,0BAA0B,CAC3B,CAAa,EACb,CAAa,EACb,EAAc;IAElB,wDAAwD;IACxD,uDAAuD;IACvD,wDAAwD;IAExD,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACnB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAEnB,8DAA8D;IAC9D,MAAM,CAAC,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC,EAAC,CAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;IAE/D,uBAAuB;IACvB,uBAAuB;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;IAEvB,+CAA+C;IAC/C,4BAA4B;IAC5B,4BAA4B;IAC5B,4BAA4B;IAC5B,+BAA+B;IAC/B,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,CAAC,CAAC;IAEzC,4BAA4B;IAC5B,4BAA4B;IAC5B,4BAA4B;IAC5B,4BAA4B;IAC5B,4BAA4B;IAC5B,4BAA4B;IAC5B,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IAEtC,+BAA+B;IAC/B,+BAA+B;IAC/B,8BAA8B;IAC9B,gCAAgC;IAChC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAC,GAAG,CAAC,EAAC,GAAG,CAAC,GAAG,EAAC,GAAG,CAAC,CAAC,CAAC;IAE1C,wDAAwD;IACxD,oCAAoC;IACpC,uBAAuB;IACvB,mBAAmB;IACnB,mBAAmB;IACnB,iBAAiB;IACjB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC;IACrB,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,wDAAwD;IAExD,wDAAwD;IACxD,oBAAoB;IACpB,oBAAoB;IACpB,2BAA2B;IAC3B,2BAA2B;IAC3B,yBAAyB;IACzB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,EAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,EAAC,GAAG,CAAC,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,wDAAwD;IAExD,wDAAwD;IACxD,wCAAwC;IACxC,yCAAyC;IACzC,+BAA+B;IAC/B,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACpB,wDAAwD;IAExD,wDAAwD;IACxD,mBAAmB;IACnB,wBAAwB;IACxB,2BAA2B;IAC3B,yBAAyB;IACzB,oBAAoB;IACpB,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACpB,wDAAwD;IAGxD,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,iEAAiE;IACjE,SAAS;IACT,0BAA0B;IAC1B,4DAA4D;IAC5D,8BAA8B;IAC9B,mDAAmD;IACnD,sBAAsB;IACtB,gCAAgC;IAChC,wCAAwC;IACxC,2CAA2C;IAC3C,mDAAmD;IACnD,4CAA4C;IAC5C,iDAAiD;IACjD,kCAAkC;IAClC,8BAA8B;IAC9B,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,GAAG,CAAC,GAAG,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACpG,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAC,EAAE,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAC,EAAE,CAAC,CAAC,EAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEjD,OAAO;QACH,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACnB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC/B,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACf,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QAC3B,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;KAC1C,CAAC;AACN,CAAC;AAGD,OAAO,EAAE,0BAA0B,EAAE,CAAA"}
1
+ {"version":3,"file":"dd-get-medial-point-coeffs-bez3.js","sourceRoot":"","sources":["../../../src/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.ts"],"names":[],"mappings":"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"}
package/node/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export type { PointOnShape } from './point-on-shape/point-on-shape.js';
7
7
  export type { Circle } from './geometry/circle.js';
8
8
  export type { CurvePiece } from './mat/curve-piece.js';
9
9
  export type { Timing } from './debug/debug.js';
10
- export type { Debug } from './debug/debug.js';
10
+ export type { Debug, Elems } from './debug/debug.js';
11
11
  export type { MatOptions } from './find-mat/mat-options.js';
12
12
  export { floydWarshall } from './floyd-warshall/floyd-warshall.js';
13
13
  export { CpNodeFs } from './cp-node/cp-node-fs.js';
@@ -33,7 +33,8 @@ export { getSharpCornersOnLoop } from './find-mat/get-sharp-corners.js';
33
33
  export { getFor2ProngsOnLoop } from './find-mat/get-for-2-prongs-on-loop.js';
34
34
  export { getPotentialClosestPointsOnCurveCertified } from './closest-boundary-point/get-potential-closest-points-on-curve-certified.js';
35
35
  export { getCloseBoundaryPointsCertified } from './closest-boundary-point/get-close-boundary-points-certified.js';
36
- export { getPartialMeta } from './find-mat/get-meta.js';
36
+ export { cloneMat } from './mat/clone-mat.js';
37
+ export { cloneMeta } from './mat/clone-meta.js';
37
38
  export { findAndAddHoleClosing2Prongs } from './find-2-prong/find-and-add-hole-closing-2-prongs.js';
38
39
  export { reconstructFromMats } from './reconstruct-from-mat/reconstruct-from-mat.js';
39
40
  export { getOsculatingCircle } from './point-on-shape/get-osculating-circle.js';
package/node/index.js CHANGED
@@ -23,7 +23,8 @@ export { getSharpCornersOnLoop } from './find-mat/get-sharp-corners.js';
23
23
  export { getFor2ProngsOnLoop } from './find-mat/get-for-2-prongs-on-loop.js';
24
24
  export { getPotentialClosestPointsOnCurveCertified } from './closest-boundary-point/get-potential-closest-points-on-curve-certified.js';
25
25
  export { getCloseBoundaryPointsCertified } from './closest-boundary-point/get-close-boundary-points-certified.js';
26
- export { getPartialMeta } from './find-mat/get-meta.js';
26
+ export { cloneMat } from './mat/clone-mat.js';
27
+ export { cloneMeta } from './mat/clone-meta.js';
27
28
  export { findAndAddHoleClosing2Prongs } from './find-2-prong/find-and-add-hole-closing-2-prongs.js';
28
29
  export { reconstructFromMats } from './reconstruct-from-mat/reconstruct-from-mat.js';
29
30
  export { getOsculatingCircle } from './point-on-shape/get-osculating-circle.js';
package/node/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Mat } from "./mat.js";
2
+ /**
3
+ * Returns a deep clone of the given `Mat` (its `CpNode`s are cloned and its
4
+ * `meta` rebuilt for the clones; the boundary loops are shared).
5
+ *
6
+ * @param mat the `Mat` to clone
7
+ */
8
+ declare function cloneMat(mat: Mat): Mat;
9
+ export { cloneMat };
@@ -0,0 +1,17 @@
1
+ import { clone } from "../cp-node/fs/clone.js";
2
+ import { cloneMeta } from "./clone-meta.js";
3
+ /**
4
+ * Returns a deep clone of the given `Mat` (its `CpNode`s are cloned and its
5
+ * `meta` rebuilt for the clones; the boundary loops are shared).
6
+ *
7
+ * @param mat the `Mat` to clone
8
+ */
9
+ function cloneMat(mat) {
10
+ const cpNode = clone(mat.cpNode);
11
+ return {
12
+ cpNode,
13
+ meta: cloneMeta(cpNode, mat.meta)
14
+ };
15
+ }
16
+ export { cloneMat };
17
+ //# sourceMappingURL=clone-mat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone-mat.js","sourceRoot":"","sources":["../../src/mat/clone-mat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C;;;;;GAKG;AACH,SAAS,QAAQ,CACT,GAAQ;IAEZ,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO;QACH,MAAM;QACN,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC;KACpC,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { MatMeta } from './mat-meta.js';
2
+ import type { CpNode } from '../cp-node/cp-node.js';
3
+ /**
4
+ * Returns a clone of the given `MatMeta` for the given (already cloned)
5
+ * `CpNode`, i.e. with `cpTrees` rebuilt from the clone and a fresh
6
+ * `lastInsertId`.
7
+ *
8
+ * @param cpNode the (cloned) `CpNode` the meta is for
9
+ * @param meta the `MatMeta` to clone
10
+ */
11
+ declare function cloneMeta(cpNode: CpNode, meta: MatMeta): MatMeta;
12
+ export { cloneMeta };
@@ -0,0 +1,24 @@
1
+ import { createNewCpTrees } from './create-new-cp-trees.js';
2
+ /**
3
+ * Returns a clone of the given `MatMeta` for the given (already cloned)
4
+ * `CpNode`, i.e. with `cpTrees` rebuilt from the clone and a fresh
5
+ * `lastInsertId`.
6
+ *
7
+ * @param cpNode the (cloned) `CpNode` the meta is for
8
+ * @param meta the `MatMeta` to clone
9
+ */
10
+ function cloneMeta(cpNode, meta) {
11
+ const {
12
+ // pointToCpNode,
13
+ lastInsertId, cpTrees, ...rest } = meta;
14
+ const cpTrees_ = createNewCpTrees(cpNode);
15
+ const lastInsertId_ = { id: lastInsertId.id };
16
+ return {
17
+ cpTrees: cpTrees_,
18
+ lastInsertId: lastInsertId_,
19
+ // pointToCpNode,
20
+ ...rest
21
+ };
22
+ }
23
+ export { cloneMeta };
24
+ //# sourceMappingURL=clone-meta.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone-meta.js","sourceRoot":"","sources":["../../src/mat/clone-meta.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;;;;GAOG;AACH,SAAS,SAAS,CACV,MAAc,EACd,IAAa;IAEjB,MAAM;IACF,iBAAiB;IACjB,YAAY,EACZ,OAAO,EACP,GAAG,IAAI,EACV,GAAG,IAAI,CAAC;IAET,MAAM,QAAQ,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,CAAC;IAE9C,OAAO;QACH,OAAO,EAAE,QAAQ;QACjB,YAAY,EAAE,aAAa;QAC3B,iBAAiB;QACjB,GAAG,IAAI;KACV,CAAA;AACL,CAAC;AAGD,OAAO,EAAE,SAAS,EAAE,CAAA"}
@@ -3,6 +3,11 @@ import type { CurvePiece } from './curve-piece.js';
3
3
  /**
4
4
  * Returns the ordered bezier pieces between the two given `CpNode`s.
5
5
  *
6
+ * * NOTE: an earlier version 'stitched' pieces together at hole closers and
7
+ * loop endpoints to avoid duplicate antipodal points later; this was removed
8
+ * (duplicates are now checked for in `find2Prong`) - see the git history
9
+ * before 2026-10 for that code.
10
+ *
6
11
  * @param cpNodes - An ordered pair that represents the start and end points of
7
12
  * the boundary piece
8
13
  *
@@ -2,6 +2,11 @@ import { comparePoss } from '../point-on-shape/compare-poss.js';
2
2
  /**
3
3
  * Returns the ordered bezier pieces between the two given `CpNode`s.
4
4
  *
5
+ * * NOTE: an earlier version 'stitched' pieces together at hole closers and
6
+ * loop endpoints to avoid duplicate antipodal points later; this was removed
7
+ * (duplicates are now checked for in `find2Prong`) - see the git history
8
+ * before 2026-10 for that code.
9
+ *
5
10
  * @param cpNodes - An ordered pair that represents the start and end points of
6
11
  * the boundary piece
7
12
  *
@@ -11,12 +16,6 @@ function getBoundaryPieceBeziers(cpNodes) {
11
16
  let cpThis = cpNodes[0];
12
17
  const cpEnd = cpNodes[1];
13
18
  const curvePieces = [];
14
- // NOTE❗ Currently removed stichables; we're just checking for duplicates
15
- // later in `find2Prong`; KEEP for possible future use.
16
- // We have to stich curves together if they're at a hole closer or at the
17
- // endpoints of a loop to avoid duplicates later within the code; the map
18
- // is from curves
19
- // const stichables: Map<Curve, number[]> = new Map();
20
19
  // As opposed to going around the circle and taking the last exit
21
20
  let goStraight = true;
22
21
  do {
@@ -26,27 +25,6 @@ function getBoundaryPieceBeziers(cpNodes) {
26
25
  const curveNext = posNext.curve;
27
26
  if (!goStraight) {
28
27
  goStraight = true;
29
- // NOTE❗ Currently removed stichables; we're just checking for duplicates
30
- // later in `find2Prong`; KEEP for possible future use.
31
- // const { loop: loopThis } = curveThis;
32
- // const cpPrevOnCircle = cpThis.prevOnCircle;
33
- // const curvePrevOnCircle = cpPrevOnCircle.pointOnShape.curve;
34
- // const { loop: loopNext } = cpPrevOnCircle.pointOnShape.curve;
35
- // if (loopThis !== loopNext) {
36
- // let idxsThis = stichables.get(curveThis);
37
- // if (idxsThis === undefined) {
38
- // idxsThis = [];
39
- // stichables.set(curveThis, idxsThis);
40
- // }
41
- // idxsThis.push(curvePieces.length - 1); // last `CurvePiece` idx
42
- // let idxsNext = stichables.get(curvePrevOnCircle);
43
- // if (idxsNext === undefined) {
44
- // idxsNext = [];
45
- // stichables.set(curvePrevOnCircle, idxsNext);
46
- // }
47
- // idxsNext.push(curvePieces.length); // upcoming `CurvePiece` idx
48
- // }
49
- // cpThis = cpPrevOnCircle; // take last exit
50
28
  cpThis = cpThis.prevOnCircle; // take last exit
51
29
  continue;
52
30
  }
@@ -72,78 +50,14 @@ function getBoundaryPieceBeziers(cpNodes) {
72
50
  // 2. `this` comes after `next` by ordering
73
51
  // so split at t = 1.
74
52
  if (curveThis.loop === curveNext.loop) {
75
- const initialCurvePiece = {
53
+ curvePieces.push({
76
54
  curve: curveThis, ts: [posThis.t, 1]
77
- };
78
- curvePieces.push(initialCurvePiece);
55
+ });
79
56
  // Fill in any curves skipped between the two points.
80
57
  addSkippedBeziers(curvePieces, curveThis, curveNext, posNext.t);
81
- // NOTE❗ Currently removed stichables; we're just checking for duplicates
82
- // later in `find2Prong`; KEEP for possible future use.
83
- // const finalCurvePiece = curvePieces[curvePieces.length - 1];
84
- // if (initialCurvePiece.curve === finalCurvePiece!.curve) {
85
- // const { ts: tsS } = initialCurvePiece;
86
- // const { ts: tsE } = finalCurvePiece!;
87
- // // If it is a closed loop we must join the endpoints to prevent duplicate
88
- // // antipodal points later
89
- // if (tsS[0] === tsE[1]) {
90
- // initialCurvePiece.ts[0] = tsE[0];
91
- // if (curvePieces.length > 1) {
92
- // curvePieces.pop();
93
- // }
94
- // // console.log('was inner closed loop')
95
- // }
96
- // }
97
58
  }
98
59
  cpThis = cpThis.next;
99
60
  } while (cpThis !== cpEnd);
100
- // NOTE❗ Currently removed stichables; we're just checking for duplicates
101
- // later in `find2Prong`; KEEP for possible future use.
102
- // if (stichables.size > 0) {
103
- // for (const [loop,idxs] of stichables.entries()) {
104
- // if (idxs.length === 2) {
105
- // const curvePieceS = curvePieces[idxs[0]]!;
106
- // const curvePieceE = curvePieces[idxs[1]]!;
107
- // if (curvePieceS === undefined || curvePieceE === undefined) {
108
- // console.log(curvePieceS);
109
- // console.log(curvePieceE);
110
- // continue;
111
- // }
112
- // const { curve: curveS, ts: tsS } = curvePieceS;
113
- // const { curve: curveE, ts: tsE } = curvePieceE;
114
- // if (curveS !== curveE) {
115
- // continue;
116
- // }
117
- // // If it is a closed loop we must join the endpoints to prevent duplicate
118
- // // antipodal points later
119
- // if (tsS[0] === tsE[1]) {
120
- // curvePieceS.ts[0] = tsE[0];
121
- // // console.log('was closed loop 1')
122
- // } else if (tsE[0] === tsS[1]) {
123
- // curvePieceS.ts[1] = tsE[1];
124
- // // console.log('was closed loop 2')
125
- // }
126
- // if (idxs[0] !== idxs[1]) {
127
- // curvePieces[idxs[1]] = undefined;
128
- // }
129
- // }
130
- // }
131
- // }
132
- // NOTE❗ The below endcurve check is not enough for specific cases involving
133
- // multiple hole closers; KEEP for now but must use stichables instead
134
- // if (curvePieces[0]!.curve === curvePieces[curvePieces.length - 1]!.curve) {
135
- // const { ts: tsS } = curvePieces[0]!;
136
- // const { ts: tsE } = curvePieces[curvePieces.length - 1]!;
137
- // // If it is a closed loop we must join the endpoints to prevent duplicate
138
- // // antipodal points later
139
- // if (tsS[0] === tsE[1]) {
140
- // curvePieces[0]!.ts[0] = tsE[0];
141
- // if (curvePieces.length > 1) {
142
- // curvePieces.pop();
143
- // }
144
- // // console.log('was closed loop')
145
- // }
146
- // }
147
61
  return curvePieces;
148
62
  }
149
63
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"get-boundary-piece-beziers.js","sourceRoot":"","sources":["../../src/mat/get-boundary-piece-beziers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-boundary-piece-beziers.js","sourceRoot":"","sources":["../../src/mat/get-boundary-piece-beziers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAGhE;;;;;;;;;;;;GAYG;AACH,SAAS,uBAAuB,CACxB,OAAwB;IAE5B,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,KAAK,GAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IAE1B,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,iEAAiE;IACjE,IAAI,UAAU,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC;QACA,MAAM,OAAO,GAAG,MAAM,CAAM,YAAY,CAAC;QACzC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACzC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;QAChC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;QAEhC,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,UAAU,GAAG,IAAI,CAAC;YAClB,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAE,iBAAiB;YAChD,SAAS;QACb,CAAC;QAED,UAAU,GAAG,KAAK,CAAC;QAEnB,IAAI,SAAS,KAAK,SAAS;YACvB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAEpC,kEAAkE;YAClE,iEAAiE;YACjE,mEAAmE;YACnE,oEAAoE;YACpE,8DAA8D;YAC9D,kEAAkE;YAClE,iEAAiE;YACjE,mCAAmC;YACnC,WAAW,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;aAC/C,CAAC,CAAC;YAEH,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;YACrB,SAAS;QACb,CAAC;QAED,uDAAuD;QACvD,oDAAoD;QACpD,2CAA2C;QAC3C,qBAAqB;QAErB,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACpC,WAAW,CAAC,IAAI,CAAC;gBACb,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;aACvC,CAAC,CAAC;YAEH,qDAAqD;YACrD,iBAAiB,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,CAAC,QAAQ,MAAM,KAAK,KAAK,EAAE;IAE3B,OAAO,WAAW,CAAC;AACvB,CAAC;AAGD;;;GAGG;AACH,SAAS,iBAAiB,CAClB,WAAyB,EACzB,UAAiB,EACjB,QAAe,EACf,EAAU;IAEd,gEAAgE;IAChE,IAAI,SAAS,GAAG,UAAU,CAAC;IAC3B,GAAG,CAAC;QACA,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;QAC3B,MAAM,IAAI,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,WAAW,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC,QAAQ,SAAS,KAAK,QAAQ,EAAE;AACrC,CAAC;AAGD,OAAO,EAAE,uBAAuB,EAAE,CAAA"}
@@ -1,8 +1,9 @@
1
1
  import { distanceBetween, toUnitVector, fromTo, dot } from 'flo-vector2d';
2
2
  import { getCpNodeNeighbors } from './get-cp-node-neighbors.js';
3
+ const { cos, PI: π } = Math;
3
4
  /** @internal */
4
5
  const DEGREES = 1;
5
- const ANGLE_THRESHOLD = Math.cos(DEGREES * (Math.PI / 180));
6
+ const ANGLE_THRESHOLD = cos(DEGREES * (π / 180));
6
7
  /**
7
8
  * @internal
8
9
  * If another `CpNode` is close by (to the given implied (via `pos`, `order` and
@@ -1 +1 @@
1
- {"version":3,"file":"get-closeby-cp-if-exist.js","sourceRoot":"","sources":["../../src/mat/get-closeby-cp-if-exist.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAGhE,gBAAgB;AAChB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAG5D;;;;;;;;;;GAUG;AACH,SAAS,mBAAmB,CACpB,IAAa,EACb,GAAoB,EACpB,MAAc,EACd,KAAa,EACb,MAAc,EACd,aAAsB;IAE1B,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IAE3C,MAAM,kBAAkB,GAAG,CAAC,IAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAE,sCAAsC;IAC9F,MAAM,oBAAoB,GAAG,CAAC,IAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,EAAE,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;IACrB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QACD,iBAAiB;QAEjB,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;QAE5B,IAAI,QAAQ,GAAG,eAAe;YAC1B,CAAC,CAAC,GAAG,oBAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAEnD,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;gBACtB,4BAA4B;gBAC5B,kBAAkB;gBAClB,uCAAuC;gBACvC,qBAAqB;YACzB,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAGD,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
1
+ {"version":3,"file":"get-closeby-cp-if-exist.js","sourceRoot":"","sources":["../../src/mat/get-closeby-cp-if-exist.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;AAG5B,gBAAgB;AAChB,MAAM,OAAO,GAAG,CAAC,CAAC;AAClB,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAC,GAAG,CAAC,CAAC,CAAC;AAG/C;;;;;;;;;;GAUG;AACH,SAAS,mBAAmB,CACpB,IAAa,EACb,GAAoB,EACpB,MAAc,EACd,KAAa,EACb,MAAc,EACd,aAAsB;IAE1B,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;IAE3C,MAAM,kBAAkB,GAAG,CAAC,IAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAE,sCAAsC;IAC9F,MAAM,oBAAoB,GAAG,CAAC,IAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAExD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChE,IAAI,CAAC,GAAG,EAAE,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAEhC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC;IACrB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,kBAAkB,EAAE,CAAC;YACzB,SAAS;QACb,CAAC;QACD,iBAAiB;QAEjB,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,EAAE,EAAC,EAAE,CAAC,CAAC;QAE5B,IAAI,QAAQ,GAAG,eAAe;YAC1B,CAAC,CAAC,GAAG,oBAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAEnD,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;gBACtB,4BAA4B;gBAC5B,kBAAkB;gBAClB,uCAAuC;gBACvC,qBAAqB;YACzB,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC;AACrB,CAAC;AAGD,OAAO,EAAE,mBAAmB,EAAE,CAAA"}
@@ -1,3 +1,9 @@
1
1
  import type { CpNode } from '../cp-node/cp-node.js';
2
+ /**
3
+ * Returns the `CpNode` on a 3-prong (or higher) MAT vertex with the largest
4
+ * maximal disk radius, or `undefined` if there is none.
5
+ *
6
+ * @param cpNode any `CpNode` on the MAT
7
+ */
2
8
  declare function getLargest3Prong(cpNode: CpNode): CpNode | undefined;
3
9
  export { getLargest3Prong };
@@ -1,16 +1,19 @@
1
1
  import { getAllOnLoop } from '../cp-node/fs/get-all-on-loop.js';
2
2
  import { getRealProngCount } from '../cp-node/fs/get-real-prong-count.js';
3
+ import { getLargestOf } from './get-largest-vertex.js';
4
+ /**
5
+ * Returns the `CpNode` on a 3-prong (or higher) MAT vertex with the largest
6
+ * maximal disk radius, or `undefined` if there is none.
7
+ *
8
+ * @param cpNode any `CpNode` on the MAT
9
+ */
3
10
  function getLargest3Prong(cpNode) {
4
11
  const cpNodes = getAllOnLoop(cpNode)
5
12
  .filter(cpNode => getRealProngCount(cpNode) >= 3);
6
13
  if (cpNodes.length === 0) {
7
14
  return undefined;
8
15
  }
9
- return cpNodes.reduce(function (maxCpNode, cpNode) {
10
- return maxCpNode.pointOnShape.circle.radius >= cpNode.pointOnShape.circle.radius
11
- ? maxCpNode
12
- : cpNode;
13
- }, cpNodes[0]);
16
+ return getLargestOf(cpNodes);
14
17
  }
15
18
  export { getLargest3Prong };
16
19
  //# sourceMappingURL=get-largest-3-prong.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-largest-3-prong.js","sourceRoot":"","sources":["../../src/mat/get-largest-3-prong.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAG1E,SAAS,gBAAgB,CACjB,MAAc;IAElB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;SAC/B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAE/C,OAAO,OAAO,CAAC,MAAM,CAAC,UAAS,SAAiB,EAAE,MAAc;QAC5D,OAAO,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM;YAC5E,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAA;IAChB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"get-largest-3-prong.js","sourceRoot":"","sources":["../../src/mat/get-largest-3-prong.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD;;;;;GAKG;AACH,SAAS,gBAAgB,CACjB,MAAc;IAElB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC;SAC/B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAC,OAAO,SAAS,CAAC;IAAC,CAAC;IAE/C,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
@@ -1,3 +1,17 @@
1
1
  import type { CpNode } from '../cp-node/cp-node.js';
2
+ /**
3
+ * Returns the `CpNode` (of the given ones) with the largest maximal disk
4
+ * radius (the first one in case of a tie).
5
+ *
6
+ * @param cpNodes a non-empty array of `CpNode`s
7
+ *
8
+ * @internal
9
+ */
10
+ declare function getLargestOf(cpNodes: CpNode[]): CpNode;
11
+ /**
12
+ * Returns the `CpNode` on the MAT with the largest maximal disk radius.
13
+ *
14
+ * @param cpNode any `CpNode` on the MAT
15
+ */
2
16
  declare function getLargestVertex(cpNode: CpNode): CpNode;
3
- export { getLargestVertex };
17
+ export { getLargestVertex, getLargestOf };
@@ -1,11 +1,24 @@
1
1
  import { getAllOnLoop } from '../cp-node/fs/get-all-on-loop.js';
2
+ /**
3
+ * Returns the `CpNode` (of the given ones) with the largest maximal disk
4
+ * radius (the first one in case of a tie).
5
+ *
6
+ * @param cpNodes a non-empty array of `CpNode`s
7
+ *
8
+ * @internal
9
+ */
10
+ function getLargestOf(cpNodes) {
11
+ return cpNodes.reduce((maxCpNode, cpNode) => maxCpNode.pointOnShape.circle.radius >= cpNode.pointOnShape.circle.radius
12
+ ? maxCpNode
13
+ : cpNode);
14
+ }
15
+ /**
16
+ * Returns the `CpNode` on the MAT with the largest maximal disk radius.
17
+ *
18
+ * @param cpNode any `CpNode` on the MAT
19
+ */
2
20
  function getLargestVertex(cpNode) {
3
- const cpNodes = getAllOnLoop(cpNode);
4
- return cpNodes.reduce(function (maxCpNode, cpNode) {
5
- return maxCpNode.pointOnShape.circle.radius >= cpNode.pointOnShape.circle.radius
6
- ? maxCpNode
7
- : cpNode;
8
- }, cpNodes[0]);
21
+ return getLargestOf(getAllOnLoop(cpNode));
9
22
  }
10
- export { getLargestVertex };
23
+ export { getLargestVertex, getLargestOf };
11
24
  //# sourceMappingURL=get-largest-vertex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-largest-vertex.js","sourceRoot":"","sources":["../../src/mat/get-largest-vertex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE,SAAS,gBAAgB,CACjB,MAAc;IAElB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAErC,OAAO,OAAO,CAAC,MAAM,CAAC,UAAS,SAAiB,EAAE,MAAc;QAC5D,OAAO,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM;YAC5E,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,MAAM,CAAA;IAChB,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"get-largest-vertex.js","sourceRoot":"","sources":["../../src/mat/get-largest-vertex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAGhE;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,OAAiB;IACnC,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CACxC,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM;QACrE,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CACf,CAAC;AACN,CAAC;AAGD;;;;GAIG;AACH,SAAS,gBAAgB,CACjB,MAAc;IAElB,OAAO,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,CAAC;AAGD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * A point `q` on a piecewise bezier curve at parameter `t` of piece `k`
3
+ * together with its distance `d` to some other point.
4
+ *
5
+ * @internal
6
+ */
7
+ interface Foot {
8
+ d: number;
9
+ q: number[];
10
+ k: number;
11
+ t: number;
12
+ }
13
+ /**
14
+ * Returns the closest point on the piecewise bezier curve given by `curves`
15
+ * to the point `p` (as a `Foot`), i.e. the piece-wise minimum of the
16
+ * (certified) `closestPointOnBezier` of `flo-bezier3`.
17
+ *
18
+ * @param p the point
19
+ * @param curves the pieces of the piecewise bezier curve
20
+ *
21
+ * @internal
22
+ */
23
+ declare function closestPointOnCurves(p: number[], curves: number[][][]): Foot;
24
+ /**
25
+ * Returns the distance from the point `p` to the piecewise bezier curve given
26
+ * by `curves` (i.e. the minimum over the pieces of the distance to the piece).
27
+ *
28
+ * @param p the point
29
+ * @param curves the pieces of the piecewise bezier curve
30
+ *
31
+ * @internal
32
+ */
33
+ declare function distanceToCurves(p: number[], curves: number[][][]): number;
34
+ /**
35
+ * Returns `true` if the one-sided Hausdorff distance from the bezier curve `A`
36
+ * to the piecewise bezier curve `B` exceeds `tolerance` and `false` otherwise.
37
+ *
38
+ * * this is a *decision procedure* and is thus much cheaper than computing the
39
+ * distance (e.g. via `hausdorffDistanceOneSided` from `flo-bezier3`) and then
40
+ * comparing it: it stops as soon as either a point on `A` further than
41
+ * `tolerance` from `B` is found (a certified *lower* bound exceeding the
42
+ * tolerance) or every piece of `A` is certified to be within `tolerance`
43
+ * (a certified *upper* bound)
44
+ * * `A` is bisected into parameter intervals; the upper bound on an interval
45
+ * `[tS,tE]` is the smaller of
46
+ * * `(hS + hE + L)/2` where `hS`, `hE` are (upper bounds on) the
47
+ * distances from its endpoints to `B` and `L` is the control polygon
48
+ * length of `A` restricted to the interval (an upper bound on its arc
49
+ * length): any point on the interval is within `L` of both endpoints so
50
+ * its distance to `B` is at most `min(hS + l, hE + (L - l))` with `l`
51
+ * the arc length from the start, maximized at `(hS + hE + L)/2`
52
+ * * the maximum distance from the foot (on `B`) of either endpoint to the
53
+ * control points of `A` restricted to the interval (the sub-curve lies
54
+ * within the convex hull of its control points, within which the
55
+ * distance to a fixed point is maximized at a vertex)
56
+ * * the distances from sample points on `A` to `B` are found cheaply by
57
+ * Newton iteration from the feet of the neighboring samples - these are upper
58
+ * bounds (any point on `B` gives one) which suffice for certifying the
59
+ * acceptance of an interval; only when such a bound exceeds the tolerance is
60
+ * the certified (and expensive) closest point computed to decide whether the
61
+ * tolerance is really exceeded
62
+ * * `B` need not be smooth, nor need its pieces be connected
63
+ * * the result is approximate only to the extent that the floating point
64
+ * evaluations are, i.e. a decision is only taken once it is certain up to
65
+ * roundoff
66
+ *
67
+ * @param A the 'from' bezier curve given by its control points
68
+ * @param B the 'to' piecewise bezier curve given as an array of bezier curves
69
+ * @param tolerance the distance to compare against
70
+ * @param maxIterations the maximum number of interval bisections (each
71
+ * costing one cheap closest point calculation) before giving up, in which
72
+ * case `true` is returned (the conservative answer for simplification
73
+ * purposes); defaults to `1000` (curves only just within tolerance may
74
+ * need many bisections, especially where they run nearly parallel to `B`)
75
+ *
76
+ * @internal
77
+ */
78
+ declare function hausdorffDistanceOneSidedExceeds(A: number[][], B: number[][][], tolerance: number, maxIterations?: number): boolean;
79
+ export { hausdorffDistanceOneSidedExceeds, distanceToCurves, closestPointOnCurves };