flo-mat 3.0.15 → 4.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 (572) hide show
  1. package/__tests__/cp-node/compare-cp-nodes-by-value.ts +5 -3
  2. package/__tests__/cp-node/compare-poss-by-value.ts +7 -7
  3. package/__tests__/cp-node/fs/get-all-on-circle.spec.ts +8 -8
  4. package/__tests__/cp-node/fs/is-one-prong.spec.ts +3 -3
  5. package/__tests__/cp-node/fs/is-sharp.spec.ts +1 -1
  6. package/__tests__/get-mats1.ts +29 -32
  7. package/__tests__/helpers/close-to.ts +71 -0
  8. package/__tests__/helpers/jest-extend-nearly.ts +39 -0
  9. package/__tests__/helpers/jest.setup.ts +6 -0
  10. package/__tests__/helpers/obj-or-array.ts +8 -0
  11. package/__tests__/jest-extensions.d.ts +26 -0
  12. package/__tests__/lib-load.spec.ts +1 -1
  13. package/browser/index.js +14846 -12124
  14. package/browser/index.min.js +1 -1
  15. package/jest.config.cjs +1 -0
  16. package/node/add-n-prong.ts/join-spokes.d.ts +2 -2
  17. package/node/add-n-prong.ts/join-spokes.js +5 -4
  18. package/node/add-n-prong.ts/join-spokes.js.map +1 -1
  19. package/node/closest-boundary-point/cull-bezier-pieces-1.d.ts +9 -0
  20. package/node/closest-boundary-point/{cull-bezier-pieces.js → cull-bezier-pieces-1.js} +6 -7
  21. package/node/closest-boundary-point/cull-bezier-pieces-1.js.map +1 -0
  22. package/node/closest-boundary-point/cull-by-loose-bounding-box.d.ts +7 -5
  23. package/node/closest-boundary-point/cull-by-loose-bounding-box.js +12 -10
  24. package/node/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
  25. package/node/closest-boundary-point/cull-by-tight-boundary-box.js +2 -2
  26. package/node/closest-boundary-point/foot-and-endpoint-info.d.ts +9 -9
  27. package/node/closest-boundary-point/get-best-distance-squared.d.ts +4 -3
  28. package/node/closest-boundary-point/get-best-distance-squared.js +11 -11
  29. package/node/closest-boundary-point/get-best-distance-squared.js.map +1 -1
  30. package/node/closest-boundary-point/get-close-boundary-points-certified.d.ts +5 -9
  31. package/node/closest-boundary-point/get-close-boundary-points-certified.js +22 -18
  32. package/node/closest-boundary-point/get-close-boundary-points-certified.js.map +1 -1
  33. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.d.ts +4 -8
  34. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js +12 -79
  35. package/node/closest-boundary-point/get-potential-closest-points-on-curve-certified.js.map +1 -1
  36. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.d.ts +1 -1
  37. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js +5 -5
  38. package/node/closest-boundary-point/root-interval-to-distance-squared-interval.js.map +1 -1
  39. package/node/corner/compare-curvatures-at-interface.d.ts +1 -1
  40. package/node/corner/compare-curvatures-at-interface.js +1 -1
  41. package/node/corner/corner.d.ts +7 -6
  42. package/node/corner/get-corner.d.ts +1 -6
  43. package/node/corner/get-corner.js +2 -9
  44. package/node/corner/get-corner.js.map +1 -1
  45. package/node/corner/get-interface-ccw.d.ts +2 -2
  46. package/node/corner/get-interface-ccw.js +4 -5
  47. package/node/corner/get-interface-ccw.js.map +1 -1
  48. package/node/cp-node/cp-node-fs.d.ts +0 -15
  49. package/node/cp-node/cp-node-fs.js +0 -4
  50. package/node/cp-node/cp-node-fs.js.map +1 -1
  51. package/node/cp-node/cp-node.d.ts +10 -10
  52. package/node/cp-node/fs/clone.js.map +1 -1
  53. package/node/cp-node/fs/cp-node-comparator.js +2 -2
  54. package/node/cp-node/fs/cp-node-comparator.js.map +1 -1
  55. package/node/cp-node/fs/enhance-cp-node.d.ts +1 -1
  56. package/node/cp-node/fs/enhance-cp-node.js +5 -5
  57. package/node/cp-node/fs/enhance-cp-node.js.map +1 -1
  58. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js +2 -2
  59. package/node/cp-node/fs/get-boundary-bezier-parts-to-next.js.map +1 -1
  60. package/node/cp-node/fs/get-cp-node-ordering.js +4 -4
  61. package/node/cp-node/fs/get-cp-node-ordering.js.map +1 -1
  62. package/node/cp-node/fs/get-edge-direction.js +3 -3
  63. package/node/cp-node/fs/get-edge-direction.js.map +1 -1
  64. package/node/cp-node/fs/get-hole-closers.d.ts +1 -1
  65. package/node/cp-node/fs/get-implied-boundary-bezier-between.js +2 -2
  66. package/node/cp-node/fs/get-implied-boundary-bezier-between.js.map +1 -1
  67. package/node/cp-node/fs/get-mat-curve-between.d.ts +1 -1
  68. package/node/cp-node/fs/get-mat-curve-between.js +6 -5
  69. package/node/cp-node/fs/get-mat-curve-between.js.map +1 -1
  70. package/node/cp-node/fs/get-salience.d.ts +1 -1
  71. package/node/cp-node/fs/get-salience.js +3 -3
  72. package/node/cp-node/fs/get-salience.js.map +1 -1
  73. package/node/cp-node/fs/insert-cp-node.d.ts +3 -3
  74. package/node/cp-node/fs/insert-cp-node.js +3 -4
  75. package/node/cp-node/fs/insert-cp-node.js.map +1 -1
  76. package/node/cp-node/fs/is-one-prong.d.ts +1 -1
  77. package/node/cp-node/fs/is-one-prong.js +2 -9
  78. package/node/cp-node/fs/is-one-prong.js.map +1 -1
  79. package/node/cp-node/fs/is-order-correct.d.ts +2 -2
  80. package/node/cp-node/fs/is-order-correct.js +5 -8
  81. package/node/cp-node/fs/is-order-correct.js.map +1 -1
  82. package/node/cp-node/fs/is-sharp.js +1 -1
  83. package/node/cp-node/fs/is-sharp.js.map +1 -1
  84. package/node/cp-node/fs/remove-cp-node.js +1 -2
  85. package/node/cp-node/fs/remove-cp-node.js.map +1 -1
  86. package/node/debug/debug-elem-types.d.ts +1 -2
  87. package/node/debug/debug-elem-types.js +1 -2
  88. package/node/debug/debug-elem-types.js.map +1 -1
  89. package/node/debug/functions/draw-elem/draw-cp-node.js +2 -2
  90. package/node/debug/functions/draw-elem/draw-cp-node.js.map +1 -1
  91. package/node/debug/functions/draw-elem/draw-elem.js +1 -5
  92. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  93. package/node/debug/functions/draw-elem/draw-leaves.js +2 -2
  94. package/node/debug/functions/draw-elem/draw-leaves.js.map +1 -1
  95. package/node/debug/functions/draw-elem/draw-max-vertex.d.ts +1 -1
  96. package/node/debug/functions/draw-elem/draw-max-vertex.js +1 -1
  97. package/node/debug/functions/draw-elem/draw-max-vertex.js.map +1 -1
  98. package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js +12 -3
  99. package/node/debug/functions/draw-elem/draw-one-prong-at-dull-corner.js.map +1 -1
  100. package/node/debug/functions/draw-elem/draw-one-prong.d.ts +2 -2
  101. package/node/debug/functions/draw-elem/draw-one-prong.js +8 -7
  102. package/node/debug/functions/draw-elem/draw-one-prong.js.map +1 -1
  103. package/node/debug/functions/draw-elem/draw-three-prong.js +2 -2
  104. package/node/debug/functions/draw-elem/draw-three-prong.js.map +1 -1
  105. package/node/debug/functions/draw-elem/draw-two-prong.js +4 -3
  106. package/node/debug/functions/draw-elem/draw-two-prong.js.map +1 -1
  107. package/node/debug/functions/draw-elem/draw-vertex.js +1 -1
  108. package/node/debug/functions/draw-elem/draw-vertex.js.map +1 -1
  109. package/node/debug/functions/general.js +1 -1
  110. package/node/debug/functions/general.js.map +1 -1
  111. package/node/find-2-prong/add-1-prong.d.ts +3 -3
  112. package/node/find-2-prong/add-1-prong.js +4 -4
  113. package/node/find-2-prong/add-1-prong.js.map +1 -1
  114. package/node/find-2-prong/add-2-prong.d.ts +10 -11
  115. package/node/find-2-prong/add-2-prong.js +42 -37
  116. package/node/find-2-prong/add-2-prong.js.map +1 -1
  117. package/node/find-2-prong/calc-seperation-tolerance.js +4 -7
  118. package/node/find-2-prong/calc-seperation-tolerance.js.map +1 -1
  119. package/node/find-2-prong/cull-bezier-pieces.d.ts +9 -7
  120. package/node/find-2-prong/cull-bezier-pieces.js +30 -15
  121. package/node/find-2-prong/cull-bezier-pieces.js.map +1 -1
  122. package/node/find-2-prong/find-2-prong.d.ts +12 -13
  123. package/node/find-2-prong/find-2-prong.js +73 -116
  124. package/node/find-2-prong/find-2-prong.js.map +1 -1
  125. package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.d.ts +4 -4
  126. package/node/find-2-prong/find-and-add-2-prongs-on-all-loops.js.map +1 -1
  127. package/node/find-2-prong/find-and-add-2-prongs.d.ts +5 -4
  128. package/node/find-2-prong/find-and-add-2-prongs.js +28 -24
  129. package/node/find-2-prong/find-and-add-2-prongs.js.map +1 -1
  130. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.d.ts +6 -8
  131. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js +11 -12
  132. package/node/find-2-prong/find-and-add-hole-closing-2-prongs.js.map +1 -1
  133. package/node/find-2-prong/get-initial-bezier-pieces.d.ts +5 -6
  134. package/node/find-2-prong/get-initial-bezier-pieces.js +8 -11
  135. package/node/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
  136. package/node/find-2-prong/get-initial-x.d.ts +12 -0
  137. package/node/find-2-prong/get-initial-x.js +35 -0
  138. package/node/find-2-prong/get-initial-x.js.map +1 -0
  139. package/node/find-2-prong/get-medial/antipodal-point.d.ts +8 -0
  140. package/node/find-2-prong/get-medial/antipodal-point.js +2 -0
  141. package/node/find-2-prong/get-medial/antipodal-point.js.map +1 -0
  142. package/node/find-2-prong/get-medial/get-antipodal-points.d.ts +18 -0
  143. package/node/find-2-prong/get-medial/get-antipodal-points.js +41 -0
  144. package/node/find-2-prong/get-medial/get-antipodal-points.js.map +1 -0
  145. package/node/find-2-prong/get-medial/get-closest-points.d.ts +15 -0
  146. package/node/find-2-prong/get-medial/get-closest-points.js +163 -0
  147. package/node/find-2-prong/get-medial/get-closest-points.js.map +1 -0
  148. package/node/find-2-prong/reduce-radius.d.ts +4 -4
  149. package/node/find-2-prong/reduce-radius.js +30 -50
  150. package/node/find-2-prong/reduce-radius.js.map +1 -1
  151. package/node/find-3-prong/calc-better-x.d.ts +22 -0
  152. package/node/{find-3-prong.ts → find-3-prong}/calc-better-x.js +8 -5
  153. package/node/find-3-prong/calc-better-x.js.map +1 -0
  154. package/node/find-3-prong/calc-initial-3-prong-center.d.ts +15 -0
  155. package/node/find-3-prong/calc-initial-3-prong-center.js +26 -0
  156. package/node/find-3-prong/calc-initial-3-prong-center.js.map +1 -0
  157. package/node/find-3-prong/find-3-prong-for-delta3s.d.ts +19 -0
  158. package/node/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.js +32 -34
  159. package/node/find-3-prong/find-3-prong-for-delta3s.js.map +1 -0
  160. package/node/find-3-prong/find-3-prong.d.ts +13 -0
  161. package/node/{find-3-prong.ts → find-3-prong}/find-3-prong.js +14 -9
  162. package/node/find-3-prong/find-3-prong.js.map +1 -0
  163. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.js +2 -2
  164. package/node/find-3-prong/find-and-add-3-prong.js.map +1 -0
  165. package/node/find-3-prong/find-and-add-3-prongs-on-loop.js.map +1 -0
  166. package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.js +1 -1
  167. package/node/find-3-prong/find-and-add-3-prongs.js.map +1 -0
  168. package/node/find-3-prong/get-closest-points.d.ts +10 -0
  169. package/node/{find-3-prong.ts → find-3-prong}/get-closest-points.js +5 -5
  170. package/node/find-3-prong/get-closest-points.js.map +1 -0
  171. package/node/find-3-prong/three-prong-info.d.ts +9 -0
  172. package/node/find-3-prong/three-prong-info.js +2 -0
  173. package/node/find-3-prong/three-prong-info.js.map +1 -0
  174. package/node/find-mat/clip-options.d.ts +2 -2
  175. package/node/find-mat/clip-options.js +7 -14
  176. package/node/find-mat/clip-options.js.map +1 -1
  177. package/node/find-mat/create-initial-cp-tree.d.ts +8 -7
  178. package/node/find-mat/create-initial-cp-tree.js +16 -19
  179. package/node/find-mat/create-initial-cp-tree.js.map +1 -1
  180. package/node/find-mat/find-mat.d.ts +1 -1
  181. package/node/find-mat/find-mat.js +6 -12
  182. package/node/find-mat/find-mat.js.map +1 -1
  183. package/node/find-mat/find-mats.js +7 -12
  184. package/node/find-mat/find-mats.js.map +1 -1
  185. package/node/find-mat/get-dull-corners-on-loop.d.ts +3 -3
  186. package/node/find-mat/get-dull-corners-on-loop.js +5 -4
  187. package/node/find-mat/get-dull-corners-on-loop.js.map +1 -1
  188. package/node/find-mat/get-for-1-prongs-on-loop.d.ts +7 -7
  189. package/node/find-mat/get-for-1-prongs-on-loop.js +9 -21
  190. package/node/find-mat/get-for-1-prongs-on-loop.js.map +1 -1
  191. package/node/find-mat/get-for-2-prongs-on-loop.d.ts +5 -4
  192. package/node/find-mat/get-for-2-prongs-on-loop.js +4 -6
  193. package/node/find-mat/get-for-2-prongs-on-loop.js.map +1 -1
  194. package/node/find-mat/get-meta.d.ts +1 -1
  195. package/node/find-mat/get-meta.js +12 -12
  196. package/node/find-mat/get-meta.js.map +1 -1
  197. package/node/find-mat/get-sharp-corners.d.ts +3 -3
  198. package/node/find-mat/get-sharp-corners.js +2 -3
  199. package/node/find-mat/get-sharp-corners.js.map +1 -1
  200. package/node/find-mat/mat-options.d.ts +15 -15
  201. package/node/find-mat/mat-options.js +7 -4
  202. package/node/find-mat/mat-options.js.map +1 -1
  203. package/node/floyd-warshall/floyd-warshall.js +1 -1
  204. package/node/floyd-warshall/floyd-warshall.js.map +1 -1
  205. package/node/floyd-warshall/get-graph.js +2 -2
  206. package/node/floyd-warshall/get-graph.js.map +1 -1
  207. package/node/floyd-warshall/get-hole-closer-pairs.js +6 -6
  208. package/node/floyd-warshall/get-hole-closer-pairs.js.map +1 -1
  209. package/node/geometry/circle.d.ts +1 -0
  210. package/node/geometry/circle.js +1 -0
  211. package/node/geometry/circle.js.map +1 -1
  212. package/node/geometry/get-closest-square-distance-to-rect.js +1 -4
  213. package/node/geometry/get-closest-square-distance-to-rect.js.map +1 -1
  214. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js +2 -1
  215. package/node/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  216. package/node/index.d.ts +0 -7
  217. package/node/index.js +0 -5
  218. package/node/index.js.map +1 -1
  219. package/node/loop/get-max-coordinate.d.ts +2 -1
  220. package/node/loop/get-max-coordinate.js +6 -8
  221. package/node/loop/get-max-coordinate.js.map +1 -1
  222. package/node/mat/add-to-cp-tree.d.ts +3 -3
  223. package/node/mat/add-to-cp-tree.js +5 -5
  224. package/node/mat/add-to-cp-tree.js.map +1 -1
  225. package/node/mat/create-new-cp-trees.d.ts +10 -0
  226. package/node/mat/create-new-cp-trees.js +24 -0
  227. package/node/mat/create-new-cp-trees.js.map +1 -0
  228. package/node/mat/curve-piece.d.ts +1 -1
  229. package/node/mat/get-boundary-piece-beziers.d.ts +3 -3
  230. package/node/mat/get-boundary-piece-beziers.js +125 -20
  231. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  232. package/node/mat/get-branches.d.ts +1 -1
  233. package/node/mat/get-closeby-cp-if-exist.d.ts +5 -5
  234. package/node/mat/get-closeby-cp-if-exist.js +6 -5
  235. package/node/mat/get-closeby-cp-if-exist.js.map +1 -1
  236. package/node/mat/get-cp-node-to-left-or-same.d.ts +3 -3
  237. package/node/mat/get-cp-node-to-left-or-same.js +2 -2
  238. package/node/mat/get-cp-node-to-left-or-same.js.map +1 -1
  239. package/node/mat/get-largest-vertex.d.ts +1 -1
  240. package/node/mat/get-largest-vertex.js +1 -1
  241. package/node/mat/get-largest-vertex.js.map +1 -1
  242. package/node/mat/mat-meta.d.ts +2 -3
  243. package/node/mat/mat.d.ts +5 -5
  244. package/node/mat/simplify-mat.js +5 -4
  245. package/node/mat/simplify-mat.js.map +1 -1
  246. package/node/mat/trim-mat.d.ts +3 -2
  247. package/node/mat/trim-mat.js +5 -3
  248. package/node/mat/trim-mat.js.map +1 -1
  249. package/node/point-on-shape/calc-pos-order.d.ts +8 -5
  250. package/node/point-on-shape/calc-pos-order.js +7 -7
  251. package/node/point-on-shape/calc-pos-order.js.map +1 -1
  252. package/node/point-on-shape/compare-poss.d.ts +4 -0
  253. package/node/point-on-shape/compare-poss.js +12 -0
  254. package/node/point-on-shape/compare-poss.js.map +1 -1
  255. package/node/point-on-shape/get-osculating-circle.d.ts +5 -6
  256. package/node/point-on-shape/get-osculating-circle.js +17 -20
  257. package/node/point-on-shape/get-osculating-circle.js.map +1 -1
  258. package/node/point-on-shape/get-pos-corner.d.ts +18 -4
  259. package/node/point-on-shape/get-pos-corner.js +6 -6
  260. package/node/point-on-shape/get-pos-corner.js.map +1 -1
  261. package/node/point-on-shape/is-pos-corner.d.ts +3 -2
  262. package/node/point-on-shape/is-pos-corner.js.map +1 -1
  263. package/node/point-on-shape/is-pos-sharp-corner.d.ts +1 -12
  264. package/node/point-on-shape/is-pos-sharp-corner.js +4 -5
  265. package/node/point-on-shape/is-pos-sharp-corner.js.map +1 -1
  266. package/node/point-on-shape/point-on-shape.d.ts +39 -6
  267. package/node/point-on-shape/pos-to-human-string.d.ts +1 -1
  268. package/node/point-on-shape/pos-to-human-string.js.map +1 -1
  269. package/node/point-on-shape/to-p.d.ts +9 -0
  270. package/node/point-on-shape/to-p.js +13 -0
  271. package/node/point-on-shape/to-p.js.map +1 -0
  272. package/node/sat/add-debug-info.d.ts +2 -1
  273. package/node/sat/add-debug-info.js +2 -1
  274. package/node/sat/add-debug-info.js.map +1 -1
  275. package/node/sat/cull-non-cycles.d.ts +2 -1
  276. package/node/sat/cull-non-cycles.js +5 -3
  277. package/node/sat/cull-non-cycles.js.map +1 -1
  278. package/node/sat/cull.js +3 -4
  279. package/node/sat/cull.js.map +1 -1
  280. package/node/sat/get-leaves.d.ts +1 -1
  281. package/node/sat/get-leaves.js +1 -2
  282. package/node/sat/get-leaves.js.map +1 -1
  283. package/node/sat/get-sat-culls.d.ts +2 -2
  284. package/node/sat/get-sat-culls.js +3 -3
  285. package/node/sat/get-sat-culls.js.map +1 -1
  286. package/node/sat/to-scale-axis.d.ts +1 -1
  287. package/node/sat/to-scale-axis.js +2 -2
  288. package/node/sat/to-scale-axis.js.map +1 -1
  289. package/node/svg/get-loop-bounds.d.ts +7 -7
  290. package/node/svg/get-loop-bounds.js +33 -70
  291. package/node/svg/get-loop-bounds.js.map +1 -1
  292. package/node/svg/get-min-y-pos.d.ts +2 -3
  293. package/node/svg/get-min-y-pos.js +2 -2
  294. package/node/svg/get-min-y-pos.js.map +1 -1
  295. package/node/svg/get-shape-bounds.d.ts +6 -6
  296. package/node/svg/get-shape-bounds.js +6 -6
  297. package/node/svg/get-shape-bounds.js.map +1 -1
  298. package/node/utils/mutable.d.ts +4 -0
  299. package/node/utils/mutable.js +2 -0
  300. package/node/utils/mutable.js.map +1 -0
  301. package/node/utils/sum.js.map +1 -1
  302. package/node/utils/time-function-call.d.ts +14 -0
  303. package/node/utils/time-function-call.js +32 -0
  304. package/node/utils/time-function-call.js.map +1 -0
  305. package/node/vertex/remove-vertex.d.ts +1 -0
  306. package/node/vertex/remove-vertex.js +1 -1
  307. package/node/vertex/remove-vertex.js.map +1 -1
  308. package/package.json +3 -5
  309. package/src/add-n-prong.ts/join-spokes.ts +8 -6
  310. package/src/closest-boundary-point/{cull-bezier-pieces.ts → cull-bezier-pieces-1.ts} +7 -7
  311. package/src/closest-boundary-point/cull-by-loose-bounding-box.ts +15 -14
  312. package/src/closest-boundary-point/cull-by-tight-boundary-box.ts +2 -2
  313. package/src/closest-boundary-point/foot-and-endpoint-info.ts +8 -10
  314. package/src/closest-boundary-point/get-best-distance-squared.ts +18 -15
  315. package/src/closest-boundary-point/get-close-boundary-points-certified.ts +27 -31
  316. package/src/closest-boundary-point/get-potential-closest-points-on-curve-certified.ts +13 -88
  317. package/src/closest-boundary-point/root-interval-to-distance-squared-interval.ts +5 -5
  318. package/src/corner/compare-curvatures-at-interface.ts +1 -1
  319. package/src/corner/corner.ts +7 -6
  320. package/src/corner/get-corner.ts +4 -11
  321. package/src/corner/get-interface-ccw.ts +5 -5
  322. package/src/cp-node/cp-node-fs.ts +0 -5
  323. package/src/cp-node/cp-node.ts +12 -10
  324. package/src/cp-node/fs/add-distance-from.ts +1 -2
  325. package/src/cp-node/fs/clone.ts +2 -1
  326. package/src/cp-node/fs/cp-node-comparator.ts +2 -2
  327. package/src/cp-node/fs/enhance-cp-node.ts +5 -5
  328. package/src/cp-node/fs/get-boundary-bezier-parts-to-next.ts +2 -2
  329. package/src/cp-node/fs/get-cp-node-ordering.ts +4 -4
  330. package/src/cp-node/fs/get-edge-direction.ts +3 -3
  331. package/src/cp-node/fs/get-hole-closers.ts +1 -1
  332. package/src/cp-node/fs/get-implied-boundary-bezier-between.ts +2 -2
  333. package/src/cp-node/fs/get-mat-curve-between.ts +8 -6
  334. package/src/cp-node/fs/get-salience.ts +4 -4
  335. package/src/cp-node/fs/insert-cp-node.ts +10 -10
  336. package/src/cp-node/fs/is-one-prong.ts +3 -14
  337. package/src/cp-node/fs/is-order-correct.ts +6 -8
  338. package/src/cp-node/fs/is-sharp.ts +1 -1
  339. package/src/cp-node/fs/remove-cp-node.ts +4 -6
  340. package/src/cp-node/stringification/cp-node-stringifyable.ts +7 -16
  341. package/src/cp-node/stringification/from-stringifyable.ts +6 -6
  342. package/src/cp-node/stringification/to-stringifyable.ts +5 -9
  343. package/src/debug/debug-elem-types.ts +2 -3
  344. package/src/{mat → debug}/elem-type-two-prong.ts +1 -1
  345. package/src/debug/functions/check-ordering.ts +13 -16
  346. package/src/debug/functions/cmp-cp-on-delta.ts +3 -3
  347. package/src/debug/functions/draw-elem/draw-cp-node.ts +2 -2
  348. package/src/debug/functions/draw-elem/draw-elem.ts +1 -5
  349. package/src/debug/functions/draw-elem/draw-leaves.ts +2 -2
  350. package/src/debug/functions/draw-elem/draw-max-vertex.ts +3 -3
  351. package/src/debug/functions/draw-elem/draw-one-prong-at-dull-corner.ts +17 -3
  352. package/src/debug/functions/draw-elem/draw-one-prong.ts +10 -8
  353. package/src/debug/functions/draw-elem/draw-three-prong.ts +2 -2
  354. package/src/debug/functions/draw-elem/draw-two-prong.ts +4 -3
  355. package/src/debug/functions/draw-elem/draw-vertex.ts +1 -1
  356. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +2 -2
  357. package/src/debug/functions/general.ts +1 -1
  358. package/src/debug/functions/three-prong.ts +220 -220
  359. package/src/find-2-prong/add-1-prong.ts +8 -8
  360. package/src/find-2-prong/add-2-prong.ts +64 -58
  361. package/src/find-2-prong/calc-seperation-tolerance.ts +4 -8
  362. package/src/find-2-prong/cull-bezier-pieces.ts +41 -21
  363. package/src/find-2-prong/find-2-prong.ts +102 -151
  364. package/src/find-2-prong/find-and-add-2-prong.ts +23 -23
  365. package/src/find-2-prong/find-and-add-2-prongs-on-all-loops.ts +4 -6
  366. package/src/find-2-prong/find-and-add-2-prongs.ts +44 -29
  367. package/src/find-2-prong/find-and-add-hole-closing-2-prongs.ts +15 -15
  368. package/src/find-2-prong/get-initial-bezier-pieces.ts +21 -24
  369. package/src/find-2-prong/get-initial-x.ts +52 -0
  370. package/src/find-2-prong/get-medial/antipodal-point.ts +12 -0
  371. package/src/find-2-prong/get-medial/get-antipodal-points.ts +63 -0
  372. package/src/find-2-prong/get-medial/get-closest-points.ts +213 -0
  373. package/src/find-2-prong/reduce-radius.ts +38 -61
  374. package/src/find-2-prong/x-for-debugging.ts +9 -9
  375. package/src/{find-3-prong.ts → find-3-prong}/calc-better-x.ts +18 -11
  376. package/src/{find-3-prong.ts → find-3-prong}/calc-initial-3-prong-center.ts +12 -14
  377. package/src/{find-3-prong.ts → find-3-prong}/find-3-prong-for-delta3s.ts +46 -51
  378. package/src/find-3-prong/find-3-prong.ts +52 -0
  379. package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.ts +2 -2
  380. package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.ts +1 -1
  381. package/src/{find-3-prong.ts → find-3-prong}/get-closest-points.ts +8 -5
  382. package/src/find-3-prong/three-prong-info.ts +13 -0
  383. package/src/find-mat/clip-options.ts +11 -16
  384. package/src/find-mat/create-initial-cp-tree.ts +28 -33
  385. package/src/find-mat/find-mat.ts +10 -17
  386. package/src/find-mat/find-mats.ts +9 -13
  387. package/src/find-mat/fix-ordering.ts +58 -58
  388. package/src/find-mat/get-dull-corners-on-loop.ts +12 -10
  389. package/src/find-mat/get-for-1-prongs-on-loop.ts +11 -33
  390. package/src/find-mat/get-for-2-prongs-on-loop.ts +9 -12
  391. package/src/find-mat/get-meta.ts +16 -14
  392. package/src/find-mat/get-sharp-corners.ts +7 -8
  393. package/src/find-mat/mat-options.ts +22 -19
  394. package/src/floyd-warshall/floyd-warshall.ts +1 -1
  395. package/src/floyd-warshall/get-graph.ts +2 -2
  396. package/src/floyd-warshall/get-hole-closer-pairs.ts +6 -6
  397. package/src/geometry/circle.ts +1 -0
  398. package/src/geometry/get-closest-square-distance-to-rect.ts +3 -8
  399. package/src/geometry/get-closest-squared-distance-to-rotated-rect.ts +3 -2
  400. package/src/index.ts +0 -7
  401. package/src/loop/get-max-coordinate.ts +8 -9
  402. package/src/mat/add-to-cp-tree.ts +10 -11
  403. package/src/mat/clone-mat.ts +8 -4
  404. package/src/mat/clone-meta.ts +22 -10
  405. package/src/mat/create-new-cp-trees.ts +35 -0
  406. package/src/mat/curve-piece.ts +1 -1
  407. package/src/mat/get-boundary-piece-beziers.ts +153 -37
  408. package/src/mat/get-branches.ts +1 -1
  409. package/src/mat/get-closeby-cp-if-exist.ts +11 -12
  410. package/src/mat/get-cp-node-to-left-or-same.ts +5 -5
  411. package/src/mat/get-largest-3-prong.ts +2 -2
  412. package/src/mat/get-largest-vertex.ts +2 -2
  413. package/src/mat/mat-meta.ts +3 -2
  414. package/src/mat/mat.ts +5 -5
  415. package/src/mat/simplify-mat.ts +5 -4
  416. package/src/mat/trim-mat.ts +6 -4
  417. package/src/point-on-shape/calc-pos-order.ts +10 -11
  418. package/src/point-on-shape/compare-poss.ts +11 -1
  419. package/src/point-on-shape/get-osculating-circle.ts +25 -28
  420. package/src/point-on-shape/get-pos-corner.ts +14 -12
  421. package/src/point-on-shape/is-pos-corner.ts +1 -4
  422. package/src/point-on-shape/is-pos-dull-corner.ts +9 -9
  423. package/src/point-on-shape/is-pos-quite-dull-corner.ts +7 -6
  424. package/src/point-on-shape/is-pos-quite-sharp-corner.ts +7 -6
  425. package/src/point-on-shape/is-pos-sharp-corner.ts +6 -5
  426. package/src/point-on-shape/point-on-shape.ts +44 -6
  427. package/src/point-on-shape/pos-to-human-string.ts +4 -2
  428. package/src/point-on-shape/to-p.ts +19 -0
  429. package/src/sat/add-debug-info.ts +3 -3
  430. package/src/sat/cull-non-cycles.ts +8 -6
  431. package/src/sat/cull.ts +7 -8
  432. package/src/sat/get-leaves.ts +2 -4
  433. package/src/sat/get-sat-culls.ts +6 -5
  434. package/src/sat/to-scale-axis.ts +4 -5
  435. package/src/svg/get-loop-bounds.ts +61 -86
  436. package/src/svg/get-min-y-pos.ts +3 -4
  437. package/src/svg/get-shape-bounds.ts +12 -12
  438. package/src/sweep-line/are-boxes-intersecting.ts +3 -2
  439. package/src/utils/mutable.ts +7 -0
  440. package/src/utils/rad-to-deg.ts +1 -1
  441. package/src/utils/smart-log.ts +20 -0
  442. package/src/utils/sum.ts +3 -1
  443. package/src/utils/time-function-call.ts +53 -0
  444. package/src/vertex/remove-vertex.ts +1 -3
  445. package/.eslintrc.cjs +0 -69
  446. package/__tests__/cp-node/fs/get-avg-speed.spec.ts +0 -7
  447. package/__tests__/cp-node/fs/get-smoothed-speed.spec.ts +0 -7
  448. package/__tests__/cp-node/fs/get-smoothed.spec.ts +0 -7
  449. package/__tests__/cp-node/fs/get-speed.spec.ts +0 -7
  450. package/__tests__/cp-node/fs/is-order-correct.spec.ts +0 -7
  451. package/node/bezier/fit-quads-to-cubic.d.ts +0 -19
  452. package/node/bezier/fit-quads-to-cubic.js +0 -83
  453. package/node/bezier/fit-quads-to-cubic.js.map +0 -1
  454. package/node/bezier/total-curvature.d.ts +0 -14
  455. package/node/bezier/total-curvature.js +0 -5
  456. package/node/bezier/total-curvature.js.map +0 -1
  457. package/node/bezier/total-length.d.ts +0 -14
  458. package/node/bezier/total-length.js +0 -5
  459. package/node/bezier/total-length.js.map +0 -1
  460. package/node/closest-boundary-point/cull-bezier-pieces.d.ts +0 -10
  461. package/node/closest-boundary-point/cull-bezier-pieces.js.map +0 -1
  462. package/node/closest-boundary-point/dd-deflate-with-running-error.d.ts +0 -25
  463. package/node/closest-boundary-point/dd-deflate-with-running-error.js +0 -68
  464. package/node/closest-boundary-point/dd-deflate-with-running-error.js.map +0 -1
  465. package/node/contact-point/contact-point.d.ts +0 -26
  466. package/node/contact-point/contact-point.js +0 -22
  467. package/node/contact-point/contact-point.js.map +0 -1
  468. package/node/cp-node/fs/get-smoothed-speed.d.ts +0 -14
  469. package/node/cp-node/fs/get-smoothed-speed.js +0 -75
  470. package/node/cp-node/fs/get-smoothed-speed.js.map +0 -1
  471. package/node/cp-node/fs/get-speed.d.ts +0 -15
  472. package/node/cp-node/fs/get-speed.js +0 -39
  473. package/node/cp-node/fs/get-speed.js.map +0 -1
  474. package/node/debug/cp-node-for-debugging.d.ts +0 -11
  475. package/node/debug/cp-node-for-debugging.js +0 -2
  476. package/node/debug/cp-node-for-debugging.js.map +0 -1
  477. package/node/debug/functions/draw-elem/draw-speed.d.ts +0 -4
  478. package/node/debug/functions/draw-elem/draw-speed.js +0 -21
  479. package/node/debug/functions/draw-elem/draw-speed.js.map +0 -1
  480. package/node/error-analysis/gamma.d.ts +0 -26
  481. package/node/error-analysis/gamma.js +0 -35
  482. package/node/error-analysis/gamma.js.map +0 -1
  483. package/node/find-2-prong/find-and-add-2-prong.d.ts +0 -11
  484. package/node/find-2-prong/find-and-add-2-prong.js +0 -19
  485. package/node/find-2-prong/find-and-add-2-prong.js.map +0 -1
  486. package/node/find-2-prong/find-equidistant-point-on-line-dd.d.ts +0 -10
  487. package/node/find-2-prong/find-equidistant-point-on-line-dd.js +0 -56
  488. package/node/find-2-prong/find-equidistant-point-on-line-dd.js.map +0 -1
  489. package/node/find-3-prong.ts/calc-better-x.d.ts +0 -19
  490. package/node/find-3-prong.ts/calc-better-x.js.map +0 -1
  491. package/node/find-3-prong.ts/calc-initial-3-prong-center.d.ts +0 -13
  492. package/node/find-3-prong.ts/calc-initial-3-prong-center.js +0 -27
  493. package/node/find-3-prong.ts/calc-initial-3-prong-center.js.map +0 -1
  494. package/node/find-3-prong.ts/find-3-prong-for-delta3s.d.ts +0 -22
  495. package/node/find-3-prong.ts/find-3-prong-for-delta3s.js.map +0 -1
  496. package/node/find-3-prong.ts/find-3-prong.d.ts +0 -16
  497. package/node/find-3-prong.ts/find-3-prong.js.map +0 -1
  498. package/node/find-3-prong.ts/find-and-add-3-prong.js.map +0 -1
  499. package/node/find-3-prong.ts/find-and-add-3-prongs-on-loop.js.map +0 -1
  500. package/node/find-3-prong.ts/find-and-add-3-prongs.js.map +0 -1
  501. package/node/find-3-prong.ts/get-closest-points.d.ts +0 -9
  502. package/node/find-3-prong.ts/get-closest-points.js.map +0 -1
  503. package/node/mat/connect-hole-closers.d.ts +0 -3
  504. package/node/mat/connect-hole-closers.js +0 -5
  505. package/node/mat/connect-hole-closers.js.map +0 -1
  506. package/node/mat/create-new-cp-tree.d.ts +0 -9
  507. package/node/mat/create-new-cp-tree.js +0 -23
  508. package/node/mat/create-new-cp-tree.js.map +0 -1
  509. package/node/memoize-primitive.d.ts +0 -11
  510. package/node/memoize-primitive.js +0 -25
  511. package/node/memoize-primitive.js.map +0 -1
  512. package/node/point-on-shape/create-pos.d.ts +0 -4
  513. package/node/point-on-shape/create-pos.js +0 -11
  514. package/node/point-on-shape/create-pos.js.map +0 -1
  515. package/node/point-on-shape/is-pos-quite-sharp-corner.d.ts +0 -17
  516. package/node/point-on-shape/is-pos-quite-sharp-corner.js +0 -14
  517. package/node/point-on-shape/is-pos-quite-sharp-corner.js.map +0 -1
  518. package/src/bezier/fit-quads-to-cubic.ts +0 -103
  519. package/src/bezier/total-curvature.ts +0 -8
  520. package/src/bezier/total-length.ts +0 -8
  521. package/src/closest-boundary-point/closest-points-on-curve-precise.ts +0 -75
  522. package/src/closest-boundary-point/closest-points-on-curve.ts +0 -72
  523. package/src/closest-boundary-point/dd-deflate-with-running-error.ts +0 -88
  524. package/src/contact-point/contact-point.ts +0 -42
  525. package/src/cp-node/fs/get-avg-speed.ts +0 -31
  526. package/src/cp-node/fs/get-smoothed-speed.ts +0 -97
  527. package/src/cp-node/fs/get-smoothed.ts +0 -62
  528. package/src/cp-node/fs/get-speed.ts +0 -56
  529. package/src/curve/curve.ts +0 -35
  530. package/src/dbscan/dbscan.ts +0 -91
  531. package/src/debug/cp-node-for-debugging.ts +0 -15
  532. package/src/debug/functions/draw-elem/draw-speed.ts +0 -35
  533. package/src/debug/three-prong-for-debugging.ts +0 -58
  534. package/src/debug/two-prong-for-debugging.ts +0 -30
  535. package/src/dijkstra/dijkstra.ts +0 -418
  536. package/src/find-2-prong/find-and-add-2-prongs-on-all-paths.ts +0 -38
  537. package/src/find-2-prong/find-equidistant-point-on-line-dd.ts +0 -77
  538. package/src/find-2-prong/find-equidistant-point-on-line.ts +0 -40
  539. package/src/find-2-prong/pyth-trips.ts +0 -146
  540. package/src/find-3-prong.ts/add-3-prong.ts +0 -113
  541. package/src/find-3-prong.ts/array-set.ts +0 -47
  542. package/src/find-3-prong.ts/find-3-prong.ts +0 -48
  543. package/src/find-3-prong.ts/find-and-add-all-3-prongs.ts +0 -109
  544. package/src/find-mat/add-2-prongs-by-error.ts +0 -122
  545. package/src/find-mat/add-debug-info.ts +0 -93
  546. package/src/find-mat/cp-node-for-insertion.ts +0 -13
  547. package/src/find-mat/get-dull-corners.ts +0 -34
  548. package/src/find-mat/get-half-angles.ts +0 -95
  549. package/src/find-mat/get-size-params.ts +0 -34
  550. package/src/find-mat/get-total-by.ts +0 -27
  551. package/src/get-curve/get-curve-between.ts +0 -80
  552. package/src/get-curve/get-edge-direction.ts +0 -70
  553. package/src/mat/add-to-cp-graph.ts +0 -60
  554. package/src/mat/cmp-cp-on-delta.ts +0 -56
  555. package/src/mat/connect-hole-closers.ts +0 -9
  556. package/src/mat/create-new-cp-tree.ts +0 -32
  557. package/src/mat/get-edges-as-array.ts +0 -18
  558. package/src/mat/get-largest-three-prong.ts +0 -14
  559. package/src/mat/get-neighboring-cps.ts +0 -49
  560. package/src/mat/is-another-cp-closeby.ts +0 -69
  561. package/src/mat/simplify-mat-map-only.ts +0 -110
  562. package/src/memoize-primitive.ts +0 -31
  563. package/src/point-on-shape/create-pos.ts +0 -20
  564. package/src/sat/cull-by-salience.ts +0 -115
  565. package/src/svg/get-extreme.ts +0 -23
  566. package/src/utils/bezier-piece-to-bezier.ts +0 -13
  567. package/src/utils/sleep.ts +0 -7
  568. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prong.d.ts +0 -0
  569. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.d.ts +0 -0
  570. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.js +0 -0
  571. /package/node/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs.d.ts +0 -0
  572. /package/src/{find-3-prong.ts → find-3-prong}/find-and-add-3-prongs-on-loop.ts +0 -0
