flo-mat 2.0.1 → 2.0.3

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 (405) hide show
  1. package/.eslintrc.cjs +69 -0
  2. package/README.md +9 -27
  3. package/browser/index.js +29604 -7008
  4. package/browser/index.min.js +1 -2
  5. package/node/circle.d.ts +20 -20
  6. package/node/circle.js +31 -31
  7. package/node/circle.js.map +1 -1
  8. package/node/compare-curvatures-at-interface.d.ts +19 -19
  9. package/node/compare-curvatures-at-interface.js +124 -124
  10. package/node/compare-curvatures-at-interface.js.map +1 -1
  11. package/node/contact-point.d.ts +26 -26
  12. package/node/contact-point.js +25 -25
  13. package/node/cp-node/clone.d.ts +8 -8
  14. package/node/cp-node/clone.js +31 -31
  15. package/node/cp-node/clone.js.map +1 -1
  16. package/node/cp-node/remove.d.ts +9 -9
  17. package/node/cp-node/remove.js +19 -19
  18. package/node/cp-node/remove.js.map +1 -1
  19. package/node/cp-node.d.ts +202 -202
  20. package/node/cp-node.js +320 -320
  21. package/node/cp-node.js.map +1 -1
  22. package/node/curve.d.ts +46 -46
  23. package/node/curve.js +88 -88
  24. package/node/curve.js.map +1 -1
  25. package/node/debug/cp-node-for-debugging.d.ts +11 -11
  26. package/node/debug/cp-node-for-debugging.js +1 -1
  27. package/node/debug/debug-elem-types.d.ts +32 -32
  28. package/node/debug/debug-elem-types.js +1 -1
  29. package/node/debug/debug.d.ts +50 -50
  30. package/node/debug/debug.js +75 -75
  31. package/node/debug/functions/draw-elem/bounding-hull.d.ts +3 -3
  32. package/node/debug/functions/draw-elem/bounding-hull.js +7 -7
  33. package/node/debug/functions/draw-elem/bounding-hull.js.map +1 -1
  34. package/node/debug/functions/draw-elem/branch.d.ts +4 -4
  35. package/node/debug/functions/draw-elem/branch.js +22 -22
  36. package/node/debug/functions/draw-elem/branch.js.map +1 -1
  37. package/node/debug/functions/draw-elem/culls.d.ts +4 -4
  38. package/node/debug/functions/draw-elem/culls.js +21 -21
  39. package/node/debug/functions/draw-elem/culls.js.map +1 -1
  40. package/node/debug/functions/draw-elem/draw-circle-percent.d.ts +3 -3
  41. package/node/debug/functions/draw-elem/draw-circle-percent.js +12 -12
  42. package/node/debug/functions/draw-elem/draw-circle-percent.js.map +1 -1
  43. package/node/debug/functions/draw-elem/draw-elem.d.ts +8 -8
  44. package/node/debug/functions/draw-elem/draw-elem.js +45 -45
  45. package/node/debug/functions/draw-elem/draw-elem.js.map +1 -1
  46. package/node/debug/functions/draw-elem/dull-corner.d.ts +4 -4
  47. package/node/debug/functions/draw-elem/dull-corner.js +10 -10
  48. package/node/debug/functions/draw-elem/dull-corner.js.map +1 -1
  49. package/node/debug/functions/draw-elem/leaves.d.ts +4 -4
  50. package/node/debug/functions/draw-elem/leaves.js +12 -12
  51. package/node/debug/functions/draw-elem/leaves.js.map +1 -1
  52. package/node/debug/functions/draw-elem/loop.d.ts +4 -4
  53. package/node/debug/functions/draw-elem/loop.js +11 -11
  54. package/node/debug/functions/draw-elem/loops.d.ts +4 -4
  55. package/node/debug/functions/draw-elem/loops.js +6 -6
  56. package/node/debug/functions/draw-elem/loose-bounding-box.d.ts +3 -3
  57. package/node/debug/functions/draw-elem/loose-bounding-box.js +9 -9
  58. package/node/debug/functions/draw-elem/loose-bounding-box.js.map +1 -1
  59. package/node/debug/functions/draw-elem/mat.d.ts +4 -4
  60. package/node/debug/functions/draw-elem/mat.js +30 -30
  61. package/node/debug/functions/draw-elem/mat.js.map +1 -1
  62. package/node/debug/functions/draw-elem/max-vertex.d.ts +4 -4
  63. package/node/debug/functions/draw-elem/max-vertex.js +8 -8
  64. package/node/debug/functions/draw-elem/max-vertex.js.map +1 -1
  65. package/node/debug/functions/draw-elem/min-y.d.ts +4 -4
  66. package/node/debug/functions/draw-elem/min-y.js +13 -13
  67. package/node/debug/functions/draw-elem/min-y.js.map +1 -1
  68. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.d.ts +4 -4
  69. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js +12 -12
  70. package/node/debug/functions/draw-elem/one-prong-at-dull-corner.js.map +1 -1
  71. package/node/debug/functions/draw-elem/one-prong.d.ts +4 -4
  72. package/node/debug/functions/draw-elem/one-prong.js +16 -16
  73. package/node/debug/functions/draw-elem/one-prong.js.map +1 -1
  74. package/node/debug/functions/draw-elem/sharp-corner.d.ts +4 -4
  75. package/node/debug/functions/draw-elem/sharp-corner.js +9 -9
  76. package/node/debug/functions/draw-elem/sharp-corner.js.map +1 -1
  77. package/node/debug/functions/draw-elem/three-prong.d.ts +4 -4
  78. package/node/debug/functions/draw-elem/three-prong.js +16 -16
  79. package/node/debug/functions/draw-elem/three-prong.js.map +1 -1
  80. package/node/debug/functions/draw-elem/tight-bounding-box.d.ts +3 -3
  81. package/node/debug/functions/draw-elem/tight-bounding-box.js +7 -7
  82. package/node/debug/functions/draw-elem/tight-bounding-box.js.map +1 -1
  83. package/node/debug/functions/draw-elem/two-prong.d.ts +4 -4
  84. package/node/debug/functions/draw-elem/two-prong.js +36 -36
  85. package/node/debug/functions/draw-elem/two-prong.js.map +1 -1
  86. package/node/debug/functions/draw-elem/vertex.d.ts +4 -4
  87. package/node/debug/functions/draw-elem/vertex.js +27 -27
  88. package/node/debug/functions/draw-elem/vertex.js.map +1 -1
  89. package/node/debug/functions/general.d.ts +48 -48
  90. package/node/debug/functions/general.js +52 -52
  91. package/node/debug/functions/general.js.map +1 -1
  92. package/node/debug/functions/three-prong.d.ts +11 -11
  93. package/node/debug/functions/three-prong.js +184 -184
  94. package/node/debug/functions/three-prong.js.map +1 -1
  95. package/node/debug/functions/two-prong.d.ts +13 -13
  96. package/node/debug/functions/two-prong.js +117 -117
  97. package/node/debug/functions/two-prong.js.map +1 -1
  98. package/node/debug/three-prong-for-debugging.d.ts +31 -31
  99. package/node/debug/three-prong-for-debugging.js +20 -20
  100. package/node/debug/two-prong-for-debugging.d.ts +26 -26
  101. package/node/debug/two-prong-for-debugging.js +1 -1
  102. package/node/find-mats.d.ts +26 -26
  103. package/node/find-mats.js +122 -125
  104. package/node/find-mats.js.map +1 -1
  105. package/node/get-boundary-bezier-parts-to-next.d.ts +9 -9
  106. package/node/get-boundary-bezier-parts-to-next.js +42 -42
  107. package/node/get-boundary-bezier-parts-to-next.js.map +1 -1
  108. package/node/get-boundary-beziers-to-next.d.ts +8 -8
  109. package/node/get-boundary-beziers-to-next.js +44 -44
  110. package/node/get-boundary-beziers-to-next.js.map +1 -1
  111. package/node/get-bounding-box-.d.ts +2 -2
  112. package/node/get-bounding-box-.js +4 -4
  113. package/node/get-branches.d.ts +12 -12
  114. package/node/get-branches.js +68 -68
  115. package/node/get-branches.js.map +1 -1
  116. package/node/get-curve/get-curve-between.d.ts +9 -9
  117. package/node/get-curve/get-curve-between.js +56 -56
  118. package/node/get-curve/get-curve-between.js.map +1 -1
  119. package/node/get-curve/get-edge-direction.d.ts +9 -9
  120. package/node/get-curve/get-edge-direction.js +53 -53
  121. package/node/get-curve/get-edge-direction.js.map +1 -1
  122. package/node/get-curve-to-next.d.ts +9 -9
  123. package/node/get-curve-to-next.js +11 -11
  124. package/node/get-interface-ccw.d.ts +24 -24
  125. package/node/get-interface-ccw.js +97 -97
  126. package/node/get-interface-ccw.js.map +1 -1
  127. package/node/index.d.ts +36 -36
  128. package/node/index.js +32 -32
  129. package/node/loop/get-max-coordinate.d.ts +10 -10
  130. package/node/loop/get-max-coordinate.js +43 -43
  131. package/node/loop/get-max-coordinate.js.map +1 -1
  132. package/node/loop.d.ts +16 -16
  133. package/node/loop.js +34 -34
  134. package/node/loop.js.map +1 -1
  135. package/node/mat/add-to-cp-graph.d.ts +16 -16
  136. package/node/mat/add-to-cp-graph.js +30 -30
  137. package/node/mat/add-to-cp-graph.js.map +1 -1
  138. package/node/mat/bezier-piece.d.ts +12 -12
  139. package/node/mat/bezier-piece.js +1 -1
  140. package/node/mat/closest-boundary-point/closest-points-on-curve.d.ts +14 -14
  141. package/node/mat/closest-boundary-point/closest-points-on-curve.js +72 -73
  142. package/node/mat/closest-boundary-point/closest-points-on-curve.js.map +1 -1
  143. package/node/mat/closest-boundary-point/cull-bezier-pieces.d.ts +9 -9
  144. package/node/mat/closest-boundary-point/cull-bezier-pieces.js +19 -19
  145. package/node/mat/closest-boundary-point/cull-bezier-pieces.js.map +1 -1
  146. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.d.ts +11 -11
  147. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js +24 -24
  148. package/node/mat/closest-boundary-point/cull-by-loose-bounding-box.js.map +1 -1
  149. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.d.ts +11 -11
  150. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js +26 -26
  151. package/node/mat/closest-boundary-point/cull-by-tight-boundary-box.js.map +1 -1
  152. package/node/mat/closest-boundary-point/get-best-distance-squared.d.ts +8 -8
  153. package/node/mat/closest-boundary-point/get-best-distance-squared.js +24 -24
  154. package/node/mat/closest-boundary-point/get-best-distance-squared.js.map +1 -1
  155. package/node/mat/closest-boundary-point/get-close-boundary-points.d.ts +17 -17
  156. package/node/mat/closest-boundary-point/get-close-boundary-points.js +80 -80
  157. package/node/mat/closest-boundary-point/get-close-boundary-points.js.map +1 -1
  158. package/node/mat/closest-boundary-point/get-closest-boundary-point.d.ts +18 -18
  159. package/node/mat/closest-boundary-point/get-closest-boundary-point.js +40 -40
  160. package/node/mat/closest-boundary-point/get-closest-boundary-point.js.map +1 -1
  161. package/node/mat/corner.d.ts +37 -37
  162. package/node/mat/corner.js +1 -1
  163. package/node/mat/create-new-cp-tree.d.ts +9 -9
  164. package/node/mat/create-new-cp-tree.js +23 -23
  165. package/node/mat/create-new-cp-tree.js.map +1 -1
  166. package/node/mat/elem-type-two-prong.d.ts +3 -3
  167. package/node/mat/elem-type-two-prong.js +1 -1
  168. package/node/mat/find-mat/add-1-prong.d.ts +12 -12
  169. package/node/mat/find-mat/add-1-prong.js +42 -42
  170. package/node/mat/find-mat/add-1-prong.js.map +1 -1
  171. package/node/mat/find-mat/add-2-prong.d.ts +21 -21
  172. package/node/mat/find-mat/add-2-prong.js +192 -192
  173. package/node/mat/find-mat/add-2-prong.js.map +1 -1
  174. package/node/mat/find-mat/add-3-prong.d.ts +19 -19
  175. package/node/mat/find-mat/add-3-prong.js +54 -54
  176. package/node/mat/find-mat/add-3-prong.js.map +1 -1
  177. package/node/mat/find-mat/add-debug-info.d.ts +9 -9
  178. package/node/mat/find-mat/add-debug-info.js +67 -69
  179. package/node/mat/find-mat/add-debug-info.js.map +1 -1
  180. package/node/mat/find-mat/create-get-interesting-points-on-loop.d.ts +11 -11
  181. package/node/mat/find-mat/create-get-interesting-points-on-loop.js +51 -51
  182. package/node/mat/find-mat/create-get-interesting-points-on-loop.js.map +1 -1
  183. package/node/mat/find-mat/create-initial-cp-graph.d.ts +12 -12
  184. package/node/mat/find-mat/create-initial-cp-graph.js +40 -40
  185. package/node/mat/find-mat/create-initial-cp-graph.js.map +1 -1
  186. package/node/mat/find-mat/find-2-prong/add-debug-info.d.ts +8 -8
  187. package/node/mat/find-mat/find-2-prong/add-debug-info.js +21 -21
  188. package/node/mat/find-mat/find-2-prong/add-debug-info.js.map +1 -1
  189. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.d.ts +11 -11
  190. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js +29 -29
  191. package/node/mat/find-mat/find-2-prong/cull-bezier-pieces.js.map +1 -1
  192. package/node/mat/find-mat/find-2-prong/find-2-prong.d.ts +37 -37
  193. package/node/mat/find-mat/find-2-prong/find-2-prong.js +232 -232
  194. package/node/mat/find-mat/find-2-prong/find-2-prong.js.map +1 -1
  195. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.d.ts +9 -9
  196. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js +39 -39
  197. package/node/mat/find-mat/find-2-prong/find-equidistant-point-on-line.js.map +1 -1
  198. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.d.ts +11 -11
  199. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js +37 -37
  200. package/node/mat/find-mat/find-2-prong/get-initial-bezier-pieces.js.map +1 -1
  201. package/node/mat/find-mat/find-2-prong/x-for-debugging.d.ts +9 -9
  202. package/node/mat/find-mat/find-2-prong/x-for-debugging.js +1 -1
  203. package/node/mat/find-mat/find-3-prong/calc-better-x.d.ts +19 -19
  204. package/node/mat/find-mat/find-3-prong/calc-better-x.js +36 -36
  205. package/node/mat/find-mat/find-3-prong/calc-better-x.js.map +1 -1
  206. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.d.ts +13 -13
  207. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js +25 -25
  208. package/node/mat/find-mat/find-3-prong/calc-initial-3-prong-center.js.map +1 -1
  209. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.d.ts +22 -22
  210. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js +159 -159
  211. package/node/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.js.map +1 -1
  212. package/node/mat/find-mat/find-3-prong/find-3-prong.d.ts +16 -16
  213. package/node/mat/find-mat/find-3-prong/find-3-prong.js +76 -76
  214. package/node/mat/find-mat/find-3-prong/find-3-prong.js.map +1 -1
  215. package/node/mat/find-mat/find-3-prong/get-closest-points.d.ts +9 -9
  216. package/node/mat/find-mat/find-3-prong/get-closest-points.js +16 -16
  217. package/node/mat/find-mat/find-3-prong/get-closest-points.js.map +1 -1
  218. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.d.ts +15 -15
  219. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js +20 -20
  220. package/node/mat/find-mat/find-and-add-2-prongs-on-all-paths.js.map +1 -1
  221. package/node/mat/find-mat/find-and-add-2-prongs.d.ts +16 -16
  222. package/node/mat/find-mat/find-and-add-2-prongs.js +73 -74
  223. package/node/mat/find-mat/find-and-add-2-prongs.js.map +1 -1
  224. package/node/mat/find-mat/find-and-add-3-prongs.d.ts +13 -13
  225. package/node/mat/find-mat/find-and-add-3-prongs.js +146 -147
  226. package/node/mat/find-mat/find-and-add-3-prongs.js.map +1 -1
  227. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.d.ts +14 -14
  228. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js +33 -33
  229. package/node/mat/find-mat/find-and-add-hole-closing-2-prongs.js.map +1 -1
  230. package/node/mat/find-mat/get-potential-2-prongs.d.ts +4 -4
  231. package/node/mat/find-mat/get-potential-2-prongs.js +16 -16
  232. package/node/mat/find-mat/get-potential-2-prongs.js.map +1 -1
  233. package/node/mat/find-mat/get-sharp-corners.d.ts +4 -4
  234. package/node/mat/find-mat/get-sharp-corners.js +17 -17
  235. package/node/mat/find-mat/get-sharp-corners.js.map +1 -1
  236. package/node/mat/geometry/get-closest-square-distance-to-rect.d.ts +5 -5
  237. package/node/mat/geometry/get-closest-square-distance-to-rect.js +49 -49
  238. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.d.ts +5 -5
  239. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js +15 -15
  240. package/node/mat/geometry/get-closest-squared-distance-to-rotated-rect.js.map +1 -1
  241. package/node/mat/get-boundary-piece-beziers.d.ts +11 -11
  242. package/node/mat/get-boundary-piece-beziers.js +58 -58
  243. package/node/mat/get-boundary-piece-beziers.js.map +1 -1
  244. package/node/mat/get-contact-circles-at-interface.d.ts +8 -8
  245. package/node/mat/get-contact-circles-at-interface.js +20 -20
  246. package/node/mat/get-contact-circles-at-interface.js.map +1 -1
  247. package/node/mat/get-largest-vertex.d.ts +4 -4
  248. package/node/mat/get-largest-vertex.js +9 -9
  249. package/node/mat/get-leaves.d.ts +4 -4
  250. package/node/mat/get-leaves.js +12 -12
  251. package/node/mat/get-leaves.js.map +1 -1
  252. package/node/mat/get-neighboring-cps.d.ts +14 -14
  253. package/node/mat/get-neighboring-cps.js +30 -30
  254. package/node/mat/get-neighboring-cps.js.map +1 -1
  255. package/node/mat/get-two-prong-type.d.ts +5 -5
  256. package/node/mat/get-two-prong-type.js +8 -8
  257. package/node/mat/is-another-cp-closeby.d.ts +20 -20
  258. package/node/mat/is-another-cp-closeby.js +55 -55
  259. package/node/mat/is-another-cp-closeby.js.map +1 -1
  260. package/node/mat/simplify-mat-map-only.d.ts +23 -23
  261. package/node/mat/simplify-mat-map-only.js +80 -80
  262. package/node/mat/simplify-mat-map-only.js.map +1 -1
  263. package/node/mat/to-scale-axis/add-debug-info.d.ts +7 -7
  264. package/node/mat/to-scale-axis/add-debug-info.js +13 -13
  265. package/node/mat/to-scale-axis/add-debug-info.js.map +1 -1
  266. package/node/mat/to-scale-axis/cull-non-cycles.d.ts +9 -9
  267. package/node/mat/to-scale-axis/cull-non-cycles.js +51 -51
  268. package/node/mat/to-scale-axis/cull-non-cycles.js.map +1 -1
  269. package/node/mat/to-scale-axis/cull.d.ts +12 -12
  270. package/node/mat/to-scale-axis/cull.js +132 -132
  271. package/node/mat/to-scale-axis/cull.js.map +1 -1
  272. package/node/mat/trim-mat.d.ts +8 -8
  273. package/node/mat/trim-mat.js +16 -16
  274. package/node/mat/trim-mat.js.map +1 -1
  275. package/node/mat.d.ts +22 -22
  276. package/node/mat.js +1 -1
  277. package/node/point-on-shape.d.ts +73 -73
  278. package/node/point-on-shape.js +167 -167
  279. package/node/point-on-shape.js.map +1 -1
  280. package/node/simplify-mat.d.ts +16 -16
  281. package/node/simplify-mat.js +71 -71
  282. package/node/simplify-mat.js.map +1 -1
  283. package/node/svg/get-loop-bounds.d.ts +12 -12
  284. package/node/svg/get-loop-bounds.js +80 -80
  285. package/node/svg/get-loop-bounds.js.map +1 -1
  286. package/node/svg/get-min-y-pos.d.ts +8 -8
  287. package/node/svg/get-min-y-pos.js +9 -9
  288. package/node/svg/get-shape-bounds.d.ts +9 -9
  289. package/node/svg/get-shape-bounds.js +35 -35
  290. package/node/svg/get-shape-bounds.js.map +1 -1
  291. package/node/sweep-line/sweep-line.d.ts +18 -18
  292. package/node/sweep-line/sweep-line.js +72 -72
  293. package/node/sweep-line/sweep-line.js.map +1 -1
  294. package/node/to-scale-axis.d.ts +16 -16
  295. package/node/to-scale-axis.js +74 -73
  296. package/node/to-scale-axis.js.map +1 -1
  297. package/node/traverse-edges.d.ts +10 -10
  298. package/node/traverse-edges.js +21 -21
  299. package/node/traverse-edges.js.map +1 -1
  300. package/node/traverse-vertices.d.ts +12 -12
  301. package/node/traverse-vertices.js +27 -27
  302. package/node/traverse-vertices.js.map +1 -1
  303. package/package.json +29 -24
  304. package/src/circle.ts +3 -3
  305. package/src/compare-curvatures-at-interface.ts +36 -36
  306. package/src/cp-node/clone.ts +6 -6
  307. package/src/cp-node/remove.ts +4 -4
  308. package/src/cp-node.ts +20 -20
  309. package/src/curve.ts +19 -19
  310. package/src/debug/functions/draw-elem/bounding-hull.ts +2 -2
  311. package/src/debug/functions/draw-elem/branch.ts +4 -4
  312. package/src/debug/functions/draw-elem/culls.ts +4 -4
  313. package/src/debug/functions/draw-elem/draw-circle-percent.ts +2 -2
  314. package/src/debug/functions/draw-elem/draw-elem.ts +1 -1
  315. package/src/debug/functions/draw-elem/dull-corner.ts +3 -3
  316. package/src/debug/functions/draw-elem/leaves.ts +4 -4
  317. package/src/debug/functions/draw-elem/loose-bounding-box.ts +2 -2
  318. package/src/debug/functions/draw-elem/mat.ts +4 -4
  319. package/src/debug/functions/draw-elem/max-vertex.ts +2 -2
  320. package/src/debug/functions/draw-elem/min-y.ts +3 -3
  321. package/src/debug/functions/draw-elem/one-prong-at-dull-corner.ts +4 -4
  322. package/src/debug/functions/draw-elem/one-prong.ts +4 -4
  323. package/src/debug/functions/draw-elem/sharp-corner.ts +2 -2
  324. package/src/debug/functions/draw-elem/three-prong.ts +7 -7
  325. package/src/debug/functions/draw-elem/tight-bounding-box.ts +1 -1
  326. package/src/debug/functions/draw-elem/two-prong.ts +1 -1
  327. package/src/debug/functions/draw-elem/vertex.ts +20 -14
  328. package/src/debug/functions/general.ts +3 -3
  329. package/src/debug/functions/three-prong.ts +37 -37
  330. package/src/debug/functions/two-prong.ts +15 -15
  331. package/src/find-mats.ts +19 -19
  332. package/src/get-boundary-bezier-parts-to-next.ts +8 -8
  333. package/src/get-boundary-beziers-to-next.ts +8 -8
  334. package/src/get-branches.ts +7 -7
  335. package/src/get-curve/get-curve-between.ts +21 -21
  336. package/src/get-curve/get-edge-direction.ts +13 -14
  337. package/src/get-interface-ccw.ts +12 -12
  338. package/src/loop/get-max-coordinate.ts +7 -7
  339. package/src/loop.ts +4 -4
  340. package/src/mat/add-to-cp-graph.ts +8 -8
  341. package/src/mat/closest-boundary-point/closest-points-on-curve.ts +5 -6
  342. package/src/mat/closest-boundary-point/cull-bezier-pieces.ts +1 -1
  343. package/src/mat/closest-boundary-point/cull-by-loose-bounding-box.ts +5 -5
  344. package/src/mat/closest-boundary-point/cull-by-tight-boundary-box.ts +5 -5
  345. package/src/mat/closest-boundary-point/get-best-distance-squared.ts +5 -5
  346. package/src/mat/closest-boundary-point/get-close-boundary-points.ts +15 -15
  347. package/src/mat/closest-boundary-point/get-closest-boundary-point.ts +4 -4
  348. package/src/mat/cmp-cp-on-delta.ts +5 -5
  349. package/src/mat/create-new-cp-tree.ts +3 -3
  350. package/src/mat/find-mat/add-1-prong.ts +5 -5
  351. package/src/mat/find-mat/add-2-prong.ts +42 -42
  352. package/src/mat/find-mat/add-3-prong.ts +1 -1
  353. package/src/mat/find-mat/add-debug-info.ts +18 -20
  354. package/src/mat/find-mat/create-get-interesting-points-on-loop.ts +4 -4
  355. package/src/mat/find-mat/create-initial-cp-graph.ts +11 -11
  356. package/src/mat/find-mat/find-2-prong/add-debug-info.ts +4 -4
  357. package/src/mat/find-mat/find-2-prong/cull-bezier-pieces.ts +5 -5
  358. package/src/mat/find-mat/find-2-prong/find-2-prong.ts +27 -27
  359. package/src/mat/find-mat/find-2-prong/find-equidistant-point-on-line.ts +7 -7
  360. package/src/mat/find-mat/find-2-prong/get-initial-bezier-pieces.ts +4 -4
  361. package/src/mat/find-mat/find-3-prong/calc-better-x.ts +4 -4
  362. package/src/mat/find-mat/find-3-prong/calc-initial-3-prong-center.ts +3 -3
  363. package/src/mat/find-mat/find-3-prong/find-3-prong-for-delta3s.ts +37 -37
  364. package/src/mat/find-mat/find-3-prong/find-3-prong.ts +16 -16
  365. package/src/mat/find-mat/find-3-prong/get-closest-points.ts +1 -1
  366. package/src/mat/find-mat/find-and-add-2-prongs-on-all-paths.ts +2 -2
  367. package/src/mat/find-mat/find-and-add-2-prongs.ts +14 -16
  368. package/src/mat/find-mat/find-and-add-3-prongs.ts +19 -19
  369. package/src/mat/find-mat/find-and-add-hole-closing-2-prongs.ts +6 -6
  370. package/src/mat/find-mat/get-potential-2-prongs.ts +4 -4
  371. package/src/mat/find-mat/get-sharp-corners.ts +4 -4
  372. package/src/mat/find-mat/get-total-abs-curvature.ts +1 -1
  373. package/src/mat/geometry/get-closest-squared-distance-to-rotated-rect.ts +3 -3
  374. package/src/mat/get-boundary-piece-beziers.ts +5 -5
  375. package/src/mat/get-contact-circles-at-interface.ts +1 -1
  376. package/src/mat/get-edges-as-array.ts +2 -2
  377. package/src/mat/get-leaves.ts +2 -2
  378. package/src/mat/get-neighboring-cps.ts +1 -1
  379. package/src/mat/is-another-cp-closeby.ts +9 -9
  380. package/src/mat/simplify-mat-map-only.ts +15 -15
  381. package/src/mat/to-scale-axis/add-debug-info.ts +6 -3
  382. package/src/mat/to-scale-axis/add-to-tree.ts +10 -10
  383. package/src/mat/to-scale-axis/calc-groups.ts +19 -19
  384. package/src/mat/to-scale-axis/create-spacial-tree.ts +4 -4
  385. package/src/mat/to-scale-axis/cull-non-cycles.ts +5 -5
  386. package/src/mat/to-scale-axis/cull.ts +5 -5
  387. package/src/mat/to-scale-axis/get-engulfed-vertices.ts +18 -18
  388. package/src/mat/trim-mat.ts +1 -1
  389. package/src/point-on-shape.ts +16 -16
  390. package/src/simplify-mat.ts +10 -10
  391. package/src/svg/get-curvature-at-interface.ts +6 -8
  392. package/src/svg/get-extreme.ts +1 -1
  393. package/src/svg/get-loop-bounds.ts +13 -13
  394. package/src/svg/get-shape-bounds.ts +4 -4
  395. package/src/sweep-line/are-boxes-intersecting.ts +4 -4
  396. package/src/sweep-line/sweep-line.ts +8 -8
  397. package/src/to-scale-axis.ts +18 -17
  398. package/src/traverse-edges.ts +2 -2
  399. package/src/traverse-vertices.ts +2 -2
  400. package/tsconfig.json +0 -1
  401. package/webpack.config.cjs +12 -63
  402. package/browser/index.min.js.LICENSE.txt +0 -2819
  403. package/browser/index.module.js +0 -7149
  404. package/browser/index.module.min.js +0 -2
  405. package/browser/index.module.min.js.LICENSE.txt +0 -2819
