flo-mat 4.1.5 → 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 (356) 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/fs/get-all-on-loop-by-loop.spec.ts +55 -0
  4. package/__tests__/cp-node/fs/get-angle-between-mat-curves.spec.ts +39 -3
  5. package/__tests__/cp-node/fs/get-boundary-bezier-parts-to-next.spec.ts +87 -3
  6. package/__tests__/cp-node/fs/get-boundary-beziers-between.spec.ts +68 -3
  7. package/__tests__/cp-node/fs/get-boundary-beziers-to-next.spec.ts +41 -3
  8. package/__tests__/cp-node/fs/get-boundary-distance-to-next.spec.ts +20 -3
  9. package/__tests__/cp-node/fs/get-branch-beziers.spec.ts +42 -3
  10. package/__tests__/cp-node/fs/get-branch.spec.ts +60 -3
  11. package/__tests__/cp-node/fs/get-cp-node-ordering.spec.ts +19 -3
  12. package/__tests__/cp-node/fs/get-distance-to-next.spec.ts +37 -4
  13. package/__tests__/cp-node/fs/get-edge-direction.spec.ts +50 -3
  14. package/__tests__/cp-node/fs/get-first-exit.spec.ts +78 -3
  15. package/__tests__/cp-node/fs/get-hole-closers.spec.ts +32 -3
  16. package/__tests__/cp-node/fs/get-implied-boundary-bezier-between.spec.ts +48 -3
  17. package/__tests__/cp-node/fs/get-mat-curve-between.spec.ts +77 -3
  18. package/__tests__/cp-node/fs/get-mat-curve-to-next.spec.ts +17 -4
  19. package/__tests__/cp-node/fs/get-mat-curves-between.spec.ts +38 -3
  20. package/__tests__/cp-node/fs/get-salience.spec.ts +68 -3
  21. package/__tests__/cp-node/fs/get-vertex-forward-children.spec.ts +40 -3
  22. package/__tests__/cp-node/fs/insert-cp-node.spec.ts +87 -3
  23. package/__tests__/cp-node/fs/is-special.spec.ts +1 -1
  24. package/__tests__/cp-node/fs/remove-cp-node.spec.ts +42 -3
  25. package/__tests__/find-2-prong/calc-seperation-tolerance.spec.ts +46 -0
  26. package/__tests__/find-2-prong/get-medial/get-closest-points.spec.ts +1 -1
  27. package/__tests__/floyd-warshall/get-graph.spec.ts +100 -0
  28. package/__tests__/get-mats-with-hole.ts +28 -0
  29. package/__tests__/get-mats1.spec.ts +61 -0
  30. package/__tests__/get-mats1.ts +75 -67
  31. package/__tests__/helpers/cp-node-by-id.ts +27 -0
  32. package/__tests__/helpers/expect-point-close.ts +42 -0
  33. package/__tests__/mat/hausdorff-distance-one-sided-exceeds.spec.ts +129 -0
  34. package/__tests__/mat/simplify-mat.spec.ts +85 -0
  35. package/__tests__/reconstruct-from-mat/reconstruct-from-mat.spec.ts +39 -0
  36. package/__tests__/specific-cases/test-svgs/achispado.svg +14 -0
  37. package/__tests__/utils/get-beziers-from-tangents.spec.ts +142 -0
  38. package/browser/index.js +13944 -10307
  39. package/browser/index.min.js +1 -1
  40. package/node/closest-boundary-point/cull-curve-pieces.d.ts +21 -0
  41. package/node/closest-boundary-point/cull-curve-pieces.js +40 -0
  42. package/node/closest-boundary-point/cull-curve-pieces.js.map +1 -0
  43. package/node/closest-boundary-point/get-close-boundary-points-certified.js +5 -2
  44. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
  45. package/node/closest-boundary-point/get-endpoint-info.d.ts +39 -0
  46. package/node/closest-boundary-point/get-endpoint-info.js +78 -0
  47. package/node/closest-boundary-point/get-endpoint-info.js.map +1 -0
  48. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +5 -19
  49. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -1
  50. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +17 -5
  51. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +37 -50
  52. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -1
  53. package/node/corner/get-corner.d.ts +18 -1
  54. package/node/corner/get-corner.js +8 -1
  55. package/node/corner/get-corner.js.map +1 -1
  56. package/node/corner/get-interface-ccw.js.map +1 -1
  57. package/node/cp-node/cp-node.d.ts +4 -3
  58. package/node/cp-node/fs/get-all-on-loop-by-loop.js +0 -4
  59. package/node/cp-node/fs/get-all-on-loop-by-loop.js.map +1 -1
  60. package/node/cp-node/fs/get-angle-between-mat-curves.js +6 -4
  61. package/node/cp-node/fs/get-angle-between-mat-curves.js.map +1 -1
  62. package/node/cp-node/fs/get-boundary-beziers-between.d.ts +6 -4
  63. package/node/cp-node/fs/get-boundary-beziers-between.js +6 -4
  64. package/node/cp-node/fs/get-boundary-beziers-between.js.map +1 -1
  65. package/node/cp-node/fs/get-branch-beziers.d.ts +2 -1
  66. package/node/cp-node/fs/get-branch-beziers.js +3 -2
  67. package/node/cp-node/fs/get-branch-beziers.js.map +1 -1
  68. package/node/cp-node/fs/get-branch.js +1 -2
  69. package/node/cp-node/fs/get-branch.js.map +1 -1
  70. package/node/cp-node/fs/get-distance-to-next.js +4 -2
  71. package/node/cp-node/fs/get-distance-to-next.js.map +1 -1
  72. package/node/cp-node/fs/get-first-exit.d.ts +7 -3
  73. package/node/cp-node/fs/get-first-exit.js +13 -11
  74. package/node/cp-node/fs/get-first-exit.js.map +1 -1
  75. package/node/cp-node/fs/get-implied-boundary-bezier-between.d.ts +9 -1
  76. package/node/cp-node/fs/get-implied-boundary-bezier-between.js +11 -55
  77. package/node/cp-node/fs/get-implied-boundary-bezier-between.js.map +1 -1
  78. package/node/cp-node/fs/get-mat-curve-between.d.ts +4 -3
  79. package/node/cp-node/fs/get-mat-curve-between.js +5 -49
  80. package/node/cp-node/fs/get-mat-curve-between.js.map +1 -1
  81. package/node/cp-node/fs/get-mat-curve-to-next.d.ts +1 -1
  82. package/node/cp-node/fs/get-mat-curves-between.d.ts +8 -0
  83. package/node/cp-node/fs/get-mat-curves-between.js +9 -2
  84. package/node/cp-node/fs/get-mat-curves-between.js.map +1 -1
  85. package/node/cp-node/fs/get-real-prong-count.d.ts +2 -1
  86. package/node/cp-node/fs/get-real-prong-count.js +11 -5
  87. package/node/cp-node/fs/get-real-prong-count.js.map +1 -1
  88. package/node/cp-node/fs/get-salience.d.ts +10 -0
  89. package/node/cp-node/fs/get-salience.js +17 -1
  90. package/node/cp-node/fs/get-salience.js.map +1 -1
  91. package/node/cp-node/fs/is-fully-terminating.d.ts +4 -2
  92. package/node/cp-node/fs/is-fully-terminating.js +6 -15
  93. package/node/cp-node/fs/is-fully-terminating.js.map +1 -1
  94. package/node/cp-node/fs/is-on-same-loop.d.ts +1 -1
  95. package/node/cp-node/fs/is-special.d.ts +7 -0
  96. package/node/cp-node/fs/is-special.js +9 -2
  97. package/node/cp-node/fs/is-special.js.map +1 -1
  98. package/node/cp-node/fs/is-vertex.d.ts +1 -1
  99. package/node/cp-node/fs/traverse-edges.d.ts +7 -3
  100. package/node/cp-node/fs/traverse-edges.js +7 -3
  101. package/node/cp-node/fs/traverse-edges.js.map +1 -1
  102. package/node/cp-node/stringification/from-stringifyable.d.ts +2 -2
  103. package/node/cp-node/stringification/from-stringifyable.js +1 -1
  104. package/node/cp-node/stringification/from-stringifyable.js.map +1 -1
  105. package/node/cp-node/stringification/to-stringifyable.d.ts +3 -3
  106. package/node/cp-node/stringification/to-stringifyable.js +3 -3
  107. package/node/debug/debug.d.ts +26 -3
  108. package/node/debug/debug.js +16 -5
  109. package/node/debug/debug.js.map +1 -1
  110. package/node/find-2-prong/add-2-prong.js +1 -7
  111. package/node/find-2-prong/add-2-prong.js.map +1 -1
  112. package/node/find-2-prong/calc-seperation-tolerance.d.ts +28 -5
  113. package/node/find-2-prong/calc-seperation-tolerance.js +32 -89
  114. package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -1
  115. package/node/find-2-prong/find-2-prong.js +8 -10
  116. package/node/find-2-prong/find-2-prong.js.map +1 -1
  117. package/node/find-2-prong/find-and-add-2-prongs.js +2 -2
  118. package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -1
  119. package/node/find-2-prong/get-medial/get-antipodal-points.d.ts +1 -2
  120. package/node/find-2-prong/get-medial/get-antipodal-points.js +2 -3
  121. package/node/find-2-prong/get-medial/get-antipodal-points.js.map +1 -1
  122. package/node/find-2-prong/get-medial/get-closest-points.d.ts +1 -8
  123. package/node/find-2-prong/get-medial/get-closest-points.js +4 -40
  124. package/node/find-2-prong/get-medial/get-closest-points.js.map +1 -1
  125. package/node/find-2-prong/reduce-radius.d.ts +1 -1
  126. package/node/find-2-prong/reduce-radius.js +6 -3
  127. package/node/find-2-prong/reduce-radius.js.map +1 -1
  128. package/node/find-3-prong/calc-better-x.js +1 -1
  129. package/node/find-3-prong/calc-better-x.js.map +1 -1
  130. package/node/find-3-prong/find-3-prong-for-delta3s.d.ts +3 -2
  131. package/node/find-3-prong/find-3-prong-for-delta3s.js +35 -41
  132. package/node/find-3-prong/find-3-prong-for-delta3s.js.map +1 -1
  133. package/node/find-3-prong/find-3-prong.js +3 -1
  134. package/node/find-3-prong/find-3-prong.js.map +1 -1
  135. package/node/find-3-prong/find-and-add-3-prongs.js +16 -0
  136. package/node/find-3-prong/find-and-add-3-prongs.js.map +1 -1
  137. package/node/find-mat/create-initial-cp-tree.js +2 -2
  138. package/node/find-mat/create-initial-cp-tree.js.map +1 -1
  139. package/node/find-mat/find-mat.js +3 -4
  140. package/node/find-mat/find-mat.js.map +1 -1
  141. package/node/find-mat/find-mats.d.ts +6 -12
  142. package/node/find-mat/find-mats.js +10 -27
  143. package/node/find-mat/find-mats.js.map +1 -1
  144. package/node/find-mat/get-dull-corners-on-loop.js +2 -2
  145. package/node/find-mat/get-dull-corners-on-loop.js.map +1 -1
  146. package/node/find-mat/get-for-1-prongs-on-loop.js +36 -8
  147. package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -1
  148. package/node/find-mat/get-meta.d.ts +14 -4
  149. package/node/find-mat/get-meta.js +30 -24
  150. package/node/find-mat/get-meta.js.map +1 -1
  151. package/node/find-mat/get-sharp-corners.js +2 -2
  152. package/node/find-mat/get-sharp-corners.js.map +1 -1
  153. package/node/find-mat/mat-options.d.ts +2 -2
  154. package/node/floyd-warshall/get-graph.d.ts +12 -1
  155. package/node/floyd-warshall/get-graph.js +41 -38
  156. package/node/floyd-warshall/get-graph.js.map +1 -1
  157. package/node/geometry/get-bounding-box-.d.ts +16 -2
  158. package/node/geometry/get-bounding-box-.js +5 -2
  159. package/node/geometry/get-bounding-box-.js.map +1 -1
  160. package/node/geometry/get-closest-square-distance-to-rect.d.ts +3 -0
  161. package/node/geometry/get-closest-square-distance-to-rect.js +7 -5
  162. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
  163. package/node/geometry/get-closest-squared-distance-to-rotated-rect.d.ts +4 -0
  164. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js +11 -5
  165. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  166. package/node/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.js +1 -2
  167. package/node/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.js.map +1 -1
  168. package/node/index.d.ts +3 -2
  169. package/node/index.js +2 -1
  170. package/node/index.js.map +1 -1
  171. package/node/mat/clone-mat.d.ts +9 -0
  172. package/node/mat/clone-mat.js +17 -0
  173. package/node/mat/clone-mat.js.map +1 -0
  174. package/node/mat/clone-meta.d.ts +12 -0
  175. package/node/mat/clone-meta.js +24 -0
  176. package/node/mat/clone-meta.js.map +1 -0
  177. package/node/mat/get-boundary-piece-beziers.d.ts +5 -0
  178. package/node/mat/get-boundary-piece-beziers.js +7 -93
  179. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  180. package/node/mat/get-largest-3-prong.d.ts +6 -0
  181. package/node/mat/get-largest-3-prong.js +8 -5
  182. package/node/mat/get-largest-3-prong.js.map +1 -1
  183. package/node/mat/get-largest-vertex.d.ts +15 -1
  184. package/node/mat/get-largest-vertex.js +20 -7
  185. package/node/mat/get-largest-vertex.js.map +1 -1
  186. package/node/mat/hausdorff-distance-one-sided-exceeds.d.ts +79 -0
  187. package/node/mat/hausdorff-distance-one-sided-exceeds.js +251 -0
  188. package/node/mat/hausdorff-distance-one-sided-exceeds.js.map +1 -0
  189. package/node/mat/mat-meta.d.ts +0 -6
  190. package/node/mat/simplify-mat.d.ts +25 -8
  191. package/node/mat/simplify-mat.js +182 -53
  192. package/node/mat/simplify-mat.js.map +1 -1
  193. package/node/mat/trim-mat.d.ts +4 -2
  194. package/node/mat/trim-mat.js +3 -1
  195. package/node/mat/trim-mat.js.map +1 -1
  196. package/node/point-on-shape/get-boundary-tangent-line.d.ts +19 -0
  197. package/node/point-on-shape/get-boundary-tangent-line.js +33 -0
  198. package/node/point-on-shape/get-boundary-tangent-line.js.map +1 -0
  199. package/node/point-on-shape/get-osculating-circle.d.ts +6 -4
  200. package/node/point-on-shape/get-osculating-circle.js +6 -4
  201. package/node/point-on-shape/get-osculating-circle.js.map +1 -1
  202. package/node/point-on-shape/get-pos-corner.js +2 -2
  203. package/node/point-on-shape/get-pos-corner.js.map +1 -1
  204. package/node/reconstruct-from-mat/reconstruct-from-mat.js +20 -80
  205. package/node/reconstruct-from-mat/reconstruct-from-mat.js.map +1 -1
  206. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.d.ts +4 -0
  207. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.js +4 -0
  208. package/node/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.js.map +1 -1
  209. package/node/sat/cull.d.ts +7 -6
  210. package/node/sat/cull.js +13 -16
  211. package/node/sat/cull.js.map +1 -1
  212. package/node/sat/get-sat-culls.d.ts +12 -2
  213. package/node/sat/get-sat-culls.js +21 -16
  214. package/node/sat/get-sat-culls.js.map +1 -1
  215. package/node/svg/get-shape-bounds.d.ts +1 -12
  216. package/node/svg/get-shape-bounds.js +2 -3
  217. package/node/svg/get-shape-bounds.js.map +1 -1
  218. package/node/sweep-line/sweep-line.js.map +1 -1
  219. package/node/utils/get-beziers-from-tangents.d.ts +28 -0
  220. package/node/utils/get-beziers-from-tangents.js +92 -0
  221. package/node/utils/get-beziers-from-tangents.js.map +1 -0
  222. package/node/vertex/remove-vertex.d.ts +5 -3
  223. package/node/vertex/remove-vertex.js +5 -3
  224. package/node/vertex/remove-vertex.js.map +1 -1
  225. package/package.json +8 -8
  226. package/qv-infinite-loop.md +120 -0
  227. package/src/closest-boundary-point/cull-curve-pieces.ts +49 -0
  228. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +5 -2
  229. package/src/closest-boundary-point/get-endpoint-info.ts +96 -0
  230. package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +5 -23
  231. package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +42 -60
  232. package/src/corner/get-corner.ts +10 -1
  233. package/src/corner/get-interface-ccw.ts +2 -2
  234. package/src/cp-node/cp-node.ts +4 -3
  235. package/src/cp-node/fs/get-all-on-loop-by-loop.ts +0 -4
  236. package/src/cp-node/fs/get-angle-between-mat-curves.ts +6 -4
  237. package/src/cp-node/fs/get-boundary-beziers-between.ts +10 -8
  238. package/src/cp-node/fs/get-branch-beziers.ts +3 -2
  239. package/src/cp-node/fs/get-branch.ts +1 -2
  240. package/src/cp-node/fs/get-distance-to-next.ts +4 -2
  241. package/src/cp-node/fs/get-first-exit.ts +15 -14
  242. package/src/cp-node/fs/get-implied-boundary-bezier-between.ts +17 -69
  243. package/src/cp-node/fs/get-mat-curve-between.ts +9 -67
  244. package/src/cp-node/fs/get-mat-curves-between.ts +9 -2
  245. package/src/cp-node/fs/get-real-prong-count.ts +11 -7
  246. package/src/cp-node/fs/get-salience.ts +15 -2
  247. package/src/cp-node/fs/is-fully-terminating.ts +6 -18
  248. package/src/cp-node/fs/is-on-same-loop.ts +2 -2
  249. package/src/cp-node/fs/is-special.ts +11 -6
  250. package/src/cp-node/fs/is-vertex.ts +1 -1
  251. package/src/cp-node/fs/traverse-edges.ts +8 -4
  252. package/src/cp-node/stringification/from-stringifyable.ts +75 -75
  253. package/src/cp-node/stringification/to-stringifyable.ts +3 -3
  254. package/src/debug/debug.ts +44 -8
  255. package/src/find-2-prong/add-2-prong.ts +2 -9
  256. package/src/find-2-prong/calc-seperation-tolerance.ts +34 -115
  257. package/src/find-2-prong/find-2-prong.ts +9 -11
  258. package/src/find-2-prong/find-and-add-2-prongs.ts +2 -2
  259. package/src/find-2-prong/get-medial/get-antipodal-points.ts +1 -3
  260. package/src/find-2-prong/get-medial/get-closest-points.ts +6 -51
  261. package/src/find-2-prong/reduce-radius.ts +6 -4
  262. package/src/find-3-prong/calc-better-x.ts +2 -2
  263. package/src/find-3-prong/find-3-prong-for-delta3s.ts +197 -214
  264. package/src/find-3-prong/find-3-prong.ts +54 -51
  265. package/src/find-3-prong/find-and-add-3-prongs.ts +20 -1
  266. package/src/find-mat/create-initial-cp-tree.ts +2 -2
  267. package/src/find-mat/find-mat.ts +4 -6
  268. package/src/find-mat/find-mats.ts +83 -105
  269. package/src/find-mat/get-dull-corners-on-loop.ts +2 -2
  270. package/src/find-mat/get-for-1-prongs-on-loop.ts +40 -8
  271. package/src/find-mat/get-meta.ts +34 -39
  272. package/src/find-mat/get-sharp-corners.ts +2 -2
  273. package/src/find-mat/mat-options.ts +2 -2
  274. package/src/floyd-warshall/get-graph.ts +46 -47
  275. package/src/geometry/get-bounding-box-.ts +5 -2
  276. package/src/geometry/get-closest-square-distance-to-rect.ts +7 -7
  277. package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +12 -10
  278. package/src/get-medial-points/double-double/dd-get-medial-point-coeffs-bez3.ts +1 -2
  279. package/src/index.ts +3 -2
  280. package/src/mat/clone-mat.ts +9 -3
  281. package/src/mat/clone-meta.ts +8 -0
  282. package/src/mat/get-boundary-piece-beziers.ts +16 -117
  283. package/src/mat/get-largest-3-prong.ts +9 -6
  284. package/src/mat/get-largest-vertex.ts +25 -9
  285. package/src/mat/hausdorff-distance-one-sided-exceeds.ts +314 -0
  286. package/src/mat/mat-meta.ts +0 -9
  287. package/src/mat/simplify-mat.ts +254 -116
  288. package/src/mat/trim-mat.ts +6 -4
  289. package/src/point-on-shape/get-boundary-tangent-line.ts +36 -0
  290. package/src/point-on-shape/get-osculating-circle.ts +7 -5
  291. package/src/point-on-shape/get-pos-corner.ts +2 -2
  292. package/src/reconstruct-from-mat/reconstruct-from-mat.ts +22 -111
  293. package/src/reconstruct-from-mat/remove-sat-induced-trivial-3prongs.ts +4 -0
  294. package/src/sat/cull.ts +16 -20
  295. package/src/sat/get-sat-culls.ts +28 -23
  296. package/src/svg/get-shape-bounds.ts +2 -3
  297. package/src/sweep-line/sweep-line.ts +1 -1
  298. package/src/utils/get-beziers-from-tangents.ts +110 -0
  299. package/src/utils/map-map.ts +1 -1
  300. package/src/vertex/remove-vertex.ts +5 -3
  301. package/__tests__/cp-node/fs/get-distance-between.spec.ts +0 -7
  302. package/__tests__/cp-node/fs/get-terminating-on-circle.spec.ts +0 -24
  303. package/__tests__/cp-node/fs/is-single-3-prong.spec.ts +0 -17
  304. package/__tests__/cp-node/fs/iterate-all-on-loop.spec.ts +0 -17
  305. package/__tests__/cp-node/fs/traverse-all-forward.spec.ts +0 -14
  306. package/node/closest-boundary-point/cull-bezier-pieces-1.d.ts +0 -9
  307. package/node/closest-boundary-point/cull-bezier-pieces-1.js +0 -17
  308. package/node/closest-boundary-point/cull-bezier-pieces-1.js.map +0 -1
  309. package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +0 -13
  310. package/node/closest-boundary-point/cull-by-loose-bounding-box.js +0 -27
  311. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +0 -1
  312. package/node/closest-boundary-point/cull-by-tight-boundary-box.d.ts +0 -11
  313. package/node/closest-boundary-point/cull-by-tight-boundary-box.js +0 -27
  314. package/node/closest-boundary-point/cull-by-tight-boundary-box.js.map +0 -1
  315. package/node/cp-node/fs/find-first.d.ts +0 -10
  316. package/node/cp-node/fs/find-first.js +0 -19
  317. package/node/cp-node/fs/find-first.js.map +0 -1
  318. package/node/debug/functions/check-ordering.d.ts +0 -4
  319. package/node/debug/functions/check-ordering.js +0 -43
  320. package/node/debug/functions/check-ordering.js.map +0 -1
  321. package/node/find-2-prong/cull-bezier-pieces.d.ts +0 -13
  322. package/node/find-2-prong/cull-bezier-pieces.js +0 -43
  323. package/node/find-2-prong/cull-bezier-pieces.js.map +0 -1
  324. package/node/floyd-warshall/get-hole-closer-pairs.d.ts +0 -8
  325. package/node/floyd-warshall/get-hole-closer-pairs.js +0 -27
  326. package/node/floyd-warshall/get-hole-closer-pairs.js.map +0 -1
  327. package/node/utils/dual-set.d.ts +0 -27
  328. package/node/utils/dual-set.js +0 -55
  329. package/node/utils/dual-set.js.map +0 -1
  330. package/node/utils/tri-map.d.ts +0 -27
  331. package/node/utils/tri-map.js +0 -49
  332. package/node/utils/tri-map.js.map +0 -1
  333. package/src/closest-boundary-point/cull-bezier-pieces-1.ts +0 -36
  334. package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +0 -42
  335. package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +0 -43
  336. package/src/closest-boundary-point/get-p-from-box.ts +0 -14
  337. package/src/cp-node/fs/add-distance-from.ts +0 -49
  338. package/src/cp-node/fs/get-distance-between.ts +0 -16
  339. package/src/cp-node/fs/get-terminating-on-circle.ts +0 -24
  340. package/src/cp-node/fs/is-single-3-prong.ts +0 -15
  341. package/src/cp-node/fs/iterate-all-on-loop.ts +0 -15
  342. package/src/cp-node/fs/traverse-all-forward.ts +0 -24
  343. package/src/debug/functions/draw/draw-beziers-as-single-path.ts +0 -40
  344. package/src/debug/functions/draw/draw-disk.ts +0 -34
  345. package/src/debug/functions/draw/xmlns.ts +0 -5
  346. package/src/find-2-prong/cull-bezier-pieces.ts +0 -61
  347. package/src/find-2-prong/find-and-add-2-prong.ts +0 -30
  348. package/src/find-2-prong/get-medial/get-closest-points-d.ts +0 -213
  349. package/src/find-2-prong/x-for-debugging.ts +0 -13
  350. package/src/floyd-warshall/get-hole-closer-pairs.ts +0 -35
  351. package/src/mat/get-two-prong-type.ts +0 -13
  352. package/src/point-on-shape/is-pos-dull-corner.ts +0 -18
  353. package/src/point-on-shape/is-pos-quite-dull-corner.ts +0 -18
  354. package/src/point-on-shape/is-pos-quite-sharp-corner.ts +0 -18
  355. package/src/point-on-shape/pos-to-human-string.ts +0 -18
  356. package/src/sweep-line/are-boxes-intersecting.ts +0 -37