@@ -1,103 +0,0 @@
1
- import {
2
- classify, fromToInclErrorBound, cubicToQuadratic, getAbsAreaBetween,
3
- bezierSelfIntersection
4
- } from 'flo-bezier3';
5
-
6
-
7
- /**
8
- * TODO2 - change description - just basically copied from flo-bezier3
9
- * Approximate the given cubic bezier curve (up to the given tolerance) by
10
- * fitting an array of ordered (by `t` value) piecewise bezier curves
11
- * (of quadratic order or less).
12
- *
13
- * * the start and end point of each approximating curve lies on the cubic
14
- * curve and the the tangents of each approximating curve coincide with that of
15
- * the cubic at each such point
16
- *
17
- * @param ps a cubic bezier curve given as an ordered array of its
18
- * control point coordinates, e.g. `[[0,0], [1,1], [2,1], [2,0]]`
19
- * @param tolerance tolerance given as the maximum total absolute area difference
20
- * between the two curves
21
- *
22
- * @doc mdx
23
- */
24
- function fitQuadsToCubicTsOnly(
25
- ps: number[][],
26
- tolerance: number): number[] {
27
-
28
- const { collinear, realOrder, nodeType } = classify(ps);
29
-
30
- // if all points collinear or a line (or point)
31
- if (collinear || realOrder <= 1) {
32
- // return a quad that's a line between the first and last points
33
- // return [ps[0], [(ps[0][0] + ps[3][0])/2, (ps[0][1] + ps[3][1])/2], ps[3]];
34
- return [0,1];
35
- }
36
-
37
- if (realOrder === 2) {
38
- // already a quadratic in disguise
39
-
40
- // It is not possible that `toQuadraticFromCubic(ps)` be undefined here
41
- // since the `real order` is exactly 2 and the control points are *not*
42
- // collinear.
43
- return [0,1];
44
- }
45
-
46
- const stack: number[][] = [];
47
-
48
- // if endpoints coincide
49
- if (ps[0][0] === ps[3][0] && ps[0][1] === ps[3][1]) {
50
- stack.push([0, 0.5], [0.5,1]);
51
- } else if (nodeType === 'cusp') {
52
- const t = bezierSelfIntersection(ps)[0];
53
- stack.push([0,t], [t,1]); // split at cusp
54
- } else if (nodeType === 'crunode') {
55
- const ts = bezierSelfIntersection(ps);
56
- if (ts.length > 1) {
57
- stack.push(
58
- [0, ts[0]],
59
- [ts[0], ts[1]],
60
- [ts[1], 1]
61
- ); // split at intersections
62
- } else {
63
- // the intersection is outside the range [0,1]
64
- stack.push([0,1]);
65
- }
66
- } else {
67
- stack.push([0,1]);
68
- }
69
-
70
- const qs: number[][][] = [];
71
- const r: number[] = [];
72
- while (stack.length !== 0) {
73
- const ts = stack.pop()!;
74
-
75
- const [tS,tE] = ts;
76
- /** the piece of the cubic bezier to approximate */
77
- const psCubic = fromToInclErrorBound(ps, tS, tE).ps;
78
- const psQuad = cubicToQuadratic(psCubic);
79
- // const spanRatio = tE - tS;
80
- if (psQuad === undefined ||
81
- // spanRatio*getAbsAreaBetween(psQuad, psCubic) > tolerance) {
82
- getAbsAreaBetween(psQuad, psCubic) > tolerance) {
83
-
84
- const tM = (tE + tS)/2;
85
- stack.push([tS,tM], [tM,tE]); // split cubic in 2 equal pieces
86
- } else {
87
- qs.push(psQuad);
88
- r.push(tS);
89
- }
90
- }
91
-
92
- r.reverse();
93
- r.push(1);
94
-
95
- return r;
96
- }
97
-
98
-
99
- export { fitQuadsToCubicTsOnly }
100
-
101
-
102
- // TESTING
103
- // fitQuadsToCubicTsOnly([[0,0],[1,0],[0.5,1],[2,0.4]], 0.00001); //?
@@ -1,8 +0,0 @@
1
- import { totalCurvature } from "flo-bezier3";
2
- import { memoize } from "flo-memoize";
3
-
4
-
5
- const totalCurvature$ = memoize(totalCurvature);
6
-
7
-
8
- export { totalCurvature$ }
@@ -1,8 +0,0 @@
1
- import { totalLength } from "flo-bezier3";
2
- import { memoize } from "flo-memoize";
3
-
4
-
5
- const totalLength$ = memoize(totalLength);
6
-
7
-
8
- export { totalLength$ }
@@ -1,75 +0,0 @@
1
- // import { ddDeflate, allRootsCertified, RootInterval } from 'flo-poly';
2
- // import { evalDeCasteljauDd, getFootpointPolyDd } from 'flo-bezier3';
3
- // import { Curve } from "../curve/curve.js";
4
-
5
-
6
- // /**
7
- // * @internal
8
- // * @param curve The curve
9
- // * @param p The point from which to check
10
- // * @param tRange The allowed t range
11
- // * @param touchedCurve The bezier on which p is located
12
- // * @param t The t value of the bezier that locates p
13
- // */
14
- // function closestPointsOnCurvePrecise(
15
- // curve: Curve,
16
- // p: number[],
17
- // [tS,tE]: number[] = [0,1],
18
- // touchedCurve: Curve,
19
- // t: number): {
20
- // p: number[];
21
- // t: number;
22
- // }[] {
23
-
24
- // const _poly = getFootpointPolyDd(curve.ps, p);
25
-
26
- // const poly = curve === touchedCurve
27
- // ? ddDeflate(_poly, t)
28
- // : _poly;
29
-
30
- // const roots: Omit<RootInterval,'multiplicity'>[] =
31
- // allRootsCertified(poly, tS, tE);
32
-
33
- // // Also test the endpoints
34
- // const dontPush0 = (
35
- // (t === 1 && curve === touchedCurve.next) ||
36
- // (t === 0 && curve === touchedCurve)
37
- // );
38
-
39
- // const dontPush1 = (
40
- // (t === 0 && curve === touchedCurve.prev) ||
41
- // (t === 1 && curve === touchedCurve)
42
- // );
43
-
44
- // if (tS === 0) {
45
- // if (!dontPush0) { roots.push({ tS: 0, tE: 0 }); }
46
- // } else if (tS === 1) {
47
- // if (!dontPush1) { roots.push({ tS: 1, tE: 1 }); }
48
- // } else {
49
- // roots.push({ tS: tS, tE: tS });
50
- // }
51
-
52
- // if (tE === 0) {
53
- // if (!dontPush0) { roots.push({ tS: 0, tE: 0 }); }
54
- // } else if (tE === 1) {
55
- // if (!dontPush1) { roots.push({ tS: 1, tE: 1 }); }
56
- // } else {
57
- // roots.push({ tS: tE, tE: tE });
58
- // }
59
-
60
- // const ps = roots.map(
61
- // root => {
62
- // const tS = root.tS;
63
- // const tE = root.tE;
64
- // const t = tS < 0
65
- // ? 0
66
- // : tE > 1 ? 1 : (tS + tE)/2;
67
- // return { p: evalDeCasteljauDd(curve.ps,[0,t]).map(v => v[1]), t }
68
- // }
69
- // );
70
-
71
- // return ps;
72
- // }
73
-
74
-
75
- // export { closestPointsOnCurvePrecise }
@@ -1,72 +0,0 @@
1
- import { allRoots, deflate } from 'flo-poly';
2
- import { evalDeCasteljau, getFootpointPoly } from 'flo-bezier3';
3
- import { Curve } from "../curve/curve.js";
4
- import { eAdd, growExpansion } from 'big-float-ts';
5
-
6
-
7
- /**
8
- * @internal
9
- * @param curve The curve
10
- * @param p The point from which to check
11
- * @param tRange The allowed t range
12
- * @param touchedCurve The bezier on which p is located
13
- * @param t The t value of the bezier that locates p
14
- */
15
- function closestPointsOnCurve(
16
- curve: Curve,
17
- p: number[],
18
- [tS,tE]: number[] = [0,1],
19
- touchedCurve: Curve,
20
- t: number): {
21
- p: number[];
22
- t: number;
23
- }[] {
24
-
25
- const _poly = getFootpointPoly(curve.ps, p);
26
-
27
- const poly = curve === touchedCurve
28
- ? deflate(_poly, t)
29
- : _poly;
30
-
31
- const roots = allRoots(poly, tS, tE);
32
-
33
- // Also test the endpoints
34
- let push0 = true;
35
- let push1 = true;
36
- if ((t === 1 && curve === touchedCurve.next) ||
37
- (t === 0 && curve === touchedCurve)) {
38
- push0 = false;
39
- }
40
- if ((t === 0 && curve === touchedCurve.prev) ||
41
- (t === 1 && curve === touchedCurve)) {
42
- push1 = false;
43
- }
44
-
45
- if (tS === 0) {
46
- if (push0) { roots.push(0); }
47
- } else if (tS === 1) {
48
- if (push1) { roots.push(1); }
49
- } else {
50
- roots.push(tS);
51
- }
52
-
53
- if (tE === 0) {
54
- if (push0) { roots.push(0); }
55
- } else if (tE === 1) {
56
- if (push1) { roots.push(1); }
57
- } else {
58
- roots.push(tE);
59
- }
60
-
61
- const ps = roots.map(
62
- r => {
63
- const t = r < 0 ? 0 : r > 1 ? 1 : r;
64
- return { p: evalDeCasteljau(curve.ps,t), t }
65
- }
66
- );
67
-
68
- return ps;
69
- }
70
-
71
-
72
- export { closestPointsOnCurve }
@@ -1,88 +0,0 @@
1
- // TODO - import from `flo-poly` in the future
2
- import { ddMultDouble2 } from "double-double";
3
- import { ddAddDd } from "double-double";
4
- import { γγ } from '../error-analysis/gamma.js';
5
-
6
-
7
- // We *have* to do the below❗ The assignee is a getter❗ The assigned is a pure function❗ Otherwise code is too slow❗
8
- const qmd = ddMultDouble2;
9
- const qaq = ddAddDd;
10
-
11
- const { abs } = Math;
12
-
13
- const γγ3 = γγ(3);
14
-
15
-
16
- /**
17
- * Deflates the given polynomial *approximately* by removing a factor (x - t).
18
- *
19
- * @param p a polynomial with coefficients given densely as an array of
20
- * double-double precision floating point numbers from highest to lowest power,
21
- * e.g. `[[0,5],[0,-3],[0,0]]` represents the polynomial `5x^2 - 3x`
22
- * @param pE the coefficient-wise absolute error of the input polynomial that
23
- * still need to be multiplied by γγ3, i.e. it is `γγ3` times too big.
24
- * @param t an evaluation point of the polynomial.
25
- *
26
- * @example
27
- * ```typescript
28
- * // The polynomial x^3 - 5x^2 + 8x - 4 has a root at 1 and a double root at 2
29
- * ddDeflate([[0,1], [0,-5], [0,8], [0,-4]], [0,2]); //=> [[0,1], [0,-3], [0,2]]
30
- * ddDeflate([[0,1], [0,-3], [0,2], [0,2]); //=> [[0,1], [0,-1]]
31
- * ddDeflate([[0,1], [0,-1]], [0,1]); //=> [[0,1]]
32
- * ```
33
- *
34
- * @doc
35
- */
36
- function ddDeflateWithRunningError(
37
- p: number[][],
38
- pE: number[],
39
- t: number): {
40
- coeffs: number[][];
41
- errBound: number[];
42
- } {
43
-
44
- //--------------------------------------------------------------------------
45
- // `var` -> a variable
46
- // `$var` -> the double precision approximation to `var`
47
- // `_var` -> the absolute value of $var (a prefix underscore on a variable means absolute value)
48
- // `var_` -> the error in var (a postfix underscore means error bound but should still be multiplied by 3*γ²)
49
- // `_var_` -> means both absolute value and absolute error bound
50
- // recall: `a*b`, where both `a` and `b` have errors |a| and |b| we get for the
51
- // * error bound of (a*b) === a_|b| + |a|b_ + |a*b| (when either of a and b is double)
52
- // * error bound of (a*b) === a_|b| + |a|b_ + 2|a*b| (when both a and b is double-double)
53
- // * error bound of (a+b) === a_ + b_ + |a+b| (when a and/or b is double or double-double)
54
- // * the returned errors need to be multiplied by 3γ² to get the true error
55
- // * can use either `$var` or `var[var.length-1]` (the approx value) in error calculations
56
- // due to multiplication by 3*γ² and not 3*u²
57
- //--------------------------------------------------------------------------
58
- const d = p.length - 1;
59
- const bs = [p[0]]; // coefficients
60
- let b_ = pE[0]; // running error
61
- const bEs = [b_]; // coefficient-wise error bound
62
-
63
- for (let i=1; i<d; i++) {
64
- // p[i] + t*bs[i-1];
65
-
66
- const a = bs[i-1];
67
- const $m = t*a[1];
68
- const _t = abs(t);
69
- const m_ = _t*b_ + abs($m);
70
-
71
- const pi = p[i];
72
- const p_ = pE[i];
73
- b_ = p_ + m_ + abs(pi[1] + $m);
74
-
75
- const b = qaq(pi,qmd(t,a));
76
-
77
- bs.push(b);
78
- bEs.push(b_);
79
- }
80
-
81
- return {
82
- coeffs: bs,
83
- errBound: bEs.map(e => γγ3*e)
84
- };
85
- }
86
-
87
-
88
- export { ddDeflateWithRunningError }
@@ -1,42 +0,0 @@
1
- import { PointOnShape } from '../point-on-shape/point-on-shape.js';
2
- import { comparePoss } from '../point-on-shape/compare-poss.js';
3
- import { Circle } from '../geometry/circle.js';
4
-
5
-
6
- /**
7
- * Represents a point on the shape boundary for which MAT data has been
8
- * calculated.
9
- */
10
- interface ContactPoint {
11
- /** Identifies the point on the shape boundary. */
12
- pointOnShape: PointOnShape;
13
- /** The maximal disk circle touching this point. */
14
- circle: Circle;
15
- /** Internally used to order two points lying at the same planar point. */
16
- order: number;
17
- /** Internally used to order two points lying at the same planar point. */
18
- order2: number;
19
- }
20
-
21
-
22
- /**
23
- * Primarily for internal use.
24
- *
25
- * Compares the two contact points according to their order along the shape
26
- * boundary. Returns > 0 if a > b, < 0 if a < b or 0 if a === b.
27
- * @param a The first contact point.
28
- * @param b The second contact point.
29
- */
30
- function compareCps(a: ContactPoint, b: ContactPoint) {
31
- let res = comparePoss(a.pointOnShape, b.pointOnShape);
32
-
33
- if (res !== 0) { return res; }
34
-
35
- res = a.order - b.order;
36
- if (res !== 0) { return res; }
37
-
38
- return a.order2 - b.order2;
39
- }
40
-
41
-
42
- export { ContactPoint, compareCps }
@@ -1,31 +0,0 @@
1
- import { totalAbsoluteCurvature, totalLength } from "flo-bezier3";
2
- import { memoize } from "flo-memoize";
3
- import { totalCurvature$ } from "../../bezier/total-curvature.js";
4
- import { CpNode } from "../cp-node.js";
5
- import { getMatCurveToNext } from "./get-mat-curve-to-next.js";
6
- import { getRealProngCount } from "./get-real-prong-count.js";
7
-
8
- const { min, abs } = Math;
9
-
10
-
11
- const getAvgSpeed$ = memoize(getAvgSpeed);
12
-
13
-
14
- function getAvgSpeed(cpNode: CpNode): number | undefined {
15
- if (getRealProngCount(cpNode) !== 2) {
16
- return 0;
17
- }
18
-
19
- const { radius: r } = cpNode.cp.circle;
20
- const matPs = getMatCurveToNext(cpNode);
21
- const T = totalCurvature$(matPs);
22
- const l = totalLength(matPs);
23
- if (l === 0) {
24
- return undefined;
25
- }
26
-
27
- return -r*T/l;
28
- }
29
-
30
-
31
- export { getAvgSpeed, getAvgSpeed$ }
@@ -1,97 +0,0 @@
1
- import { memoize } from "flo-memoize";
2
- import { totalCurvature$ } from "../../bezier/total-curvature.js";
3
- import { totalLength$ } from "../../bezier/total-length.js";
4
- import { memoizePrimitive } from "../../memoize-primitive.js";
5
- import { CpNode } from "../cp-node.js";
6
- import { getMatCurveToNext$ } from "./get-mat-curve-to-next.js";
7
- import { getRealProngCount } from "./get-real-prong-count.js";
8
- import { isFullyTerminating } from "./is-fully-terminating.js";
9
-
10
-
11
- const RLen = 40;
12
-
13
- const getSmoothedSpeed$ = memoizePrimitive(
14
- function (L: number) {
15
- return memoize(
16
- function getSmoothedSpeed(
17
- cpNode: CpNode): number | undefined {
18
-
19
- let cpStart = cpNode;
20
-
21
- let cumLB = 0;
22
- let cumLF = 0;
23
- let curB = cpStart.prev;
24
- let curF = cpStart;
25
- let cumKB = 0;
26
- let cumKF = 0;
27
- let cumLRB = 0;
28
- let cumLRF = 0;
29
- while (cumLRF < L/2/RLen &&
30
- curF !== cpStart.prev &&
31
- !isFullyTerminating(curF) &&
32
- getRealProngCount(curF) <= 2) {
33
- const { radius: r } = curF.cp.circle;
34
- const ps = getMatCurveToNext$(curF);
35
- const turn = totalCurvature$(ps);
36
-
37
- let rot = 0;
38
- // if (getProngCount(curF) >= 3) {
39
- // rot = -getInterfaceRotation(
40
- // tangentAt0(ps),
41
- // tangentAt1(curF.prev.cp.pointOnShape.curve.ps)
42
- // );
43
- // }
44
-
45
- const l = totalLength$(getMatCurveToNext$(curF));
46
- cumKF += r*(turn + rot);
47
- cumLF += l;
48
- cumLRF += l/r;
49
-
50
- curF = curF.next;
51
- }
52
- while (cumLRB < L/2/RLen &&
53
- curB !== cpStart &&
54
- !isFullyTerminating(curB) &&
55
- getRealProngCount(curB) <= 2) {
56
- const { radius: r } = curB.cp.circle;
57
- const ps = getMatCurveToNext$(curB);
58
- const turn = totalCurvature$(ps);
59
-
60
- let rot = 0;
61
- // if (getProngCount(curB) >= 3) {
62
- // rot = -getInterfaceRotation(
63
- // tangentAt0(ps),
64
- // tangentAt1(curB.prev.cp.pointOnShape.curve.ps)
65
- // )
66
- // }
67
-
68
- const l = totalLength$(getMatCurveToNext$(curB));
69
- cumKB += r*(turn + rot);
70
- cumLB += l;
71
- cumLRB += l/r;
72
-
73
- curB = curB.prev;
74
- }
75
- const cumL = cumLB + cumLF;
76
- const cumK = cumKB + cumKF;
77
-
78
- if (cumL === 0) {
79
- return undefined;
80
- }
81
-
82
- const x = -cumK/cumL;
83
-
84
- // f(x) = 1 - exp(-x)
85
- // f(x) = 1 - 1/(1 + x)
86
- // f(x) = x/(a + x)
87
- // f(x) = tanh(x)
88
-
89
- // return 1 - Math.E**(-x)
90
- return x;
91
- }
92
- )
93
- }
94
- );
95
-
96
-
97
- export { getSmoothedSpeed$ }
@@ -1,62 +0,0 @@
1
- import { totalAbsoluteCurvature, totalCurvature, totalLength } from "flo-bezier3";
2
- import { memoize } from "flo-memoize";
3
- import { totalCurvature$ } from "../../bezier/total-curvature.js";
4
- import { totalLength$ } from "../../bezier/total-length.js";
5
- import { memoizePrimitive } from "../../memoize-primitive.js";
6
- import { CpNode } from "../cp-node.js";
7
- import { getAvgSpeed, getAvgSpeed$ } from "./get-avg-speed.js";
8
- import { getMatCurveToNext, getMatCurveToNext$ } from "./get-mat-curve-to-next.js";
9
- import { getSpeed } from "./get-speed.js";
10
-
11
-
12
- const getSmoothed$ = memoizePrimitive(
13
- function (L: number) {
14
- return memoize(
15
- function getSmoothed(
16
- cpNode: CpNode) {
17
-
18
- // return getAvg$(cpNode)
19
- // return getAvgCurvature(cpNode)
20
- let cpStart = cpNode;
21
-
22
- let cumLB = 0;
23
- let cumLF = 0;
24
- let curB = cpStart.prev;
25
- let curF = cpStart;
26
- let cumRTurnB = 0;
27
- let cumRTurnF = 0;
28
- while (cumLB < L/2 && curB !== cpStart) {
29
- const { radius: r } = curB.cp.circle;
30
- const ps = getMatCurveToNext$(curB);
31
- const absK = totalCurvature$(ps);
32
- const l = totalLength$(getMatCurveToNext$(curB));
33
- cumRTurnB += r*absK;
34
- cumLB += l;
35
-
36
- curB = curB.prev;
37
- }
38
- while (cumLF < L/2 && curF !== cpStart.prev) {
39
- const { radius: r } = curF.cp.circle;
40
- const ps = getMatCurveToNext$(curF);
41
- const absK = totalCurvature$(ps);
42
- const l = totalLength$(getMatCurveToNext$(curF));
43
- cumRTurnF += r*absK;
44
- cumLF += l;
45
-
46
- curF = curF.next;
47
- }
48
- const cumL = cumLB + cumLF;
49
- const cumRTurn = cumRTurnB + cumRTurnF;
50
-
51
- if (cumL === 0) {
52
- return undefined;
53
- }
54
-
55
- return { cumRTurn, cumL };
56
- }
57
- )
58
- }
59
- );
60
-
61
-
62
- export { getSmoothed$ }
@@ -1,56 +0,0 @@
1
- import { totalAbsoluteCurvature, totalLength } from "flo-bezier3";
2
- import { memoize } from "flo-memoize";
3
- import { CpNode } from "../cp-node.js";
4
- import { getMatCurveToNext } from "./get-mat-curve-to-next.js";
5
- import { getRealProngCount } from "./get-real-prong-count.js";
6
-
7
- const getSpeed$ = memoize(getSpeed);
8
-
9
-
10
- function getSpeed(cpNode: CpNode): number | undefined {
11
- if (getRealProngCount(cpNode) !== 2) {
12
- return 0;
13
- }
14
-
15
- const { radius: r } = cpNode.cp.circle;
16
- const matPs = getMatCurveToNext(cpNode);
17
- const absK = totalAbsoluteCurvature(matPs, [0,1]);
18
- const l = totalLength(matPs);
19
- if (l === 0) {
20
- return undefined; // TODO2
21
- }
22
- // const avgK = absK/l;
23
- const avgK = absK;
24
-
25
- return avgK*r;
26
- }
27
-
28
-
29
-
30
-
31
- // function getSpeed() {
32
- // const cpNodeF = cpNode;
33
- // const cpNodeB = cpNode.next.prevOnCircle;
34
- // const matPs = getMatCurveToNext(cpNodeF);
35
- // const boundaryPsF = getBoundaryBeziersToNext(cpNodeF);
36
- // const boundaryPsB = getBoundaryBeziersToNext(cpNodeB);
37
-
38
- // const lF = sum(boundaryPsF.map(ps => totalLength(ps)));
39
- // const lB = sum(boundaryPsB.map(ps => totalLength(ps)));
40
-
41
- // const l = totalLength(matPs);
42
- // const ll = l === 0 ? 0.001 : l;
43
-
44
- // const _speedF = lF/ll;
45
- // const _speedB = lB/ll;
46
-
47
- // const speedF = _speedF < 1 ? _speedF : 1;
48
- // const speedB = _speedB < 1 ? _speedB : 1;
49
-
50
-
51
- // const speed = min(speedF, speedB);
52
-
53
- // return speed;
54
- // }
55
-
56
- export { getSpeed, getSpeed$ }
@@ -1,35 +0,0 @@
1
- // import type { Loop } from 'flo-boolean';
2
-
3
-
4
- // /**
5
- // * Represents a bezier curve on the shape boundary / loop.
6
- // */
7
- // interface Curve {
8
- // /**
9
- // * The curve's ordered index in the loop. This imposes a cycling
10
- // * ordering of the curves in the loop
11
- // */
12
- // readonly idx: number;
13
- // /** The bezier control points. */
14
- // readonly ps: number[][];
15
- // /**
16
- // * The closed loop of bezier curves representing the shape
17
- // * boundary this curve belongs to.
18
- // */
19
- // readonly loop: Loop;
20
- // /**
21
- // * The previous curve (when going in a negative direction around
22
- // * the shape boundary, i.e. clockwise for the outer shape and anti-clockwise
23
- // * for the holes (if any))
24
- // */
25
- // readonly prev: Curve;
26
- // /**
27
- // * The next curve (when going in a positive direction around
28
- // * the shape boundary, i.e. anti-clockwise for the outer shape and clockwise
29
- // * for the holes (if any))
30
- // */
31
- // readonly next: Curve;
32
- // }
33
-
34
-
35
- // export { Curve }