@@ -1,69 +1,69 @@
1
- import { tangent } from 'flo-bezier3';
2
- import { cross, toUnitVector } from 'flo-vector2d';
3
- import { getCurveToNext } from './get-curve-to-next.js';
4
- /** @hidden */
5
- const defaultTolerance = 1; // 1 degree
6
- /**
7
- * Traverses all edges (depth first) of the given MAT tree starting at the given
8
- * vertex (represented by a [[CpNode]]). Returns the result as an array of
9
- * smooth branches, where smoothness is total or within a given tolerance.
10
- * @param cpNode Any [[CpNode]] representing the start vertex.
11
- * @param tolerance Tolerance given as the degrees difference of the unit
12
- * direction vectors at the interface between curves. A tolerance of zero means
13
- * perfect smoothness is required.
14
- */
15
- function getBranches(cpNode, tolerance = defaultTolerance) {
16
- // Start from a leaf
17
- while (!cpNode.isFullyTerminating()) {
18
- cpNode = cpNode.next;
19
- }
20
- let branches = [];
21
- // Since the tree is unrooted we must iterate in all directions from the
22
- // given vertex.
23
- let cps = [cpNode.prevOnCircle];
24
- let branchCpNodes = [];
25
- while (cps.length) {
26
- let cp = cps.pop();
27
- branchCpNodes.push(cp);
28
- let children = cp.getChildren();
29
- if (cp.isFullyTerminating()) {
30
- if (branchCpNodes.length > 1) {
31
- branches.push(branchCpNodes);
32
- }
33
- branchCpNodes = [];
34
- continue;
35
- }
36
- if (children.length === 1) {
37
- cps.push(children[0]);
38
- continue;
39
- }
40
- children = children.filter(cpNode => !cpNode.isTerminating());
41
- if (children.length === 0) {
42
- branches.push(branchCpNodes);
43
- branchCpNodes = [];
44
- continue;
45
- }
46
- if (children.length > 1) {
47
- // More than one branch comes together
48
- branches.push(branchCpNodes);
49
- branchCpNodes = [];
50
- cps.push(...children);
51
- continue;
52
- }
53
- let backPointingTan = toUnitVector(tangent(getCurveToNext(cp.next.prevOnCircle), 0));
54
- let forwardPointingTan = toUnitVector(tangent(getCurveToNext(children[0]), 0));
55
- let cross_ = cross(backPointingTan, forwardPointingTan);
56
- let angle = Math.abs(Math.asin(cross_) * (180 / Math.PI));
57
- if (angle > tolerance) {
58
- branches.push(branchCpNodes);
59
- branchCpNodes = [];
60
- }
61
- cps.push(children[0]);
62
- }
63
- if (branchCpNodes.length) {
64
- branches.push(branchCpNodes);
65
- }
66
- return branches;
67
- }
68
- export { getBranches };
1
+ import { tangent } from 'flo-bezier3';
2
+ import { cross, toUnitVector } from 'flo-vector2d';
3
+ import { getCurveToNext } from './get-curve-to-next.js';
4
+ /** @hidden */
5
+ const defaultTolerance = 1; // 1 degree
6
+ /**
7
+ * Traverses all edges (depth first) of the given MAT tree starting at the given
8
+ * vertex (represented by a [[CpNode]]). Returns the result as an array of
9
+ * smooth branches, where smoothness is total or within a given tolerance.
10
+ * @param cpNode Any [[CpNode]] representing the start vertex.
11
+ * @param tolerance Tolerance given as the degrees difference of the unit
12
+ * direction vectors at the interface between curves. A tolerance of zero means
13
+ * perfect smoothness is required.
14
+ */
15
+ function getBranches(cpNode, tolerance = defaultTolerance) {
16
+ // Start from a leaf
17
+ while (!cpNode.isFullyTerminating()) {
18
+ cpNode = cpNode.next;
19
+ }
20
+ const branches = [];
21
+ // Since the tree is unrooted we must iterate in all directions from the
22
+ // given vertex.
23
+ const cps = [cpNode.prevOnCircle];
24
+ let branchCpNodes = [];
25
+ while (cps.length) {
26
+ const cp = cps.pop();
27
+ branchCpNodes.push(cp);
28
+ let children = cp.getChildren();
29
+ if (cp.isFullyTerminating()) {
30
+ if (branchCpNodes.length > 1) {
31
+ branches.push(branchCpNodes);
32
+ }
33
+ branchCpNodes = [];
34
+ continue;
35
+ }
36
+ if (children.length === 1) {
37
+ cps.push(children[0]);
38
+ continue;
39
+ }
40
+ children = children.filter(cpNode => !cpNode.isTerminating());
41
+ if (children.length === 0) {
42
+ branches.push(branchCpNodes);
43
+ branchCpNodes = [];
44
+ continue;
45
+ }
46
+ if (children.length > 1) {
47
+ // More than one branch comes together
48
+ branches.push(branchCpNodes);
49
+ branchCpNodes = [];
50
+ cps.push(...children);
51
+ continue;
52
+ }
53
+ const backPointingTan = toUnitVector(tangent(getCurveToNext(cp.next.prevOnCircle), 0));
54
+ const forwardPointingTan = toUnitVector(tangent(getCurveToNext(children[0]), 0));
55
+ const cross_ = cross(backPointingTan, forwardPointingTan);
56
+ const angle = Math.abs(Math.asin(cross_) * (180 / Math.PI));
57
+ if (angle > tolerance) {
58
+ branches.push(branchCpNodes);
59
+ branchCpNodes = [];
60
+ }
61
+ cps.push(children[0]);
62
+ }
63
+ if (branchCpNodes.length) {
64
+ branches.push(branchCpNodes);
65
+ }
66
+ return branches;
67
+ }
68
+ export { getBranches };
69
69
  //# sourceMappingURL=get-branches.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-branches.js","sourceRoot":"","sources":["../src/get-branches.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-branches.js","sourceRoot":"","sources":["../src/get-branches.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { CpNode } from '../cp-node.js';