@@ -1 +1 @@
1
- {"version":3,"file":"from-stringifyable.js","sourceRoot":"","sources":["../../../src/cp-node/stringification/from-stringifyable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,SAAS,iBAAiB,CAClB,oBAAyC;IAE7C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhE,4EAA4E;IAC5E,yDAAyD;IACzD,6CAA6C;IAC7C,4EAA4E;IAC5E,MAAM,OAAO,GAAa,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC7C,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QACpE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC;QAEhE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAExD,MAAM,aAAa,GAAiB;YAChC,MAAM;YACN,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ;YAC1B,KAAK,EAAE,MAAM;SAChB,CAAC;QAEF,OAAO;YACH,GAAG,OAAO;YACV,EAAE,EAAE,aAAa,EAAE,cAAc;YACjC,YAAY,EAAE,aAAa;SACpB,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,oEAAoE;IACpE,4EAA4E;IAC5E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAkC,CAAC;YACzD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEnC,aAAa;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QACpC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,kEAAkE;IAClE,4EAA4E;IAC5E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAEnC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACZ,EAAE,CAAC,YAAsC,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
1
+ {"version":3,"file":"from-stringifyable.js","sourceRoot":"","sources":["../../../src/cp-node/stringification/from-stringifyable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,SAAS,iBAAiB,CAClB,oBAAyC;IAE7C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC;IAClE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhE,4EAA4E;IAC5E,yDAAyD;IACzD,6CAA6C;IAC7C,4EAA4E;IAC5E,MAAM,OAAO,GAAa,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;QAC7C,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QACpE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;QAC/C,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC;QAEhE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAExD,MAAM,aAAa,GAAiB;YAChC,MAAM;YACN,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ;YAC1B,KAAK,EAAE,MAAM;SAChB,CAAC;QAEF,OAAO;YACH,GAAG,OAAO;YACV,EAAE,EAAE,aAAa,EAAE,cAAc;YACjC,YAAY,EAAE,aAAa;SACpB,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,oEAAoE;IACpE,4EAA4E;IAC5E,MAAM,OAAO,GAAG,IAAI,GAAG,CAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAkC,CAAC;YACzD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAAC,SAAS;YAAC,CAAC;YAEnC,aAAa;YACb,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;QACpC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,kEAAkE;IAClE,4EAA4E;IAC5E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAEnC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC;QACvC,KAAK,MAAM,EAAE,IAAI,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACZ,EAAE,CAAC,YAAsC,CAAC,MAAM,GAAG,MAAM,CAAC;QAC/D,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import type { CpNodeStringifyable } from "./cp-node-stringifyable.js";
2
2
  import type { CpNode } from "../cp-node.js";
3
3
  /**
4
- * Returns a deep clone of this `CpNode`. Can be used to copy the MAT
5
- * since cloning a single `CpNode` necessarily implies cloning all
6
- * `CpNode`s on the same MAT tree.
4
+ * Returns a plain, acyclic representation of the entire MAT the given `CpNode`
5
+ * is part of (the `CpNode` edges replaced by ids and the boundary loops
6
+ * included) suitable for `JSON.stringify`; `fromStringifyable` reverses it.
7
7
  */
8
8
  declare function toStringifyable(cpNode: CpNode): CpNodeStringifyable;
9
9
  export { toStringifyable };
@@ -1,8 +1,8 @@
1
1
  import { loopToStringifyable } from "./loop-to-stringifyable.js";
2
2
  /**
3
- * Returns a deep clone of this `CpNode`. Can be used to copy the MAT
4
- * since cloning a single `CpNode` necessarily implies cloning all
5
- * `CpNode`s on the same MAT tree.
3
+ * Returns a plain, acyclic representation of the entire MAT the given `CpNode`
4
+ * is part of (the `CpNode` edges replaced by ids and the boundary loops
5
+ * included) suitable for `JSON.stringify`; `fromStringifyable` reverses it.
6
6
  */
7
7
  function toStringifyable(cpNode) {
8
8
  const cpNodes_ = [];
@@ -1,7 +1,8 @@
1
+ import type { Curve } from 'flo-boolean';
1
2
  /** @internal */
2
3
  interface Debug {
3
4
  /** Generated by debug object for later inspection */
4
- elems: {};
5
+ elems: Elems;
5
6
  timing: Timing;
6
7
  /**
7
8
  * These functions are meant to be used in the console, e.g. in the
@@ -10,6 +11,26 @@ interface Debug {
10
11
  fs: {};
11
12
  directives: Directives;
12
13
  }
14
+ /**
15
+ * Elements generated during `findMats` for later inspection (only available
16
+ * if debug has been enabled via `enableDebugForMat(true)`).
17
+ *
18
+ * The arrays are reset at the start of each `findMats` call and accumulate
19
+ * over all MATs found in that call, one entry per boundary bezier curve in the
20
+ * order the curves are encountered.
21
+ */
22
+ interface Elems {
23
+ /** The loose (axis-aligned) bounding box of each boundary bezier curve */
24
+ readonly looseBoundingBoxes: number[][][];
25
+ /** The tight (rotated) bounding box of each boundary bezier curve */
26
+ readonly tightBoundingBoxes: number[][][];
27
+ /** The bounding hull of each boundary bezier curve */
28
+ readonly boundingHulls: number[][][];
29
+ /** The curves whose end point forms a quite sharp corner with the next curve */
30
+ readonly sharpCorners: Curve[];
31
+ /** The curves whose end point forms a quite dull corner with the next curve */
32
+ readonly dullCorners: Curve[];
33
+ }
13
34
  /** @internal */
14
35
  interface Timing {
15
36
  holeClosers: number;
@@ -27,6 +48,8 @@ interface Directives {
27
48
  stopAfterThreeProngs: boolean;
28
49
  stopAfterThreeProngsNum: number;
29
50
  }
51
+ /** Returns a fresh (empty) set of debug `Elems`. */
52
+ declare function createEmptyElems(): Elems;
30
53
  declare function enableDebugForMat(debugOn: boolean): void;
31
- export type { Debug, Timing, Directives };
32
- export { enableDebugForMat };
54
+ export type { Debug, Elems, Timing, Directives };
55
+ export { enableDebugForMat, createEmptyElems };
@@ -1,13 +1,24 @@
1
+ /** Returns a fresh (empty) set of debug `Elems`. */
2
+ function createEmptyElems() {
3
+ return {
4
+ looseBoundingBoxes: [],
5
+ tightBoundingBoxes: [],
6
+ boundingHulls: [],
7
+ sharpCorners: [],
8
+ dullCorners: []
9
+ };
10
+ }
1
11
  function enableDebugForMat(debugOn) {
2
12
  if (!debugOn) {
3
- window._debug_ = undefined;
13
+ globalThis._debug_ = undefined;
4
14
  return;
5
15
  }
6
- let debug = window._debug_;
16
+ let debug = globalThis._debug_;
7
17
  debug = {
8
18
  ...debug,
9
19
  elems: {
10
- ...debug?.elems
20
+ ...debug?.elems,
21
+ ...createEmptyElems()
11
22
  },
12
23
  timing: {
13
24
  ...debug?.timing,
@@ -31,7 +42,7 @@ function enableDebugForMat(debugOn) {
31
42
  stopAfterThreeProngsNum: undefined,
32
43
  }
33
44
  };
34
- window._debug_ = debug;
45
+ globalThis._debug_ = debug;
35
46
  }
36
- export { enableDebugForMat };
47
+ export { enableDebugForMat, createEmptyElems };
37
48
  //# sourceMappingURL=debug.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/debug/debug.ts"],"names":[],"mappings":"AAqCA,SAAS,iBAAiB,CAAC,OAAgB;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACV,MAAc,CAAC,OAAO,GAAG,SAAS,CAAC;QACpC,OAAO;IACX,CAAC;IAED,IAAI,KAAK,GAAW,MAAc,CAAC,OAAO,CAAC;IAE3C,KAAK,GAAG;QACJ,GAAG,KAAK;QACR,KAAK,EAAE;YACH,GAAG,KAAK,EAAE,KAAK;SAClB;QACD,MAAM,EAAE;YACJ,GAAG,KAAK,EAAE,MAAM;YAChB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,CAAC;YACP,WAAW,EAAE,CAAC;SACjB;QACD,EAAE,EAAE;YACA,GAAG,KAAK,EAAE,EAAE;SACf;QACD,UAAU,EAAE;YACR,uBAAuB;YACvB,GAAG,KAAK,EAAE,UAAU;YACpB,oBAAoB,EAAE,KAAK;YAC3B,uBAAuB,EAAE,SAAU;YACnC,kBAAkB,EAAE,KAAK;YACzB,qBAAqB,EAAE,SAAU;YACjC,oBAAoB,EAAE,KAAK;YAC3B,uBAAuB,EAAE,SAAU;SACtC;KACJ,CAAC;IAED,MAAc,CAAC,OAAO,GAAG,KAAK,CAAC;AACpC,CAAC;AAID,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/debug/debug.ts"],"names":[],"mappings":"AA6DA,oDAAoD;AACpD,SAAS,gBAAgB;IACrB,OAAO;QACH,kBAAkB,EAAE,EAAE;QACtB,kBAAkB,EAAE,EAAE;QACtB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,EAAE;KAClB,CAAC;AACN,CAAC;AAGD,SAAS,iBAAiB,CAAC,OAAgB;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACV,UAAkB,CAAC,OAAO,GAAG,SAAS,CAAC;QACxC,OAAO;IACX,CAAC;IAED,IAAI,KAAK,GAAW,UAAkB,CAAC,OAAO,CAAC;IAE/C,KAAK,GAAG;QACJ,GAAG,KAAK;QACR,KAAK,EAAE;YACH,GAAG,KAAK,EAAE,KAAK;YACf,GAAG,gBAAgB,EAAE;SACxB;QACD,MAAM,EAAE;YACJ,GAAG,KAAK,EAAE,MAAM;YAChB,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;YAChB,WAAW,EAAE,CAAC;YACd,IAAI,EAAE,CAAC;YACP,WAAW,EAAE,CAAC;SACjB;QACD,EAAE,EAAE;YACA,GAAG,KAAK,EAAE,EAAE;SACf;QACD,UAAU,EAAE;YACR,uBAAuB;YACvB,GAAG,KAAK,EAAE,UAAU;YACpB,oBAAoB,EAAE,KAAK;YAC3B,uBAAuB,EAAE,SAAU;YACnC,kBAAkB,EAAE,KAAK;YACzB,qBAAqB,EAAE,SAAU;YACjC,oBAAoB,EAAE,KAAK;YAC3B,uBAAuB,EAAE,SAAU;SACtC;KACJ,CAAC;IAED,UAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;AACxC,CAAC;AAID,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAA"}
@@ -20,12 +20,6 @@ function add2Prong(meta, circle, pposSource, pposAntipode, isHoleClosing) {
20
20
  : pposSource;
21
21
  const orderSource = calcPosOrder(circle.center, pposSource);
22
22
  const orderAntipode = calcPosOrder(circle.center, pposAntipode);
23
- const posAntipode = {
24
- ...pposAntipode, circle, order: orderAntipode, order2: 0
25
- };
26
- const posSource = {
27
- ...pposSource, circle, order: orderSource, order2: 0
28
- };
29
23
  // Make sure there isn't already a ContactPoint close by - it can cause
30
24
  // floating point stability issues.
31
25
  if (!!getCloseByCpIfExist(meta, pposSource, circle, orderSource, 0, 2)) {
@@ -34,7 +28,7 @@ function add2Prong(meta, circle, pposSource, pposAntipode, isHoleClosing) {
34
28
  if (!!getCloseByCpIfExist(meta, pposAntipode, circle, orderAntipode, 0, 2)) {
35
29
  return undefined;
36
30
  }
37
- const { anyFailed, cpNodes } = addToCpTree(isHoleClosing, isHoleClosing, circle, [orderSource, orderAntipode], meta, [posSource, posAntipode]);
31
+ const { anyFailed, cpNodes } = addToCpTree(isHoleClosing, isHoleClosing, circle, [orderSource, orderAntipode], meta, [pposSource, pposAntipode]);
38
32
  if (anyFailed) {
39
33
  cpNodes.forEach(cpNode => {
40
34
  if (cpNode !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"add-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/add-2-prong.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/add-2-prong.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,32 @@
1
1
  /**
2
- * Calculates and returns an appropriate seperation tolerance between `CpNode`s.
2
+ * Returns the *squared* separation tolerance between the two contact points
3
+ * `y` (the source point) and `z` (the antipode) of a candidate 2-prong: if
4
+ * `|yz|²` is below it the antipode is indistinguishable (to within the error
5
+ * tolerance `δ`) from the circle merely grazing the boundary at `y` - the
6
+ * near-1-prong case - and the 2-prong should be rejected.
3
7
  *
4
- * @param R radius of the circle implied by the curvature at the boundary
8
+ * Derivation: the MAT circle (radius `r`) is tangent to the boundary at `y`
9
+ * and so is the osculating circle there (radius `R`), both centers lying on
10
+ * the inward normal at `y`. Approximating the boundary near `y` by the
11
+ * osculating circle, the MAT circle enlarged by `δ` crosses it at the angle
12
+ * `θ` (at the MAT center, measured from `y`) given by the law of cosines:
13
+ *
14
+ * cos θ = (r(R-r) - rδ - δ²/2) / ((R-r)(r+δ))
15
+ *
16
+ * Points of the MAT circle within that angle of `y` are within `δ` of the
17
+ * boundary. The chord `|yz|` subtending `θ` is `2r·sin(θ/2)`, and since
18
+ * `2sin²(θ/2) = 1 - cos θ = (Rδ + δ²/2) / ((R-r)(r+δ))` the squared chord is
19
+ *
20
+ * |yz|² = r²(2Rδ + δ²) / ((R-r)(r+δ))
21
+ *
22
+ * which is what is returned - in closed form, without the cancellation that
23
+ * recovering a tiny `θ` from `cos θ` suffers from.
24
+ *
25
+ * @param R radius of the osculating circle of the boundary at `y`
5
26
  * @param r radius of the MAT circle
6
- * @param θ angle between point...
27
+ * @param δ the error tolerance on distances
28
+ *
29
+ * @internal
7
30
  */
8
- declare function calcSeperationTolerance(R: number, r: number, δ: number): number;
9
- export { calcSeperationTolerance };
31
+ declare function calcSquaredSeperationTolerance(R: number, r: number, δ: number): number;
32
+ export { calcSquaredSeperationTolerance };
@@ -1,97 +1,40 @@
1
- import { ddAddDd, twoProduct, ddDiffDd, ddDivDd, twoDiff, ddMultDouble1 } from 'double-double';
2
- const tp = twoProduct;
3
- const qaq = ddAddDd;
4
- const qdq = ddDiffDd;
5
- const qmd = ddMultDouble1;
6
- const { acos } = Math;
7
1
  /**
8
- * Calculates and returns an appropriate seperation tolerance between `CpNode`s.
2
+ * Returns the *squared* separation tolerance between the two contact points
3
+ * `y` (the source point) and `z` (the antipode) of a candidate 2-prong: if
4
+ * `|yz|²` is below it the antipode is indistinguishable (to within the error
5
+ * tolerance `δ`) from the circle merely grazing the boundary at `y` - the
6
+ * near-1-prong case - and the 2-prong should be rejected.
9
7
  *
10
- * @param R radius of the circle implied by the curvature at the boundary
8
+ * Derivation: the MAT circle (radius `r`) is tangent to the boundary at `y`
9
+ * and so is the osculating circle there (radius `R`), both centers lying on
10
+ * the inward normal at `y`. Approximating the boundary near `y` by the
11
+ * osculating circle, the MAT circle enlarged by `δ` crosses it at the angle
12
+ * `θ` (at the MAT center, measured from `y`) given by the law of cosines:
13
+ *
14
+ * cos θ = (r(R-r) - rδ - δ²/2) / ((R-r)(r+δ))
15
+ *
16
+ * Points of the MAT circle within that angle of `y` are within `δ` of the
17
+ * boundary. The chord `|yz|` subtending `θ` is `2r·sin(θ/2)`, and since
18
+ * `2sin²(θ/2) = 1 - cos θ = (Rδ + δ²/2) / ((R-r)(r+δ))` the squared chord is
19
+ *
20
+ * |yz|² = r²(2Rδ + δ²) / ((R-r)(r+δ))
21
+ *
22
+ * which is what is returned - in closed form, without the cancellation that
23
+ * recovering a tiny `θ` from `cos θ` suffers from.
24
+ *
25
+ * @param R radius of the osculating circle of the boundary at `y`
11
26
  * @param r radius of the MAT circle
12
- * @param θ angle between point...
27
+ * @param δ the error tolerance on distances
28
+ *
29
+ * @internal
13
30
  */
14
- function calcSeperationTolerance(R, r, δ) {
15
- const a = r + δ;
16
- if (a >= R) {
31
+ function calcSquaredSeperationTolerance(R, r, δ) {
32
+ if (r + δ >= R) {
33
+ // The enlarged MAT circle is at least as large as the osculating
34
+ // circle: every point on it is within tolerance of the boundary.
17
35
  return Infinity;
18
36
  }
19
- const R_r_ = twoDiff(R, r);
20
- const A_ = qmd(r, R_r_);
21
- const N_ = qdq(qdq(A_, tp(r, δ)), tp(δ, δ / 2));
22
- const D_ = qaq(A_, qmd(δ, R_r_));
23
- const R_r = R - r;
24
- const A = r * R_r;
25
- const N = A - r * δ - (δ * δ) / 2;
26
- const D = A + R_r * δ;
27
- const cosC = N / D;
28
- const Q = ddDivDd(N_, D_)[1];
29
- // const Q = N_[1]/D_[1];
30
- const C = acos(cosC);
31
- const CC = acos(Q);
32
- const θ = CC;
33
- // return r*θ;
34
- return r * θ;
37
+ return r * r * (2 * R * δ + δ * δ) / ((R - r) * (r + δ));
35
38
  }
36
- export { calcSeperationTolerance };
37
- // Quokka tests
38
- // /**
39
- // * Calculates and returns an appropriate seperation tolerance between `CpNode`s.
40
- // *
41
- // * @param R radius of the circle implied by the curvature at the boundary
42
- // * @param r radius of the MAT circle
43
- // * @param θ angle between point...
44
- // */
45
- // function calcSeperationTolerance2(
46
- // R: number,
47
- // r: number,
48
- // δ: number) {
49
- // const a = r + δ;
50
- // if (a >= R) {
51
- // return Infinity;
52
- // }
53
- // const b = R - r;
54
- // const c = R;
55
- // const N = c*c - a*a - b*b;
56
- // const N_ = qdq(qdq(tp(c,c), tp(a,a)), tp(b,b));
57
- // const D = 2*a*b;
58
- // const D_ = tp(-2*a,b);
59
- // const Q = ddDivDd(N_,D_)[1];
60
- // const cosC = -N/D;
61
- // const C = acos(cosC);
62
- // const CC = acos(Q);
63
- // const θ = π - CC;
64
- // return θ;
65
- // // return r*θ; // approximate arc with line
66
- // }
67
- // function degToRad(degrees: number) {
68
- // return degrees/360*2*PI;
69
- // }
70
- // function radToDeg(rad: number) {
71
- // return rad*360/2/PI;
72
- // }
73
- // const R = 699;
74
- // const r = 698;
75
- // const δ = 1000*2**-46;
76
- // calcSeperationTolerance(R,r,δ);
77
- // calcSeperationTolerance2(R,r,δ);
78
- // calcSeperationTolerance3(R,r,δ);
79
- // // * see https://en.wikipedia.org/wiki/Law_of_cosines, Version suited to small angles
80
- // function calcSeperationTolerance3(
81
- // R: number,
82
- // r: number,
83
- // δ: number) {
84
- // const a = r + δ;
85
- // const c = R - r;
86
- // const b = R;
87
- // // c² = (a - b)² + 4ab*sin²(θ/2) OR
88
- // // (c² - (a - b)²)/4ab = sin²(θ/2)
89
- // const cc = c*c;
90
- // const abc = a*a + b*b - 2*a*b;
91
- // const A = cc - abc;
92
- // const B = sqrt(A/(4*a*b));
93
- // const θ = 2*asin(B);
94
- // return θ;
95
- // // return r*θ; // approximate arc with line
96
- // }
39
+ export { calcSquaredSeperationTolerance };
97
40
  //# sourceMappingURL=calc-seperation-tolerance.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calc-seperation-tolerance.js","sourceRoot":"","sources":["../../src/find-2-prong/calc-seperation-tolerance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"calc-seperation-tolerance.js","sourceRoot":"","sources":["../../src/find-2-prong/calc-seperation-tolerance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAS,8BAA8B,CAC/B,CAAS,EACT,CAAS,EACT,CAAS;IAEb,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACb,iEAAiE;QACjE,iEAAiE;QACjE,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,CAAC,GAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,GAAC,CAAC,GAAG,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAGD,OAAO,EAAE,8BAA8B,EAAE,CAAA"}
@@ -2,10 +2,10 @@ import { getInitialCurvePieces } from './get-initial-bezier-pieces.js';
2
2
  import { getAntipodalPoints } from './get-medial/get-antipodal-points.js';
3
3
  import { reduceRadius } from './reduce-radius.js';
4
4
  import { squaredDistanceBetweenDd } from './squared-distance-between-dd.js';
5
- import { cullCurvePieces } from './cull-bezier-pieces.js';
5
+ import { cullCurvePieces } from '../closest-boundary-point/cull-curve-pieces.js';
6
6
  import { add1Prong } from './add-1-prong.js';
7
7
  import { toP } from '../point-on-shape/to-p.js';
8
- import { calcSeperationTolerance } from './calc-seperation-tolerance.js';
8
+ import { calcSquaredSeperationTolerance } from './calc-seperation-tolerance.js';
9
9
  import { getInitialX } from './get-initial-x.js';
10
10
  import { ddNormal } from 'flo-bezier3';
11
11
  import { rotate } from 'flo-vector2d';
@@ -58,18 +58,16 @@ function find2Prong(meta) {
58
58
  // the 2-prong circle. (Defined by start and end points).
59
59
  const curvePieces = getInitialCurvePieces(angle, isHoleClosing, loop, loops, meta, yPos, xO);
60
60
  // The lines below is an optimization.
61
- const xy2 = reduceRadius(maxCoordPowerOf2, rO, curvePieces, y, nnorm);
61
+ const xy2 = reduceRadius(rO, curvePieces, y, nnorm);
62
62
  const xy = sqrt(xy2);
63
63
  const l = sqrt(nnorm[0] ** 2 + nnorm[1] ** 2);
64
64
  xO = [y[0] + nnorm[0] / l * xy, y[1] + nnorm[1] / l * xy];
65
- cullCurvePieces(curvePieces, xO, xy2);
66
- const antipodalPoints = getAntipodalPoints(maxCoordPowerOf2, nnorm, nnormDd, yPos, for1Prong, angle, curvePieces);
65
+ // (the extra multiplier accounts for floating point error)
66
+ const culledCurvePieces = cullCurvePieces(curvePieces, xO, (1 + 2 ** -20) * xy2);
67
+ const antipodalPoints = getAntipodalPoints(maxCoordPowerOf2, nnormDd, yPos, for1Prong, angle, culledCurvePieces);
67
68
  // FUTURE - if antipodalPoints.length > 1 let's just add an n-prong;
68
69
  if (antipodalPoints.length !== 1) {
69
70
  if (antipodalPoints.length === 0) {
70
- if (isHoleClosing) {
71
- console.log(yPos);
72
- }
73
71
  return undefined;
74
72
  }
75
73
  if (!isHoleClosing && !areAllAntipodesSame(antipodalPoints, maxCoordPowerOf2)) {
@@ -99,7 +97,7 @@ function find2Prong(meta) {
99
97
  }
100
98
  // The lines below eliminate cases where the found 2-prong is too
101
99
  // close to a one-prong
102
- const squaredSeperationTolerance = max(calcSeperationTolerance(rO, sqrt(xz), (2 ** 2) * errorTolerance), minSquaredSeperationTolerance);
100
+ const squaredSeperationTolerance = max(calcSquaredSeperationTolerance(rO, sqrt(xz), (2 ** 2) * errorTolerance), minSquaredSeperationTolerance);
103
101
  if (yz <= squaredSeperationTolerance) {
104
102
  return undefined;
105
103
  }
@@ -117,7 +115,7 @@ function areAllAntipodesSame(point, maxCoordPowerOf2) {
117
115
  // return false;
118
116
  // }
119
117
  const { x: x_ } = point[i];
120
- if (abs(x[0] - x_[0]) > tol || abs(x[0] - x_[0]) > tol) {
118
+ if (abs(x[0] - x_[0]) > tol || abs(x[1] - x_[1]) > tol) {
121
119
  return false;
122
120
  }
123
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-2-prong.js","sourceRoot":"","sources":["../../src/find-2-prong/find-2-prong.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;AAG1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAS,UAAU,CACX,IAAa;IAEjB,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IAEhE,8BAA8B;IAC9B,6BAA6B;IAC7B,8BAA8B;IAC9B,MAAM,6BAA6B,GAAG,CAAC,CAAC,IAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,CAAC,IAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAClD,MAAM,yBAAyB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC9D,MAAM,iBAAiB,GAAG,CAAC,IAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAErD,OAAO,SAAS,eAAe,CACvB,aAAsB,EACtB,SAAkB,EAClB,KAAa,EACb,IAAqB;QAGzB,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC;QAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,6BAA6B;QAC7E,MAAM,KAAK,GAAG,aAAa;YACvB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,yBAAyB,CAAC;YACjC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEtE,MAAM,OAAO,GAAG,aAAa,IAAI,KAAK,KAAK,CAAC;YACxC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,mCAAmC;QACnC,IAAI,CAAC,EAAE,EAAC,EAAE,CAAC,GAAG,WAAW,CACrB,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,IAAI,EAAE,KAAK,CAC/D,CAAC;QAGF,6DAA6D;QAC7D,yDAAyD;QACzD,MAAM,WAAW,GAAG,qBAAqB,CACrC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CACpD,CAAC;QAEF,sCAAsC;QACtC,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAErB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,CAAC;QAC1C,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,EAAE,CAAC,CAAC;QAElD,2DAA2D;QAC3D,MAAM,iBAAiB,GAAG,eAAe,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,CAAC,GAAC,GAAG,CAAC,CAAC;QAE7E,MAAM,eAAe,GAAG,kBAAkB,CACtC,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAC/B,SAAS,EAAE,KAAK,EAChB,iBAAiB,CACpB,CAAC;QAEF,oEAAoE;QACpE,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,SAAS,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,aAAa,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAE,CAAC;gBAC5E,sEAAsE;gBACtE,kEAAkE;gBAClE,oBAAoB;gBAEpB,OAAO,SAAS,CAAC;YACrB,CAAC;QACL,CAAC;QAED,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QAE9C,IAAI,SAAS,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,iBAAiB,CAAC,GAAC,CAAC,EAAE,CAAC;YAC9C,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAC9B,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,CAAC,GAAoB;YACvB,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK;YAC5B,CAAC,EAAE,GAAG;SACT,CAAC;QAEF,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAExC,MAAM,EAAE,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;gBACX,OAAO,SAAS,CAAC;YACrB,CAAC;YAED,iEAAiE;YACjE,uBAAuB;YACvB,MAAM,0BAA0B,GAAG,GAAG,CAClC,8BAA8B,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,cAAc,CAAC,EACnE,6BAA6B,CAChC,CAAC;YACF,IAAI,EAAE,IAAI,0BAA0B,EAAE,CAAC;gBACnC,OAAO,SAAS,CAAC;YACrB,CAAC;QACL,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC,CAAA;AACL,CAAC;AAGD,gBAAgB;AAChB,SAAS,mBAAmB,CACpB,KAAuB,EACvB,gBAAwB;IAE5B,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,CAAC,IAAE,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IACvC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,6CAA6C;QAC7C,sCAAsC;QACtC,oBAAoB;QACpB,IAAI;QAEJ,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;YACrD,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAGD,OAAO,EAAE,UAAU,EAAE,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { find2Prong } from './find-2-prong.js';
2
2
  import { add2Prong } from './add-2-prong.js';
3
3
  import { rotateNeg90Degrees } from 'flo-vector2d';
4
- import { getCorner } from '../corner/get-corner.js';
4
+ import { getCorner$ } from '../corner/get-corner.js';
5
5
  const { PI, atan2 } = Math;
6
6
  // const ANGLE = 15*PI/180; // 15 degrees - don't make smaller than 2 degrees
7
7
  /**
@@ -40,7 +40,7 @@ function getValidAngles(angleIncrement_, ppos) {
40
40
  const angles = [0];
41
41
  if (ppos.t === 1) {
42
42
  const { curve } = ppos;
43
- const corner = getCorner(curve.ps, curve.next.ps);
43
+ const corner = getCorner$(curve.ps, curve.next.ps);
44
44
  if (corner.isQuiteDull) {
45
45
  const tangentI = rotateNeg90Degrees(corner.tangents[0]);
46
46
  const tangentO = rotateNeg90Degrees(corner.tangents[1]);
@@ -1 +1 @@
1
- {"version":3,"file":"find-and-add-2-prongs.js","sourceRoot":"","sources":["../../src/find-2-prong/find-and-add-2-prongs.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAGpD,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AAC3B,8EAA8E;AAG9E;;;;;;;;GAQG;AACH,SAAS,iBAAiB,CAClB,IAAa,EACb,cAAsB,EACtB,UAA6B,EAC7B,SAAkB;IAEtB,IAAI,OAAO,CAAC;IAEZ,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,eAAe,GAAG,cAAc,GAAC,EAAE,GAAC,GAAG,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAE1B,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAEtE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,WAAW,CAC5B,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAC/B,CAAC;YAEF,IAAI,YAAY,EAAE,CAAC;gBACf,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC;gBACnC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;gBACtD,OAAO,GAAG,OAAO,IAAI,MAAM,CAAC;YAChC,CAAC;YAED,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC;oBAAC,OAAO,SAAS,CAAC;gBAAC,CAAC;YACjF,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC;AAGD,SAAS,cAAc,CACf,eAAuB,EACvB,IAAqB;IAEzB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QACvB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAExD,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAC,EAAE,CAAC,GAAC,CAAC,CAAC,GAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAC,EAAE,CAAC,GAAC,CAAC,CAAC,GAAC,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,GAAC,EAAE,CAAC,GAAC,CAAC,CAAC,GAAC,EAAE,CAAC,CAAC;YACrC,IAAI,KAAK,GAAG,eAAe,CAAC;YAC5B,OAAO,KAAK,IAAI,EAAE,GAAG,CAAC,eAAe,GAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACnB,KAAK,IAAI,eAAe,CAAC;YAC7B,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
1
+ {"version":3,"file":"find-and-add-2-prongs.js","sourceRoot":"","sources":["../../src/find-2-prong/find-and-add-2-prongs.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,6 @@ import type { AntipodalPoint } from './antipodal-point.js';
6
6
  * bezier pieces, including the beziers actually checked after culling.
7
7
  *
8
8
  * @param maxCoordPowerOf2
9
- * @param nnorm
10
9
  * @param yPos
11
10
  * @param for1Prong defaults to `false`;
12
11
  * @param angle angle from normal
@@ -14,5 +13,5 @@ import type { AntipodalPoint } from './antipodal-point.js';
14
13
  *
15
14
  * @internal
16
15
  */
17
- declare function getAntipodalPoints(maxCoordPowerOf2: number, nnorm: number[], nnormDd: number[][], yPos: PrePointOnShape, for1Prong: boolean, angle: number, curvePieces: CurvePiece[]): AntipodalPoint[];
16
+ declare function getAntipodalPoints(maxCoordPowerOf2: number, nnormDd: number[][], yPos: PrePointOnShape, for1Prong: boolean, angle: number, curvePieces: CurvePiece[]): AntipodalPoint[];
18
17
  export { getAntipodalPoints };
@@ -4,7 +4,6 @@ import { getClosestPoint } from './get-closest-points.js';
4
4
  * bezier pieces, including the beziers actually checked after culling.
5
5
  *
6
6
  * @param maxCoordPowerOf2
7
- * @param nnorm
8
7
  * @param yPos
9
8
  * @param for1Prong defaults to `false`;
10
9
  * @param angle angle from normal
@@ -12,11 +11,11 @@ import { getClosestPoint } from './get-closest-points.js';
12
11
  *
13
12
  * @internal
14
13
  */
15
- function getAntipodalPoints(maxCoordPowerOf2, nnorm, nnormDd, yPos, for1Prong, angle, curvePieces) {
14
+ function getAntipodalPoints(maxCoordPowerOf2, nnormDd, yPos, for1Prong, angle, curvePieces) {
16
15
  const pInfoss = [];
17
16
  for (let i = 0; i < curvePieces.length; i++) {
18
17
  const curvePiece = curvePieces[i];
19
- const pInfos = getClosestPoint(maxCoordPowerOf2, nnorm, nnormDd, yPos, for1Prong, angle, curvePiece);
18
+ const pInfos = getClosestPoint(maxCoordPowerOf2, nnormDd, yPos, for1Prong, angle, curvePiece);
20
19
  pInfoss.push(...pInfos);
21
20
  }
22
21
  /** the minimum max value */
@@ -1 +1 @@
1
- {"version":3,"file":"get-antipodal-points.js","sourceRoot":"","sources":["../../../src/find-2-prong/get-medial/get-antipodal-points.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D;;;;;;;;;;;;GAYG;AACH,SAAS,kBAAkB,CACnB,gBAAwB,EACxB,KAAe,EACf,OAAmB,EACnB,IAAqB,EACrB,SAAkB,EAClB,KAAa,EACb,WAAyB;IAE7B,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,eAAe,CAC1B,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EACxD,UAAU,CACb,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC5B,CAAC;IAGD,4BAA4B;IAC5B,IAAI,MAAM,GAAG,QAAQ,CAAC;IACtB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;YACjB,MAAM,GAAG,KAAK,CAAC;QACnB,CAAC;IACL,CAAC;IAED,MAAM,eAAe,GAAqB,EAAE,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACd,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,CAAC;AAGD,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
1
+ {"version":3,"file":"get-antipodal-points.js","sourceRoot":"","sources":["../../../src/find-2-prong/get-medial/get-antipodal-points.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D;;;;;;;;;;;GAWG;AACH,SAAS,kBAAkB,CACnB,gBAAwB,EACxB,OAAmB,EACnB,IAAqB,EACrB,SAAkB,EAClB,KAAa,EACb,WAAyB;IAE7B,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,eAAe,CAC1B,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EACjD,UAAU,CACb,CAAC;QAEF,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC5B,CAAC;IAGD,4BAA4B;IAC5B,IAAI,MAAM,GAAG,QAAQ,CAAC;IACtB,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;YACjB,MAAM,GAAG,KAAK,CAAC;QACnB,CAAC;IACL,CAAC;IAED,MAAM,eAAe,GAAqB,EAAE,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,GAAC,CAAC,CAAC,GAAG,CAAC,IAAE,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YACd,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC;AAC3B,CAAC;AAGD,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
@@ -3,7 +3,6 @@ import type { PrePointOnShape } from "../../point-on-shape/point-on-shape.js";
3
3
  import type { AntipodalPoint } from './antipodal-point.js';
4
4
  /**
5
5
  * @param maxCoordPowerOf2
6
- * @param nnorm
7
6
  * @param yPos The point on the shape
8
7
  * @param for1Prong defaults to `false`;
9
8
  * @param angle defaults to `0`;
@@ -11,11 +10,5 @@ import type { AntipodalPoint } from './antipodal-point.js';
11
10
  *
12
11
  * @internal
13
12
  */
14
- declare function getClosestPoint(maxCoordPowerOf2: number, nnorm: number[], nnormDd: number[][], yPos: PrePointOnShape, for1Prong: boolean, angle: number, curvePiece: CurvePiece): AntipodalPoint[];
13
+ declare function getClosestPoint(maxCoordPowerOf2: number, nnormDd: number[][], yPos: PrePointOnShape, for1Prong: boolean, angle: number, curvePiece: CurvePiece): AntipodalPoint[];
15
14
  export { getClosestPoint };
16
- /**
17
- * Recovers a numerically stable ray parameter `t` from linear equations
18
- * `A*t + B = 0` and (optionally) `C*t + D = 0` evaluated at a fixed `s`.
19
- *
20
- * If `C,D` are unavailable, this falls back to `-B/A`.
21
- */
@@ -6,11 +6,10 @@ import { ddGetMedialPointCoeffs } from '../../get-medial-points/double-double/dd
6
6
  import { ddGetMedialPointCoeffsBez2_SameCurve } from '../../get-medial-points/double-double/dd-get-medial-point-coeffs-bez2-same-curve.js';
7
7
  import { ddGetMedialPointCoeffsBez3_SameCurve } from '../../get-medial-points/double-double/dd-get-medial-point-coeffs-bez3-same-curve.js';
8
8
  import { ddGetMedialPointCoeffsBez0 } from '../../get-medial-points/double-double/dd-get-medial-point-coeffs-bez0.js';
9
- const { sqrt, abs, max } = Math;
9
+ const { sqrt, abs } = Math;
10
10
  const qmd = ddMultDouble1;
11
11
  /**
12
12
  * @param maxCoordPowerOf2
13
- * @param nnorm
14
13
  * @param yPos The point on the shape
15
14
  * @param for1Prong defaults to `false`;
16
15
  * @param angle defaults to `0`;
@@ -18,7 +17,7 @@ const qmd = ddMultDouble1;
18
17
  *
19
18
  * @internal
20
19
  */
21
- function getClosestPoint(maxCoordPowerOf2, nnorm, nnormDd, yPos, for1Prong, angle, curvePiece) {
20
+ function getClosestPoint(maxCoordPowerOf2, nnormDd, yPos, for1Prong, angle, curvePiece) {
22
21
  const { curve, ts: [tS, tE] } = curvePiece;
23
22
  const { ps } = curve;
24
23
  const { curve: touchedCurve, t, p: y, pDd: yDd } = yPos;
@@ -64,8 +63,7 @@ function getClosestPoint(maxCoordPowerOf2, nnorm, nnormDd, yPos, for1Prong, angl
64
63
  // const DS = Horner(D, s);
65
64
  const _AS = abs(AS);
66
65
  // const _CS = abs(CS);
67
- // if (max(_AS, _CS) < 2**-40) { continue; }
68
- if (max(_AS) < 2 ** -40) {
66
+ if (_AS < 2 ** -40) {
69
67
  continue;
70
68
  }
71
69
  // const w = _AS > _CS
@@ -106,7 +104,7 @@ function getClosestPoint(maxCoordPowerOf2, nnorm, nnormDd, yPos, for1Prong, angl
106
104
  }
107
105
  //------------------------------------------
108
106
  const pLast = ps[ps.length - 1];
109
- let dontPush1 = ((t === 0 && curve === touchedCurve.prev) ||
107
+ const dontPush1 = ((t === 0 && curve === touchedCurve.prev) ||
110
108
  (t === 1 && curve === touchedCurve));
111
109
  //--------------------------------------
112
110
  // Also check curve start control point
@@ -138,7 +136,6 @@ function getClosestPoint(maxCoordPowerOf2, nnorm, nnormDd, yPos, for1Prong, angl
138
136
  else if (tE === 1) {
139
137
  if (!dontPush1 && !endPushed) {
140
138
  PS.push({ P: pLast, t: 1 });
141
- dontPush1 = true;
142
139
  }
143
140
  }
144
141
  else {
@@ -177,37 +174,4 @@ function getClosestPoint(maxCoordPowerOf2, nnorm, nnormDd, yPos, for1Prong, angl
177
174
  return infos;
178
175
  }
179
176
  export { getClosestPoint };
180
- /**
181
- * Recovers a numerically stable ray parameter `t` from linear equations
182
- * `A*t + B = 0` and (optionally) `C*t + D = 0` evaluated at a fixed `s`.
183
- *
184
- * If `C,D` are unavailable, this falls back to `-B/A`.
185
- */
186
- // function chooseStableT(
187
- // A: number,
188
- // B: number,
189
- // C: number,
190
- // D: number) {
191
- // const epsScale = max(1, abs(A), abs(B), abs(C), abs(D));
192
- // const eps = Number.EPSILON * epsScale;
193
- // const denomAB = abs(A);
194
- // const hasAB = denomAB > eps;
195
- // const denomCD = abs(C);
196
- // const hasCD = denomCD > eps;
197
- // if (!hasAB && !hasCD) {
198
- // return undefined;
199
- // }
200
- // if (hasAB && !hasCD) {
201
- // return -B / A;
202
- // }
203
- // if (!hasAB && hasCD) {
204
- // return -D / C;
205
- // }
206
- // const tAB = -B / A;
207
- // const tCD = -D / C;
208
- // // Score each candidate by how well it satisfies the *other* equation.
209
- // const scoreAB = abs(C*tAB + D) / (abs(C) + abs(D) + eps);
210
- // const scoreCD = abs(A*tCD + B) / (abs(A) + abs(B) + eps);
211
- // return scoreAB <= scoreCD ? tAB : tCD;
212
- // }
213
177
  //# sourceMappingURL=get-closest-points.js.map