2
- /**
3
- * Returns the bezier curve from the maximal disk of one [[CpNode]] to another
4
- * [[CpNode]]'s maximal disk.
5
- * @param cpNodeFrom
6
- * @param cpNodeTo
7
- */
8
- declare function getCurveBetween(cpNodeFrom: CpNode, cpNodeTo: CpNode): number[][];
9
- export { getCurveBetween };
1
+ import { CpNode } from '../cp-node.js';
2
+ /**
3
+ * Returns the bezier curve from the maximal disk of one [[CpNode]] to another
4
+ * [[CpNode]]'s maximal disk.
5
+ * @param cpNodeFrom
6
+ * @param cpNodeTo
7
+ */
8
+ declare function getCurveBetween(cpNodeFrom: CpNode, cpNodeTo: CpNode): number[][];
9
+ export { getCurveBetween };
@@ -1,57 +1,57 @@
1
- import { fromTo, dot, cross, rotate90Degrees, interpolate, translate, lineLineIntersection } from 'flo-vector2d';
2
- import { getEdgeDirection } from './get-edge-direction.js';
3
- /** @hidden */
4
- const TOLERANCE_ADD_2PRONG = 0.01;
5
- /** @hidden */
6
- const TOLERANCE_USE_LINE = 0.0001; // else cubic
7
- /**
8
- * Returns the bezier curve from the maximal disk of one [[CpNode]] to another
9
- * [[CpNode]]'s maximal disk.
10
- * @param cpNodeFrom
11
- * @param cpNodeTo
12
- */
13
- function getCurveBetween(cpNodeFrom, cpNodeTo) {
14
- let fromCc = cpNodeFrom.cp.circle.center;
15
- let fromL = getEdgeDirection(cpNodeFrom);
16
- let toCc = cpNodeTo.cp.circle.center;
17
- let toL = getEdgeDirection(cpNodeTo.prevOnCircle);
18
- let mid = lineLineIntersection(fromL, toL);
19
- let c = fromTo(fromCc, toCc);
20
- let twisted;
21
- if (!mid) {
22
- twisted = true;
23
- }
24
- else {
25
- let a = fromTo(fromCc, mid);
26
- let b = fromTo(toCc, mid);
27
- twisted = dot(a, c) < 0 || dot(b, c) > 0;
28
- }
29
- if (!twisted) {
30
- return [fromCc, mid, toCc];
31
- }
32
- let r = rotate90Degrees(c);
33
- let w1 = fromTo(fromL[0], fromL[1]); // This is a unit vector
34
- let w2 = fromTo(toL[0], toL[1]); // This is a unit vector
35
- let d1 = Math.abs(cross(c, w1)) / (3 * 3);
36
- let d2 = Math.abs(cross(c, w2)) / (3 * 3);
37
- if (d1 > TOLERANCE_ADD_2PRONG || d2 > TOLERANCE_ADD_2PRONG) {
38
- // TODO - not within tolerance - must add additional 2-prong
39
- return [fromCc, toCc];
40
- }
41
- if (d1 > TOLERANCE_USE_LINE || d2 > TOLERANCE_USE_LINE) {
42
- // approximate with cubic bezier
43
- let m1 = interpolate(fromCc, toCc, 1 / 3);
44
- let m2 = interpolate(fromCc, toCc, 2 / 3);
45
- let v1 = translate(r, m1);
46
- let v2 = translate(r, m2);
47
- let l1 = [m1, v1];
48
- let l2 = [m2, v2];
49
- let mid1 = lineLineIntersection(fromL, l1);
50
- let mid2 = lineLineIntersection(toL, l2);
51
- return [fromCc, mid1, mid2, toCc];
52
- }
53
- // Within tolerance - approximate with a straight line.
54
- return [fromCc, toCc];
55
- }
56
- export { getCurveBetween };
1
+ import { fromTo, dot, cross, rotate90Degrees, interpolate, translate, lineLineIntersection } from 'flo-vector2d';
2
+ import { getEdgeDirection } from './get-edge-direction.js';
3
+ /** @hidden */
4
+ const TOLERANCE_ADD_2PRONG = 0.01;
5
+ /** @hidden */
6
+ const TOLERANCE_USE_LINE = 0.0001; // else cubic
7
+ /**
8
+ * Returns the bezier curve from the maximal disk of one [[CpNode]] to another
9
+ * [[CpNode]]'s maximal disk.
10
+ * @param cpNodeFrom
11
+ * @param cpNodeTo
12
+ */
13
+ function getCurveBetween(cpNodeFrom, cpNodeTo) {
14
+ const fromCc = cpNodeFrom.cp.circle.center;
15
+ const fromL = getEdgeDirection(cpNodeFrom);
16
+ const toCc = cpNodeTo.cp.circle.center;
17
+ const toL = getEdgeDirection(cpNodeTo.prevOnCircle);
18
+ const mid = lineLineIntersection(fromL, toL);
19
+ const c = fromTo(fromCc, toCc);
20
+ let twisted;
21
+ if (!mid) {
22
+ twisted = true;
23
+ }
24
+ else {
25
+ const a = fromTo(fromCc, mid);
26
+ const b = fromTo(toCc, mid);
27
+ twisted = dot(a, c) < 0 || dot(b, c) > 0;
28
+ }
29
+ if (!twisted) {
30
+ return [fromCc, mid, toCc];
31
+ }
32
+ const r = rotate90Degrees(c);
33
+ const w1 = fromTo(fromL[0], fromL[1]); // This is a unit vector
34
+ const w2 = fromTo(toL[0], toL[1]); // This is a unit vector
35
+ const d1 = Math.abs(cross(c, w1)) / (3 * 3);
36
+ const d2 = Math.abs(cross(c, w2)) / (3 * 3);
37
+ if (d1 > TOLERANCE_ADD_2PRONG || d2 > TOLERANCE_ADD_2PRONG) {
38
+ // TODO - not within tolerance - must add additional 2-prong
39
+ return [fromCc, toCc];
40
+ }
41
+ if (d1 > TOLERANCE_USE_LINE || d2 > TOLERANCE_USE_LINE) {
42
+ // approximate with cubic bezier
43
+ const m1 = interpolate(fromCc, toCc, 1 / 3);
44
+ const m2 = interpolate(fromCc, toCc, 2 / 3);
45
+ const v1 = translate(r, m1);
46
+ const v2 = translate(r, m2);
47
+ const l1 = [m1, v1];
48
+ const l2 = [m2, v2];
49
+ const mid1 = lineLineIntersection(fromL, l1);
50
+ const mid2 = lineLineIntersection(toL, l2);
51
+ return [fromCc, mid1, mid2, toCc];
52
+ }
53
+ // Within tolerance - approximate with a straight line.
54
+ return [fromCc, toCc];
55
+ }
56
+ export { getCurveBetween };
57
57
  //# sourceMappingURL=get-curve-between.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-curve-between.js","sourceRoot":"","sources":["../../src/get-curve/get-curve-between.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-curve-between.js","sourceRoot":"","sources":["../../src/get-curve/get-curve-between.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { CpNode } from '../cp-node.js';
2
- /**
3
- * @hidden
4
- * Returns a line segment of unit length starting in the given Vertex center and
5
- * pointing in the direction of the medial axis (viewed as a rooted tree).
6
- * @param cpNode
7
- */
8
- declare function getEdgeDirection(cpNode: CpNode): number[][];
9
- export { getEdgeDirection };
1
+ import { CpNode } from '../cp-node.js';
2
+ /**
3
+ * @hidden
4
+ * Returns a line segment of unit length starting in the given Vertex center and
5
+ * pointing in the direction of the medial axis (viewed as a rooted tree).
6
+ * @param cpNode
7
+ */
8
+ declare function getEdgeDirection(cpNode: CpNode): number[][];
9
+ export { getEdgeDirection };
@@ -1,54 +1,54 @@
1
- import { toUnitVector, fromTo, rotate, translate, rotate90Degrees, reverse, dot } from 'flo-vector2d';
2
- import { tangent } from 'flo-bezier3';
3
- import { isPosSharpCorner } from '../point-on-shape.js';
4
- /**
5
- * @hidden
6
- * Returns a line segment of unit length starting in the given Vertex center and
7
- * pointing in the direction of the medial axis (viewed as a rooted tree).
8
- * @param cpNode
9
- */
10
- function getEdgeDirection(cpNode) {
11
- let circleCenter = cpNode.cp.circle.center;
12
- let cp1 = cpNode;
13
- let cp2 = cpNode.nextOnCircle;
14
- let pos1 = cp1.cp.pointOnShape;
15
- let pos2 = cp2.cp.pointOnShape;
16
- let p1 = pos1.p;
17
- let p2 = pos2.p;
18
- let vDir;
19
- //if (!PointOnShape.isSharpCorner(pos1)) {
20
- if (!isPosSharpCorner(pos1)) {
21
- if (p1[0] === p2[0] && p1[1] === p2[1]) {
22
- vDir = fromTo(p1, circleCenter); // A 1-prong
23
- }
24
- else {
25
- vDir = rotate90Degrees(fromTo(p1, p2)); // not a 1-prong.
26
- }
27
- }
28
- else {
29
- let curve1;
30
- let curve2;
31
- // TODO - test if pos1.t can ever be 0 - it is terminating
32
- if (pos1.t === 0) {
33
- curve1 = pos1.curve;
34
- curve2 = pos1.curve.prev;
35
- }
36
- else if (pos1.t === 1) {
37
- curve1 = pos1.curve.next;
38
- curve2 = pos1.curve;
39
- }
40
- let tan1 = toUnitVector(tangent(curve1.ps, 0));
41
- let tan2 = reverse(toUnitVector(tangent(curve2.ps, 1)));
42
- let x = dot(tan1, tan2);
43
- // Recall the identities sin(acos(x)) = sqrt(1-x^2), etc. Also
44
- // recall the half angle formulas. Then the rotation matrix, R, can
45
- // be calculated.
46
- let cosθ = Math.sqrt((1 + x) / 2);
47
- let sinθ = Math.sqrt((1 - x) / 2);
48
- vDir = rotate(sinθ, cosθ, tan2);
49
- }
50
- let v = translate(toUnitVector(vDir), circleCenter);
51
- return [circleCenter, v];
52
- }
53
- export { getEdgeDirection };
1
+ import { toUnitVector, fromTo, rotate, translate, rotate90Degrees, reverse, dot } from 'flo-vector2d';
2
+ import { tangent } from 'flo-bezier3';
3
+ import { isPosSharpCorner } from '../point-on-shape.js';
4
+ /**
5
+ * @hidden
6
+ * Returns a line segment of unit length starting in the given Vertex center and
7
+ * pointing in the direction of the medial axis (viewed as a rooted tree).
8
+ * @param cpNode
9
+ */
10
+ function getEdgeDirection(cpNode) {
11
+ const circleCenter = cpNode.cp.circle.center;
12
+ const cp1 = cpNode;
13
+ const cp2 = cpNode.nextOnCircle;
14
+ const pos1 = cp1.cp.pointOnShape;
15
+ const pos2 = cp2.cp.pointOnShape;
16
+ const p1 = pos1.p;
17
+ const p2 = pos2.p;
18
+ let vDir;
19
+ //if (!PointOnShape.isSharpCorner(pos1)) {
20
+ if (!isPosSharpCorner(pos1)) {
21
+ if (p1[0] === p2[0] && p1[1] === p2[1]) {
22
+ vDir = fromTo(p1, circleCenter); // A 1-prong
23
+ }
24
+ else {
25
+ vDir = rotate90Degrees(fromTo(p1, p2)); // not a 1-prong.
26
+ }
27
+ }
28
+ else {
29
+ let curve1;
30
+ let curve2;
31
+ // TODO - test if pos1.t can ever be 0 - it is terminating
32
+ if (pos1.t === 0) {
33
+ curve1 = pos1.curve;
34
+ curve2 = pos1.curve.prev;
35
+ }
36
+ else if (pos1.t === 1) {
37
+ curve1 = pos1.curve.next;
38
+ curve2 = pos1.curve;
39
+ }
40
+ const tan1 = toUnitVector(tangent(curve1.ps, 0));
41
+ const tan2 = reverse(toUnitVector(tangent(curve2.ps, 1)));
42
+ const x = dot(tan1, tan2);
43
+ // Recall the identities sin(acos(x)) = sqrt(1-x^2), etc. Also
44
+ // recall the half angle formulas. Then the rotation matrix, R, can
45
+ // be calculated.
46
+ const cosθ = Math.sqrt((1 + x) / 2);
47
+ const sinθ = Math.sqrt((1 - x) / 2);
48
+ vDir = rotate(sinθ, cosθ, tan2);
49
+ }
50
+ const v = translate(toUnitVector(vDir), circleCenter);
51
+ return [circleCenter, v];
52
+ }
53
+ export { getEdgeDirection };
54
54
  //# sourceMappingURL=get-edge-direction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-edge-direction.js","sourceRoot":"","sources":["../../src/get-curve/get-edge-direction.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,EACzE,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,MAAc;IAEpC,IAAI,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAE3C,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,IAAI,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;IAE9B,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC;IAC/B,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC;IAE/B,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAChB,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAEhB,IAAI,IAAI,CAAC;IAET,0CAA0C;IAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;QACzB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;YACpC,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY;SAChD;aAAM;YACH,IAAI,GAAG,eAAe,CAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAE,CAAC,CAAC,iBAAiB;SAC9D;KACJ;SAAM;QACH,IAAI,MAAM,CAAC;QACX,IAAI,MAAM,CAAC;QACX,0DAA0D;QAC1D,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;YACd,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SAC5B;aAAM,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;YACrB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;SACvB;QAED,IAAI,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,IAAI,GAAG,OAAO,CAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QAE1D,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACxB,+DAA+D;QAC/D,oEAAoE;QACpE,iBAAiB;QACjB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;QAE9B,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KACnC;IAED,IAAI,CAAC,GAAG,SAAS,CACb,YAAY,CAAC,IAAI,CAAC,EAClB,YAAY,CACf,CAAC;IAEF,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"get-edge-direction.js","sourceRoot":"","sources":["../../src/get-curve/get-edge-direction.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,EACzE,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,MAAc;IACpC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;IAE7C,MAAM,GAAG,GAAG,MAAM,CAAC;IACnB,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC;IAEhC,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC;IAEjC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IAElB,IAAI,IAAI,CAAC;IAET,0CAA0C;IAC1C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;QACzB,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE;YACpC,IAAI,GAAG,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,YAAY;SAChD;aAAM;YACH,IAAI,GAAG,eAAe,CAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAE,CAAC,CAAC,iBAAiB;SAC9D;KACJ;SAAM;QACH,IAAI,MAAM,CAAC;QACX,IAAI,MAAM,CAAC;QACX,0DAA0D;QAC1D,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;YACd,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;YACpB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;SAC5B;aAAM,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;YACrB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACzB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;SACvB;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,OAAO,CAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC;QAE5D,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,+DAA+D;QAC/D,oEAAoE;QACpE,iBAAiB;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;QAEhC,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KACnC;IAED,MAAM,CAAC,GAAG,SAAS,CACf,YAAY,CAAC,IAAI,CAAC,EAClB,YAAY,CACf,CAAC;IAEF,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;AAC7B,CAAC;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAA"}
@@ -1,9 +1,9 @@
1
- import { CpNode } from './cp-node.js';
2
- /**
3
- * Returns the bezier curve from the maximal disk of the given [[CpNode]] to the
4
- * next [[CpNode]]'s maximal disk and thus directly represents a piece of the
5
- * medial axis.
6
- * @param cpNode
7
- */
8
- declare function getCurveToNext(cpNode: CpNode): number[][];
9
- export { getCurveToNext };
1
+ import { CpNode } from './cp-node.js';
2
+ /**
3
+ * Returns the bezier curve from the maximal disk of the given [[CpNode]] to the
4
+ * next [[CpNode]]'s maximal disk and thus directly represents a piece of the
5
+ * medial axis.
6
+ * @param cpNode
7
+ */
8
+ declare function getCurveToNext(cpNode: CpNode): number[][];
9
+ export { getCurveToNext };
@@ -1,12 +1,12 @@
1
- import { getCurveBetween } from './get-curve/get-curve-between.js';
2
- /**
3
- * Returns the bezier curve from the maximal disk of the given [[CpNode]] to the
4
- * next [[CpNode]]'s maximal disk and thus directly represents a piece of the
5
- * medial axis.
6
- * @param cpNode
7
- */
8
- function getCurveToNext(cpNode) {
9
- return getCurveBetween(cpNode, cpNode.next);
10
- }
11
- export { getCurveToNext };
1
+ import { getCurveBetween } from './get-curve/get-curve-between.js';
2
+ /**
3
+ * Returns the bezier curve from the maximal disk of the given [[CpNode]] to the
4
+ * next [[CpNode]]'s maximal disk and thus directly represents a piece of the
5
+ * medial axis.
6
+ * @param cpNode
7
+ */
8
+ function getCurveToNext(cpNode) {
9
+ return getCurveBetween(cpNode, cpNode.next);
10
+ }
11
+ export { getCurveToNext };
12
12
  //# sourceMappingURL=get-curve-to-next.js.map
@@ -1,24 +1,24 @@
1
- /**
2
- * Returns a positive value if the second bezier (of order 1, 2 or 3) curves
3
- * anti-clockwise with respect to the first at the point where the first bezier
4
- * ends and the second one starts. Returns a negative number if the turn is
5
- * clockwise. Returns 0 otherwise.
6
- *
7
- * The algorithm is a generalization of `ccw`, a.k.a `orient2d`.
8
- *
9
- * The above obviously necessitates that their endpoints coincide as described.
10
- *
11
- * Preconditions (for robustness):
12
- * * The beziers has control points with max bit-length of 25 and bit-aligned.
13
- * * The bezier does not have infinite curvature at either endpoint
14
- *
15
- * This is so the vectors between control points can be
16
- * calculated exactly without resorting to adaptive infinite precision floating
17
- * point operations. Note: aligned to 'grid' here means if you bitwise-and all
18
- * values together the resulting bitlength === the max bithlength of any value.
19
- *
20
- * @param psI The incoming bezier that ends at the interface
21
- * @param psO The outgoing bezier that starts at the interface
22
- */
23
- declare function getInterfaceCcw(psI: number[][], psO: number[][]): number;
24
- export { getInterfaceCcw };
1
+ /**
2
+ * Returns a positive value if the second bezier (of order 1, 2 or 3) curves
3
+ * anti-clockwise with respect to the first at the point where the first bezier
4
+ * ends and the second one starts. Returns a negative number if the turn is
5
+ * clockwise. Returns 0 otherwise.
6
+ *
7
+ * The algorithm is a generalization of `ccw`, a.k.a `orient2d`.
8
+ *
9
+ * The above obviously necessitates that their endpoints coincide as described.
10
+ *
11
+ * Preconditions (for robustness):
12
+ * * The beziers has control points with max bit-length of 25 and bit-aligned.
13
+ * * The bezier does not have infinite curvature at either endpoint
14
+ *
15
+ * This is so the vectors between control points can be
16
+ * calculated exactly without resorting to adaptive infinite precision floating
17
+ * point operations. Note: aligned to 'grid' here means if you bitwise-and all
18
+ * values together the resulting bitlength === the max bithlength of any value.
19
+ *
20
+ * @param psI The incoming bezier that ends at the interface
21
+ * @param psO The outgoing bezier that starts at the interface
22
+ */
23
+ declare function getInterfaceCcw(psI: number[][], psO: number[][]): number;
24
+ export { getInterfaceCcw };