@visactor/vutils 1.0.24 → 1.0.26

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 (452) hide show
  1. package/README.zh-CN.md +12 -0
  2. package/REGRESSION.md +36 -0
  3. package/cjs/angle.d.ts +61 -0
  4. package/cjs/angle.js +73 -7
  5. package/cjs/angle.js.map +1 -1
  6. package/cjs/color/Color.d.ts +3 -0
  7. package/cjs/color/Color.js +64 -10
  8. package/cjs/color/Color.js.map +1 -1
  9. package/cjs/color/hexToRgb.d.ts +5 -0
  10. package/cjs/color/hexToRgb.js +5 -0
  11. package/cjs/color/hexToRgb.js.map +1 -1
  12. package/cjs/color/rgbToHsl.js +5 -1
  13. package/cjs/color/rgbToHsl.js.map +1 -1
  14. package/cjs/common/array.d.ts +43 -0
  15. package/cjs/common/array.js +44 -0
  16. package/cjs/common/array.js.map +1 -1
  17. package/cjs/common/bisect.d.ts +21 -0
  18. package/cjs/common/bisect.js +29 -0
  19. package/cjs/common/bisect.js.map +1 -1
  20. package/cjs/common/bootstrap.d.ts +5 -0
  21. package/cjs/common/bootstrap.js +22 -0
  22. package/cjs/common/bootstrap.js.map +1 -0
  23. package/cjs/common/clone.js +6 -0
  24. package/cjs/common/clone.js.map +1 -1
  25. package/cjs/common/cloneDeep.js +4 -1
  26. package/cjs/common/cloneDeep.js.map +1 -1
  27. package/cjs/common/correlation.d.ts +3 -0
  28. package/cjs/common/correlation.js +83 -0
  29. package/cjs/common/correlation.js.map +1 -0
  30. package/cjs/common/debounce.js +22 -4
  31. package/cjs/common/debounce.js.map +1 -1
  32. package/cjs/common/deviation.js +1 -2
  33. package/cjs/common/ecdf.d.ts +8 -0
  34. package/cjs/common/ecdf.js +11 -2
  35. package/cjs/common/ecdf.js.map +1 -1
  36. package/cjs/common/extent.d.ts +4 -0
  37. package/cjs/common/extent.js +4 -2
  38. package/cjs/common/extent.js.map +1 -1
  39. package/cjs/common/field.d.ts +6 -0
  40. package/cjs/common/field.js +3 -0
  41. package/cjs/common/field.js.map +1 -1
  42. package/cjs/common/has.d.ts +17 -0
  43. package/cjs/common/has.js +18 -1
  44. package/cjs/common/has.js.map +1 -1
  45. package/cjs/common/index.d.ts +5 -0
  46. package/cjs/common/index.js +34 -6
  47. package/cjs/common/index.js.map +1 -1
  48. package/cjs/common/interpolate.js +16 -3
  49. package/cjs/common/interpolate.js.map +1 -1
  50. package/cjs/common/isBase64.d.ts +6 -0
  51. package/cjs/common/isBase64.js +6 -0
  52. package/cjs/common/isBase64.js.map +1 -1
  53. package/cjs/common/isBoolean.d.ts +13 -0
  54. package/cjs/common/isBoolean.js +13 -1
  55. package/cjs/common/isBoolean.js.map +1 -1
  56. package/cjs/common/isEmpty.js +11 -1
  57. package/cjs/common/isEmpty.js.map +1 -1
  58. package/cjs/common/isEqual.js +19 -7
  59. package/cjs/common/isEqual.js.map +1 -1
  60. package/cjs/common/isFunction.d.ts +25 -0
  61. package/cjs/common/isFunction.js +27 -2
  62. package/cjs/common/isFunction.js.map +1 -1
  63. package/cjs/common/isNull.js +2 -1
  64. package/cjs/common/isNumber.d.ts +23 -0
  65. package/cjs/common/isNumber.js +23 -1
  66. package/cjs/common/isNumber.js.map +1 -1
  67. package/cjs/common/isNumeric.d.ts +25 -0
  68. package/cjs/common/isNumeric.js +25 -0
  69. package/cjs/common/isNumeric.js.map +1 -1
  70. package/cjs/common/isObject.d.ts +21 -0
  71. package/cjs/common/isObject.js +22 -0
  72. package/cjs/common/isObject.js.map +1 -1
  73. package/cjs/common/isObjectLike.d.ts +20 -0
  74. package/cjs/common/isObjectLike.js +21 -0
  75. package/cjs/common/isObjectLike.js.map +1 -1
  76. package/cjs/common/isPlainObject.d.ts +25 -0
  77. package/cjs/common/isPlainObject.js.map +1 -1
  78. package/cjs/common/isPrototype.js +1 -1
  79. package/cjs/common/isRegExp.js +1 -1
  80. package/cjs/common/isShallowEqual.js +1 -0
  81. package/cjs/common/isShallowEqual.js.map +1 -1
  82. package/cjs/common/isString.d.ts +13 -0
  83. package/cjs/common/isString.js +13 -1
  84. package/cjs/common/isString.js.map +1 -1
  85. package/cjs/common/isType.d.ts +6 -0
  86. package/cjs/common/isType.js +6 -0
  87. package/cjs/common/isType.js.map +1 -1
  88. package/cjs/common/isValidNumber.js.map +1 -1
  89. package/cjs/common/isValidUrl.js.map +1 -1
  90. package/cjs/common/kde.d.ts +28 -0
  91. package/cjs/common/kde.js +29 -5
  92. package/cjs/common/kde.js.map +1 -1
  93. package/cjs/common/mean.d.ts +2 -0
  94. package/cjs/common/mean.js +25 -0
  95. package/cjs/common/mean.js.map +1 -0
  96. package/cjs/common/merge.js +20 -4
  97. package/cjs/common/merge.js.map +1 -1
  98. package/cjs/common/mixin.js +14 -3
  99. package/cjs/common/mixin.js.map +1 -1
  100. package/cjs/common/normalQuantile.d.ts +5 -0
  101. package/cjs/common/normalQuantile.js +21 -0
  102. package/cjs/common/normalQuantile.js.map +1 -0
  103. package/cjs/common/number.d.ts +24 -0
  104. package/cjs/common/number.js +24 -1
  105. package/cjs/common/number.js.map +1 -1
  106. package/cjs/common/pad.d.ts +21 -0
  107. package/cjs/common/pad.js +21 -1
  108. package/cjs/common/pad.js.map +1 -1
  109. package/cjs/common/random.d.ts +3 -0
  110. package/cjs/common/random.js +13 -0
  111. package/cjs/common/random.js.map +1 -1
  112. package/cjs/common/regression-bootstrap.d.ts +14 -0
  113. package/cjs/common/regression-bootstrap.js +37 -0
  114. package/cjs/common/regression-bootstrap.js.map +1 -0
  115. package/cjs/common/regression-linear.d.ts +5 -0
  116. package/cjs/common/regression-linear.js +28 -39
  117. package/cjs/common/regression-linear.js.map +1 -1
  118. package/cjs/common/regression-logistic.d.ts +6 -0
  119. package/cjs/common/regression-logistic.js +25 -14
  120. package/cjs/common/regression-logistic.js.map +1 -1
  121. package/cjs/common/regression-lowess.d.ts +11 -1
  122. package/cjs/common/regression-lowess.js +125 -118
  123. package/cjs/common/regression-lowess.js.map +1 -1
  124. package/cjs/common/regression-polynomial.d.ts +1 -0
  125. package/cjs/common/regression-polynomial.js +24 -94
  126. package/cjs/common/regression-polynomial.js.map +1 -1
  127. package/cjs/common/regression-solver.d.ts +26 -0
  128. package/cjs/common/regression-solver.js +180 -0
  129. package/cjs/common/regression-solver.js.map +1 -0
  130. package/cjs/common/regression-utils.d.ts +13 -1
  131. package/cjs/common/regression-utils.js +27 -12
  132. package/cjs/common/regression-utils.js.map +1 -1
  133. package/cjs/common/throttle.js +3 -0
  134. package/cjs/common/throttle.js.map +1 -1
  135. package/cjs/common/toDate.js +22 -3
  136. package/cjs/common/toDate.js.map +1 -1
  137. package/cjs/common/uuid.d.ts +7 -0
  138. package/cjs/common/uuid.js +15 -1
  139. package/cjs/common/uuid.js.map +1 -1
  140. package/cjs/data-structure/bounds.d.ts +101 -0
  141. package/cjs/data-structure/bounds.js +74 -7
  142. package/cjs/data-structure/bounds.js.map +1 -1
  143. package/cjs/data-structure/hashTable.d.ts +4 -0
  144. package/cjs/data-structure/hashTable.js +11 -2
  145. package/cjs/data-structure/hashTable.js.map +1 -1
  146. package/cjs/data-structure/index.js +6 -2
  147. package/cjs/data-structure/index.js.map +1 -1
  148. package/cjs/data-structure/matrix.d.ts +91 -0
  149. package/cjs/data-structure/matrix.js +52 -4
  150. package/cjs/data-structure/matrix.js.map +1 -1
  151. package/cjs/data-structure/point.d.ts +3 -0
  152. package/cjs/data-structure/point.js +5 -1
  153. package/cjs/data-structure/point.js.map +1 -1
  154. package/cjs/dom.d.ts +36 -0
  155. package/cjs/dom.js +43 -1
  156. package/cjs/dom.js.map +1 -1
  157. package/cjs/fmin/blas1.js +10 -1
  158. package/cjs/fmin/blas1.js.map +1 -1
  159. package/cjs/fmin/conjugate-gradient.js +18 -3
  160. package/cjs/fmin/conjugate-gradient.js.map +1 -1
  161. package/cjs/fmin/linesearch.js +15 -1
  162. package/cjs/fmin/linesearch.js.map +1 -1
  163. package/cjs/fmin/nelder-mead.d.ts +1 -0
  164. package/cjs/fmin/nelder-mead.js +30 -10
  165. package/cjs/fmin/nelder-mead.js.map +1 -1
  166. package/cjs/format/number/formatDecimal.js +9 -1
  167. package/cjs/format/number/formatDecimal.js.map +1 -1
  168. package/cjs/format/number/formatGroup.js +7 -0
  169. package/cjs/format/number/formatGroup.js.map +1 -1
  170. package/cjs/format/number/formatPrefixAuto.js +8 -0
  171. package/cjs/format/number/formatPrefixAuto.js.map +1 -1
  172. package/cjs/format/number/formatRounded.js +7 -0
  173. package/cjs/format/number/formatRounded.js.map +1 -1
  174. package/cjs/format/number/formatTrim.js +7 -0
  175. package/cjs/format/number/formatTrim.js.map +1 -1
  176. package/cjs/format/number/number.js +39 -9
  177. package/cjs/format/number/number.js.map +1 -1
  178. package/cjs/format/time.js +23 -6
  179. package/cjs/format/time.js.map +1 -1
  180. package/cjs/geo/circle-intersection.d.ts +12 -0
  181. package/cjs/geo/circle-intersection.js +54 -9
  182. package/cjs/geo/circle-intersection.js.map +1 -1
  183. package/cjs/geo/constant.js +8 -1
  184. package/cjs/geo/constant.js.map +1 -1
  185. package/cjs/geo/invariant.d.ts +22 -0
  186. package/cjs/geo/invariant.js +24 -1
  187. package/cjs/geo/invariant.js.map +1 -1
  188. package/cjs/graphics/algorithm/aabb.js +7 -3
  189. package/cjs/graphics/algorithm/aabb.js.map +1 -1
  190. package/cjs/graphics/algorithm/intersect.d.ts +48 -0
  191. package/cjs/graphics/algorithm/intersect.js +75 -7
  192. package/cjs/graphics/algorithm/intersect.js.map +1 -1
  193. package/cjs/graphics/bounds-util.js +4 -2
  194. package/cjs/graphics/bounds-util.js.map +1 -1
  195. package/cjs/graphics/graph-util.js +4 -0
  196. package/cjs/graphics/graph-util.js.map +1 -1
  197. package/cjs/graphics/index.js +7 -4
  198. package/cjs/graphics/index.js.map +1 -1
  199. package/cjs/graphics/polygon.d.ts +12 -0
  200. package/cjs/graphics/polygon.js +28 -5
  201. package/cjs/graphics/polygon.js.map +1 -1
  202. package/cjs/graphics/text/measure/interface.d.ts +12 -0
  203. package/cjs/graphics/text/measure/textMeasure.d.ts +23 -0
  204. package/cjs/graphics/text/measure/textMeasure.js +50 -22
  205. package/cjs/graphics/text/measure/textMeasure.js.map +1 -1
  206. package/cjs/graphics/text/measure/util.js +1 -0
  207. package/cjs/graphics/text/measure/util.js.map +1 -1
  208. package/cjs/graphics/text/stringWidth.js +7 -3
  209. package/cjs/graphics/text/stringWidth.js.map +1 -1
  210. package/cjs/index.d.ts +6 -0
  211. package/cjs/index.js +19 -4
  212. package/cjs/index.js.map +1 -1
  213. package/cjs/logger.js +12 -2
  214. package/cjs/logger.js.map +1 -1
  215. package/cjs/lru.js +14 -6
  216. package/cjs/lru.js.map +1 -1
  217. package/cjs/math.d.ts +9 -0
  218. package/cjs/math.js +10 -0
  219. package/cjs/math.js.map +1 -1
  220. package/cjs/padding.d.ts +5 -0
  221. package/cjs/padding.js +5 -0
  222. package/cjs/padding.js.map +1 -1
  223. package/cjs/time/formatUtils.d.ts +6 -0
  224. package/cjs/time/formatUtils.js +7 -0
  225. package/cjs/time/formatUtils.js.map +1 -1
  226. package/dist/index.js +2035 -411
  227. package/dist/index.min.js +128 -1
  228. package/es/angle.d.ts +61 -0
  229. package/es/angle.js +66 -10
  230. package/es/angle.js.map +1 -1
  231. package/es/color/Color.d.ts +3 -0
  232. package/es/color/Color.js +64 -9
  233. package/es/color/Color.js.map +1 -1
  234. package/es/color/hexToRgb.d.ts +5 -0
  235. package/es/color/hexToRgb.js +5 -0
  236. package/es/color/hexToRgb.js.map +1 -1
  237. package/es/color/rgbToHsl.js +5 -1
  238. package/es/color/rgbToHsl.js.map +1 -1
  239. package/es/common/array.d.ts +43 -0
  240. package/es/common/array.js +44 -8
  241. package/es/common/array.js.map +1 -1
  242. package/es/common/bisect.d.ts +21 -0
  243. package/es/common/bisect.js +29 -4
  244. package/es/common/bisect.js.map +1 -1
  245. package/es/common/bootstrap.d.ts +5 -0
  246. package/es/common/bootstrap.js +14 -0
  247. package/es/common/bootstrap.js.map +1 -0
  248. package/es/common/clone.js +6 -0
  249. package/es/common/clone.js.map +1 -1
  250. package/es/common/cloneDeep.js +4 -1
  251. package/es/common/cloneDeep.js.map +1 -1
  252. package/es/common/correlation.d.ts +3 -0
  253. package/es/common/correlation.js +77 -0
  254. package/es/common/correlation.js.map +1 -0
  255. package/es/common/debounce.js +22 -4
  256. package/es/common/debounce.js.map +1 -1
  257. package/es/common/deviation.js +1 -2
  258. package/es/common/ecdf.d.ts +8 -0
  259. package/es/common/ecdf.js +11 -1
  260. package/es/common/ecdf.js.map +1 -1
  261. package/es/common/extent.d.ts +4 -0
  262. package/es/common/extent.js +8 -3
  263. package/es/common/extent.js.map +1 -1
  264. package/es/common/field.d.ts +6 -0
  265. package/es/common/field.js +3 -1
  266. package/es/common/field.js.map +1 -1
  267. package/es/common/has.d.ts +17 -0
  268. package/es/common/has.js +18 -1
  269. package/es/common/has.js.map +1 -1
  270. package/es/common/index.d.ts +5 -0
  271. package/es/common/index.js +24 -0
  272. package/es/common/index.js.map +1 -1
  273. package/es/common/interpolate.js +16 -3
  274. package/es/common/interpolate.js.map +1 -1
  275. package/es/common/isBase64.d.ts +6 -0
  276. package/es/common/isBase64.js +6 -0
  277. package/es/common/isBase64.js.map +1 -1
  278. package/es/common/isBoolean.d.ts +13 -0
  279. package/es/common/isBoolean.js +13 -1
  280. package/es/common/isBoolean.js.map +1 -1
  281. package/es/common/isEmpty.js +11 -1
  282. package/es/common/isEmpty.js.map +1 -1
  283. package/es/common/isEqual.js +19 -7
  284. package/es/common/isEqual.js.map +1 -1
  285. package/es/common/isFunction.d.ts +25 -0
  286. package/es/common/isFunction.js +27 -2
  287. package/es/common/isFunction.js.map +1 -1
  288. package/es/common/isNull.js +2 -1
  289. package/es/common/isNumber.d.ts +23 -0
  290. package/es/common/isNumber.js +23 -1
  291. package/es/common/isNumber.js.map +1 -1
  292. package/es/common/isNumeric.d.ts +25 -0
  293. package/es/common/isNumeric.js +25 -0
  294. package/es/common/isNumeric.js.map +1 -1
  295. package/es/common/isObject.d.ts +21 -0
  296. package/es/common/isObject.js +22 -0
  297. package/es/common/isObject.js.map +1 -1
  298. package/es/common/isObjectLike.d.ts +20 -0
  299. package/es/common/isObjectLike.js +21 -0
  300. package/es/common/isObjectLike.js.map +1 -1
  301. package/es/common/isPlainObject.d.ts +25 -0
  302. package/es/common/isPlainObject.js +26 -0
  303. package/es/common/isPlainObject.js.map +1 -1
  304. package/es/common/isPrototype.js +1 -1
  305. package/es/common/isRegExp.js +1 -1
  306. package/es/common/isShallowEqual.js +1 -0
  307. package/es/common/isShallowEqual.js.map +1 -1
  308. package/es/common/isString.d.ts +13 -0
  309. package/es/common/isString.js +13 -1
  310. package/es/common/isString.js.map +1 -1
  311. package/es/common/isType.d.ts +6 -0
  312. package/es/common/isType.js +6 -0
  313. package/es/common/isType.js.map +1 -1
  314. package/es/common/isValidNumber.js.map +1 -1
  315. package/es/common/isValidUrl.js.map +1 -1
  316. package/es/common/kde.d.ts +28 -0
  317. package/es/common/kde.js +29 -7
  318. package/es/common/kde.js.map +1 -1
  319. package/es/common/mean.d.ts +2 -0
  320. package/es/common/mean.js +19 -0
  321. package/es/common/mean.js.map +1 -0
  322. package/es/common/merge.js +22 -5
  323. package/es/common/merge.js.map +1 -1
  324. package/es/common/mixin.js +14 -3
  325. package/es/common/mixin.js.map +1 -1
  326. package/es/common/normalQuantile.d.ts +5 -0
  327. package/es/common/normalQuantile.js +15 -0
  328. package/es/common/normalQuantile.js.map +1 -0
  329. package/es/common/number.d.ts +24 -0
  330. package/es/common/number.js +24 -2
  331. package/es/common/number.js.map +1 -1
  332. package/es/common/pad.d.ts +21 -0
  333. package/es/common/pad.js +21 -1
  334. package/es/common/pad.js.map +1 -1
  335. package/es/common/random.d.ts +3 -0
  336. package/es/common/random.js +13 -1
  337. package/es/common/random.js.map +1 -1
  338. package/es/common/regression-bootstrap.d.ts +14 -0
  339. package/es/common/regression-bootstrap.js +31 -0
  340. package/es/common/regression-bootstrap.js.map +1 -0
  341. package/es/common/regression-linear.d.ts +5 -0
  342. package/es/common/regression-linear.js +25 -39
  343. package/es/common/regression-linear.js.map +1 -1
  344. package/es/common/regression-logistic.d.ts +6 -0
  345. package/es/common/regression-logistic.js +24 -16
  346. package/es/common/regression-logistic.js.map +1 -1
  347. package/es/common/regression-lowess.d.ts +11 -1
  348. package/es/common/regression-lowess.js +120 -118
  349. package/es/common/regression-lowess.js.map +1 -1
  350. package/es/common/regression-polynomial.d.ts +1 -0
  351. package/es/common/regression-polynomial.js +21 -89
  352. package/es/common/regression-polynomial.js.map +1 -1
  353. package/es/common/regression-solver.d.ts +26 -0
  354. package/es/common/regression-solver.js +168 -0
  355. package/es/common/regression-solver.js.map +1 -0
  356. package/es/common/regression-utils.d.ts +13 -1
  357. package/es/common/regression-utils.js +18 -9
  358. package/es/common/regression-utils.js.map +1 -1
  359. package/es/common/throttle.js +3 -0
  360. package/es/common/throttle.js.map +1 -1
  361. package/es/common/toDate.js +23 -3
  362. package/es/common/toDate.js.map +1 -1
  363. package/es/common/uuid.d.ts +7 -0
  364. package/es/common/uuid.js +15 -1
  365. package/es/common/uuid.js.map +1 -1
  366. package/es/data-structure/bounds.d.ts +101 -0
  367. package/es/data-structure/bounds.js +74 -8
  368. package/es/data-structure/bounds.js.map +1 -1
  369. package/es/data-structure/hashTable.d.ts +4 -0
  370. package/es/data-structure/hashTable.js +11 -2
  371. package/es/data-structure/hashTable.js.map +1 -1
  372. package/es/data-structure/index.js +2 -0
  373. package/es/data-structure/index.js.map +1 -1
  374. package/es/data-structure/matrix.d.ts +91 -0
  375. package/es/data-structure/matrix.js +52 -5
  376. package/es/data-structure/matrix.js.map +1 -1
  377. package/es/data-structure/point.d.ts +3 -0
  378. package/es/data-structure/point.js +5 -1
  379. package/es/data-structure/point.js.map +1 -1
  380. package/es/dom.d.ts +36 -0
  381. package/es/dom.js +43 -8
  382. package/es/dom.js.map +1 -1
  383. package/es/fmin/blas1.js +10 -0
  384. package/es/fmin/blas1.js.map +1 -1
  385. package/es/fmin/conjugate-gradient.js +18 -2
  386. package/es/fmin/conjugate-gradient.js.map +1 -1
  387. package/es/fmin/linesearch.js +15 -0
  388. package/es/fmin/linesearch.js.map +1 -1
  389. package/es/fmin/nelder-mead.d.ts +1 -0
  390. package/es/fmin/nelder-mead.js +29 -9
  391. package/es/fmin/nelder-mead.js.map +1 -1
  392. package/es/format/number/formatDecimal.js +9 -1
  393. package/es/format/number/formatDecimal.js.map +1 -1
  394. package/es/format/number/formatGroup.js +7 -0
  395. package/es/format/number/formatGroup.js.map +1 -1
  396. package/es/format/number/formatPrefixAuto.js +8 -0
  397. package/es/format/number/formatPrefixAuto.js.map +1 -1
  398. package/es/format/number/formatRounded.js +7 -0
  399. package/es/format/number/formatRounded.js.map +1 -1
  400. package/es/format/number/formatTrim.js +7 -0
  401. package/es/format/number/formatTrim.js.map +1 -1
  402. package/es/format/number/number.js +40 -8
  403. package/es/format/number/number.js.map +1 -1
  404. package/es/format/time.js +23 -5
  405. package/es/format/time.js.map +1 -1
  406. package/es/geo/circle-intersection.d.ts +12 -0
  407. package/es/geo/circle-intersection.js +54 -14
  408. package/es/geo/circle-intersection.js.map +1 -1
  409. package/es/geo/constant.js +8 -0
  410. package/es/geo/constant.js.map +1 -1
  411. package/es/geo/invariant.d.ts +22 -0
  412. package/es/geo/invariant.js +24 -0
  413. package/es/geo/invariant.js.map +1 -1
  414. package/es/graphics/algorithm/aabb.js +7 -3
  415. package/es/graphics/algorithm/aabb.js.map +1 -1
  416. package/es/graphics/algorithm/intersect.d.ts +48 -0
  417. package/es/graphics/algorithm/intersect.js +75 -12
  418. package/es/graphics/algorithm/intersect.js.map +1 -1
  419. package/es/graphics/bounds-util.js +4 -2
  420. package/es/graphics/bounds-util.js.map +1 -1
  421. package/es/graphics/graph-util.js +4 -0
  422. package/es/graphics/graph-util.js.map +1 -1
  423. package/es/graphics/index.js +2 -0
  424. package/es/graphics/index.js.map +1 -1
  425. package/es/graphics/polygon.d.ts +12 -0
  426. package/es/graphics/polygon.js +28 -6
  427. package/es/graphics/polygon.js.map +1 -1
  428. package/es/graphics/text/measure/interface.d.ts +12 -0
  429. package/es/graphics/text/measure/textMeasure.d.ts +23 -0
  430. package/es/graphics/text/measure/textMeasure.js +46 -21
  431. package/es/graphics/text/measure/textMeasure.js.map +1 -1
  432. package/es/graphics/text/measure/util.js +1 -0
  433. package/es/graphics/text/measure/util.js.map +1 -1
  434. package/es/graphics/text/stringWidth.js +7 -3
  435. package/es/graphics/text/stringWidth.js.map +1 -1
  436. package/es/index.d.ts +6 -0
  437. package/es/index.js +15 -1
  438. package/es/index.js.map +1 -1
  439. package/es/logger.js +12 -1
  440. package/es/logger.js.map +1 -1
  441. package/es/lru.js +14 -6
  442. package/es/lru.js.map +1 -1
  443. package/es/math.d.ts +9 -0
  444. package/es/math.js +10 -1
  445. package/es/math.js.map +1 -1
  446. package/es/padding.d.ts +5 -0
  447. package/es/padding.js +5 -1
  448. package/es/padding.js.map +1 -1
  449. package/es/time/formatUtils.d.ts +6 -0
  450. package/es/time/formatUtils.js +7 -1
  451. package/es/time/formatUtils.js.map +1 -1
  452. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/format/time.ts"],"names":[],"mappings":"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","file":"time.js","sourcesContent":["/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-time-format\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-time-format/blob/d6feb945baa4b7a45898a9ca926ebca044e20657/src/locale.js\n * License: https://github.com/d3/d3-time-format/blob/main/LICENSE\n * @license\n */\n\ninterface dateInfo {\n y?: number;\n m?: number;\n d?: number;\n w?: number;\n p?: number;\n H?: number;\n M?: number;\n S?: number;\n L?: number;\n}\n\nexport class TimeUtil {\n private locale_shortWeekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n private locale_periods = ['AM', 'PM'];\n private locale_weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n private locale_shortMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n private numberRe = /^\\s*\\d+/; // note: ignores next directive\n private pads = { '-': '', _: ' ', '0': '0' };\n\n // const percentRe = /^%/;\n private requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n private periodRe: RegExp;\n private periodLookup: Map<string, number>;\n private weekdayRe: RegExp;\n private weekdayLookup: Map<string, number>;\n private shortWeekdayRe: RegExp;\n private shortWeekdayLookup: Map<string, number>;\n private monthRe: RegExp;\n private monthLookup: Map<string, number>;\n private shortMonthRe: RegExp;\n private shortMonthLookup: Map<string, number>;\n\n private static instance: TimeUtil;\n static getInstance(): TimeUtil {\n if (!TimeUtil.instance) {\n TimeUtil.instance = new TimeUtil();\n }\n\n return TimeUtil.instance;\n }\n\n private requoteF;\n private constructor() {\n this.requoteF = this.requote.bind(this);\n this.periodRe = this.formatRe(this.locale_periods);\n this.periodLookup = this.formatLookup(this.locale_periods);\n this.weekdayRe = this.formatRe(this.locale_weekdays);\n this.weekdayLookup = this.formatLookup(this.locale_weekdays);\n this.shortWeekdayRe = this.formatRe(this.locale_shortWeekdays);\n this.shortWeekdayLookup = this.formatLookup(this.locale_shortWeekdays);\n this.monthRe = this.formatRe(this.locale_months);\n this.monthLookup = this.formatLookup(this.locale_months);\n this.shortMonthRe = this.formatRe(this.locale_shortMonths);\n this.shortMonthLookup = this.formatLookup(this.locale_shortMonths);\n }\n\n private requote(s: string) {\n return s.replace(this.requoteRe, '\\\\$&');\n }\n\n private localDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n private utcDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n private newDate(y: number, m: number, d: number) {\n return { y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0 };\n }\n private formatRe(names: string[]) {\n return new RegExp('^(?:' + names.map(this.requoteF).join('|') + ')', 'i');\n }\n private formatLookup(names: string[]) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n }\n\n private locale_months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ];\n\n private formatShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getDay()];\n };\n\n private formatWeekday = (d: Date) => {\n return this.locale_weekdays[d.getDay()];\n };\n\n private formatShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getMonth()];\n };\n\n private formatMonth = (d: Date) => {\n return this.locale_months[d.getMonth()];\n };\n\n private pad(value: number, fill: string, width: number) {\n const sign = value < 0 ? '-' : '';\n const string = (sign ? -value : value) + '';\n const length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n private formatDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getDate(), p, 2);\n };\n\n private formatHour24 = (d: Date, p: string) => {\n return this.pad(d.getHours(), p, 2);\n };\n\n private formatHour12 = (d: Date, p: string) => {\n return this.pad(d.getHours() % 12 || 12, p, 2);\n };\n\n private formatMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getMilliseconds(), p, 3);\n };\n\n private formatMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getMonth() + 1, p, 2);\n };\n\n private formatMinutes = (d: Date, p: string) => {\n return this.pad(d.getMinutes(), p, 2);\n };\n\n private formatPeriod = (d: Date) => {\n return this.locale_periods[+(d.getHours() >= 12)];\n };\n\n private formatSeconds = (d: Date, p: string) => {\n return this.pad(d.getSeconds(), p, 2);\n };\n\n private formatFullYear = (d: Date, p: string) => {\n return this.pad(d.getFullYear() % 10000, p, 4);\n };\n\n private formatUTCShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getUTCDay()];\n };\n\n private formatUTCWeekday = (d: Date) => {\n return this.locale_weekdays[d.getUTCDay()];\n };\n\n private formatUTCShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getUTCMonth()];\n };\n\n private formatUTCMonth = (d: Date) => {\n return this.locale_months[d.getUTCMonth()];\n };\n\n private formatUTCDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getUTCDate(), p, 2);\n };\n\n private formatUTCHour24 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours(), p, 2);\n };\n\n private formatUTCHour12 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours() % 12 || 12, p, 2);\n };\n\n private formatUTCMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getUTCMilliseconds(), p, 3);\n };\n\n private formatUTCMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getUTCMonth() + 1, p, 2);\n };\n\n private formatUTCMinutes = (d: Date, p: string) => {\n return this.pad(d.getUTCMinutes(), p, 2);\n };\n\n private formatUTCPeriod = (d: Date) => {\n return this.locale_periods[+(d.getUTCHours() >= 12)];\n };\n\n private formatUTCSeconds = (d: Date, p: string) => {\n return this.pad(d.getUTCSeconds(), p, 2);\n };\n\n private formatUTCFullYear = (d: Date, p: string) => {\n return this.pad(d.getUTCFullYear() % 10000, p, 4);\n };\n\n private formats = {\n a: this.formatShortWeekday,\n A: this.formatWeekday,\n b: this.formatShortMonth,\n B: this.formatMonth,\n d: this.formatDayOfMonth,\n e: this.formatDayOfMonth,\n H: this.formatHour24,\n I: this.formatHour12,\n L: this.formatMilliseconds,\n m: this.formatMonthNumber,\n M: this.formatMinutes,\n p: this.formatPeriod,\n S: this.formatSeconds,\n Y: this.formatFullYear\n };\n\n private utcFormats = {\n a: this.formatUTCShortWeekday,\n A: this.formatUTCWeekday,\n b: this.formatUTCShortMonth,\n B: this.formatUTCMonth,\n d: this.formatUTCDayOfMonth,\n e: this.formatUTCDayOfMonth,\n H: this.formatUTCHour24,\n I: this.formatUTCHour12,\n L: this.formatUTCMilliseconds,\n m: this.formatUTCMonthNumber,\n M: this.formatUTCMinutes,\n p: this.formatUTCPeriod,\n S: this.formatUTCSeconds,\n Y: this.formatUTCFullYear\n };\n\n private parseShortWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.shortWeekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.shortWeekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.weekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.weekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseShortMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.shortMonthRe.exec(string.slice(i));\n return n ? ((d.m = this.shortMonthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.monthRe.exec(string.slice(i));\n return n ? ((d.m = this.monthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseDayOfMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.d = +n[0]), i + n[0].length) : -1;\n };\n\n private parseHour24 = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.H = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMilliseconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 3));\n return n ? ((d.L = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMonthNumber = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.m = (n as any[0]) - 1), i + n[0].length) : -1;\n };\n\n private parseMinutes = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.M = +n[0]), i + n[0].length) : -1;\n };\n\n private parsePeriod = (d: dateInfo, string: string, i: number) => {\n const n = this.periodRe.exec(string.slice(i));\n return n ? ((d.p = this.periodLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseSeconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.S = +n[0]), i + n[0].length) : -1;\n };\n\n private parseFullYear = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 4));\n return n ? ((d.y = +n[0]), i + n[0].length) : -1;\n };\n\n private parses = {\n a: this.parseShortWeekday,\n A: this.parseWeekday,\n b: this.parseShortMonth,\n B: this.parseMonth,\n d: this.parseDayOfMonth,\n e: this.parseDayOfMonth,\n H: this.parseHour24,\n I: this.parseHour24,\n L: this.parseMilliseconds,\n m: this.parseMonthNumber,\n M: this.parseMinutes,\n p: this.parsePeriod,\n S: this.parseSeconds,\n Y: this.parseFullYear\n };\n\n private parseSpecifier(d: dateInfo, specifier: string, string: string, j: number) {\n let i = 0;\n const n = specifier.length;\n const m = string.length;\n let c;\n let parse;\n\n while (i < n) {\n if (j >= m) {\n return -1;\n }\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = this.parses[c in this.pads ? specifier.charAt(i++) : c];\n if (!parse || (j = parse(d, string, j)) < 0) {\n return -1;\n }\n } else if (c !== string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n private newParse(specifier: string, Z: boolean) {\n const that = this;\n return function (string: string) {\n const d = that.newDate(1900, undefined, 1) as any;\n const i = that.parseSpecifier(d, specifier, (string += ''), 0);\n if (i !== string.length) {\n return null;\n }\n\n // If a UNIX timestamp is specified, return it.\n if ('Q' in d) {\n return new Date(d.Q);\n }\n if ('s' in d) {\n return new Date(d.s * 1000 + ('L' in d ? d.L : 0));\n }\n\n // If this is utcParse, never use the local timezone.\n if (Z && !('Z' in d)) {\n d.Z = 0;\n }\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if ('p' in d) {\n d.H = (d.H % 12) + d.p * 12;\n }\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) {\n d.m = 'q' in d ? d.q : 0;\n }\n if ('Z' in d) {\n d.H += (d.Z / 100) | 0;\n d.M += d.Z % 100;\n return that.utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return that.localDate(d);\n };\n }\n private newFormat(specifier: string, formats: any) {\n const that = this;\n return function (date: Date) {\n const string = [];\n let i = -1;\n let j = 0;\n const n = specifier.length;\n let c;\n let pad;\n let format;\n if (!(date instanceof Date)) {\n date = new Date(+date);\n }\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = that.pads[(c = specifier.charAt(++i))])) {\n c = specifier.charAt(++i);\n } else {\n pad = c === 'e' ? ' ' : '0';\n }\n format = formats[c];\n c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join('');\n };\n }\n\n private getFullTimeStamp(timeText: string | number) {\n const timeOriStamp = parseInt(timeText + '', 10);\n return String(timeOriStamp).length === 10 ? timeOriStamp * 1000 : timeOriStamp;\n }\n\n timeFormat = (specifier: string, timeText: string | number) => {\n return this.newFormat(specifier, this.formats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeUTCFormat = (specifier: string, timeText: string | number) => {\n return this.newFormat(specifier, this.utcFormats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeParse = (specifier: string, timeText: string | number) => {\n return this.newParse(specifier, false)(timeText + '');\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/format/time.ts"],"names":[],"mappings":"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","file":"time.js","sourcesContent":["/* Adapted from d3-time-format by Mike Bostock\n * https://github.com/d3/d3-time-format\n * Licensed under the ISC\n\n * url: https://github.com/d3/d3-time-format/blob/d6feb945baa4b7a45898a9ca926ebca044e20657/src/locale.js\n * License: https://github.com/d3/d3-time-format/blob/main/LICENSE\n * @license\n */\n\ninterface dateInfo {\n y?: number;\n m?: number;\n d?: number;\n w?: number;\n p?: number;\n H?: number;\n M?: number;\n S?: number;\n L?: number;\n}\n\nexport class TimeUtil {\n private locale_shortWeekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n private locale_periods = ['AM', 'PM'];\n private locale_weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n private locale_shortMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\n private numberRe = /^\\s*\\d+/; // note: ignores next directive\n private pads = { '-': '', _: ' ', '0': '0' };\n\n // const percentRe = /^%/;\n private requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\n private periodRe: RegExp;\n private periodLookup: Map<string, number>;\n private weekdayRe: RegExp;\n private weekdayLookup: Map<string, number>;\n private shortWeekdayRe: RegExp;\n private shortWeekdayLookup: Map<string, number>;\n private monthRe: RegExp;\n private monthLookup: Map<string, number>;\n private shortMonthRe: RegExp;\n private shortMonthLookup: Map<string, number>;\n\n private static instance: TimeUtil;\n static getInstance(): TimeUtil {\n if (!TimeUtil.instance) {\n TimeUtil.instance = new TimeUtil();\n }\n\n return TimeUtil.instance;\n }\n\n private requoteF;\n private constructor() {\n this.requoteF = this.requote.bind(this);\n this.periodRe = this.formatRe(this.locale_periods);\n this.periodLookup = this.formatLookup(this.locale_periods);\n this.weekdayRe = this.formatRe(this.locale_weekdays);\n this.weekdayLookup = this.formatLookup(this.locale_weekdays);\n this.shortWeekdayRe = this.formatRe(this.locale_shortWeekdays);\n this.shortWeekdayLookup = this.formatLookup(this.locale_shortWeekdays);\n this.monthRe = this.formatRe(this.locale_months);\n this.monthLookup = this.formatLookup(this.locale_months);\n this.shortMonthRe = this.formatRe(this.locale_shortMonths);\n this.shortMonthLookup = this.formatLookup(this.locale_shortMonths);\n }\n\n private requote(s: string) {\n return s.replace(this.requoteRe, '\\\\$&');\n }\n\n private localDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n }\n\n private utcDate(d: dateInfo) {\n if (0 <= d.y && d.y < 100) {\n const date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n }\n\n private newDate(y: number, m: number, d: number) {\n return { y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0 };\n }\n private formatRe(names: string[]) {\n return new RegExp('^(?:' + names.map(this.requoteF).join('|') + ')', 'i');\n }\n private formatLookup(names: string[]) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n }\n\n private locale_months = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ];\n\n private formatShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getDay()];\n };\n\n private formatWeekday = (d: Date) => {\n return this.locale_weekdays[d.getDay()];\n };\n\n private formatShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getMonth()];\n };\n\n private formatMonth = (d: Date) => {\n return this.locale_months[d.getMonth()];\n };\n\n private pad(value: number, fill: string, width: number) {\n const sign = value < 0 ? '-' : '';\n const string = (sign ? -value : value) + '';\n const length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n\n private formatDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getDate(), p, 2);\n };\n\n private formatHour24 = (d: Date, p: string) => {\n return this.pad(d.getHours(), p, 2);\n };\n\n private formatHour12 = (d: Date, p: string) => {\n return this.pad(d.getHours() % 12 || 12, p, 2);\n };\n\n private formatMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getMilliseconds(), p, 3);\n };\n\n private formatMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getMonth() + 1, p, 2);\n };\n\n private formatMinutes = (d: Date, p: string) => {\n return this.pad(d.getMinutes(), p, 2);\n };\n\n private formatPeriod = (d: Date) => {\n return this.locale_periods[+(d.getHours() >= 12)];\n };\n\n private formatSeconds = (d: Date, p: string) => {\n return this.pad(d.getSeconds(), p, 2);\n };\n\n private formatFullYear = (d: Date, p: string) => {\n return this.pad(d.getFullYear() % 10000, p, 4);\n };\n\n private formatUTCShortWeekday = (d: Date) => {\n return this.locale_shortWeekdays[d.getUTCDay()];\n };\n\n private formatUTCWeekday = (d: Date) => {\n return this.locale_weekdays[d.getUTCDay()];\n };\n\n private formatUTCShortMonth = (d: Date) => {\n return this.locale_shortMonths[d.getUTCMonth()];\n };\n\n private formatUTCMonth = (d: Date) => {\n return this.locale_months[d.getUTCMonth()];\n };\n\n private formatUTCDayOfMonth = (d: Date, p: string) => {\n return this.pad(d.getUTCDate(), p, 2);\n };\n\n private formatUTCHour24 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours(), p, 2);\n };\n\n private formatUTCHour12 = (d: Date, p: string) => {\n return this.pad(d.getUTCHours() % 12 || 12, p, 2);\n };\n\n private formatUTCMilliseconds = (d: Date, p: string) => {\n return this.pad(d.getUTCMilliseconds(), p, 3);\n };\n\n private formatUTCMonthNumber = (d: Date, p: string) => {\n return this.pad(d.getUTCMonth() + 1, p, 2);\n };\n\n private formatUTCMinutes = (d: Date, p: string) => {\n return this.pad(d.getUTCMinutes(), p, 2);\n };\n\n private formatUTCPeriod = (d: Date) => {\n return this.locale_periods[+(d.getUTCHours() >= 12)];\n };\n\n private formatUTCSeconds = (d: Date, p: string) => {\n return this.pad(d.getUTCSeconds(), p, 2);\n };\n\n private formatUTCFullYear = (d: Date, p: string) => {\n return this.pad(d.getUTCFullYear() % 10000, p, 4);\n };\n\n private formats = {\n a: this.formatShortWeekday,\n A: this.formatWeekday,\n b: this.formatShortMonth,\n B: this.formatMonth,\n d: this.formatDayOfMonth,\n e: this.formatDayOfMonth,\n H: this.formatHour24,\n I: this.formatHour12,\n L: this.formatMilliseconds,\n m: this.formatMonthNumber,\n M: this.formatMinutes,\n p: this.formatPeriod,\n S: this.formatSeconds,\n Y: this.formatFullYear\n };\n\n private utcFormats = {\n a: this.formatUTCShortWeekday,\n A: this.formatUTCWeekday,\n b: this.formatUTCShortMonth,\n B: this.formatUTCMonth,\n d: this.formatUTCDayOfMonth,\n e: this.formatUTCDayOfMonth,\n H: this.formatUTCHour24,\n I: this.formatUTCHour12,\n L: this.formatUTCMilliseconds,\n m: this.formatUTCMonthNumber,\n M: this.formatUTCMinutes,\n p: this.formatUTCPeriod,\n S: this.formatUTCSeconds,\n Y: this.formatUTCFullYear\n };\n\n private parseShortWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.shortWeekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.shortWeekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseWeekday = (d: dateInfo, string: string, i: number) => {\n const n = this.weekdayRe.exec(string.slice(i));\n return n ? ((d.w = this.weekdayLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseShortMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.shortMonthRe.exec(string.slice(i));\n return n ? ((d.m = this.shortMonthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.monthRe.exec(string.slice(i));\n return n ? ((d.m = this.monthLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseDayOfMonth = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.d = +n[0]), i + n[0].length) : -1;\n };\n\n private parseHour24 = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.H = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMilliseconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 3));\n return n ? ((d.L = +n[0]), i + n[0].length) : -1;\n };\n\n private parseMonthNumber = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.m = (n as any[0]) - 1), i + n[0].length) : -1;\n };\n\n private parseMinutes = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.M = +n[0]), i + n[0].length) : -1;\n };\n\n private parsePeriod = (d: dateInfo, string: string, i: number) => {\n const n = this.periodRe.exec(string.slice(i));\n return n ? ((d.p = this.periodLookup.get(n[0].toLowerCase())), i + n[0].length) : -1;\n };\n\n private parseSeconds = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 2));\n return n ? ((d.S = +n[0]), i + n[0].length) : -1;\n };\n\n private parseFullYear = (d: dateInfo, string: string, i: number) => {\n const n = this.numberRe.exec(string.slice(i, i + 4));\n return n ? ((d.y = +n[0]), i + n[0].length) : -1;\n };\n\n private parses = {\n a: this.parseShortWeekday,\n A: this.parseWeekday,\n b: this.parseShortMonth,\n B: this.parseMonth,\n d: this.parseDayOfMonth,\n e: this.parseDayOfMonth,\n H: this.parseHour24,\n I: this.parseHour24,\n L: this.parseMilliseconds,\n m: this.parseMonthNumber,\n M: this.parseMinutes,\n p: this.parsePeriod,\n S: this.parseSeconds,\n Y: this.parseFullYear\n };\n\n private parseSpecifier(d: dateInfo, specifier: string, string: string, j: number) {\n let i = 0;\n const n = specifier.length;\n const m = string.length;\n let c;\n let parse;\n\n while (i < n) {\n if (j >= m) {\n return -1;\n }\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = this.parses[c in this.pads ? specifier.charAt(i++) : c];\n if (!parse || (j = parse(d, string, j)) < 0) {\n return -1;\n }\n } else if (c !== string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n private newParse(specifier: string, Z: boolean) {\n const that = this;\n return function (string: string) {\n const d = that.newDate(1900, undefined, 1) as any;\n const i = that.parseSpecifier(d, specifier, (string += ''), 0);\n if (i !== string.length) {\n return null;\n }\n\n // If a UNIX timestamp is specified, return it.\n if ('Q' in d) {\n return new Date(d.Q);\n }\n if ('s' in d) {\n return new Date(d.s * 1000 + ('L' in d ? d.L : 0));\n }\n\n // If this is utcParse, never use the local timezone.\n if (Z && !('Z' in d)) {\n d.Z = 0;\n }\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if ('p' in d) {\n d.H = (d.H % 12) + d.p * 12;\n }\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) {\n d.m = 'q' in d ? d.q : 0;\n }\n if ('Z' in d) {\n d.H += (d.Z / 100) | 0;\n d.M += d.Z % 100;\n return that.utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return that.localDate(d);\n };\n }\n private newFormat(specifier: string, formats: any) {\n const that = this;\n return function (date: Date) {\n const string = [];\n let i = -1;\n let j = 0;\n const n = specifier.length;\n let c;\n let pad;\n let format;\n if (!(date instanceof Date)) {\n date = new Date(+date);\n }\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = that.pads[(c = specifier.charAt(++i))])) {\n c = specifier.charAt(++i);\n } else {\n pad = c === 'e' ? ' ' : '0';\n }\n format = formats[c];\n c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join('');\n };\n }\n\n private getFullTimeStamp(timeText: string | number) {\n const timeOriStamp = parseInt(timeText + '', 10);\n return String(timeOriStamp).length === 10 ? timeOriStamp * 1000 : timeOriStamp;\n }\n\n timeFormat = (specifier: string, timeText: string | number) => {\n return this.newFormat(specifier, this.formats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeUTCFormat = (specifier: string, timeText: string | number) => {\n return this.newFormat(specifier, this.utcFormats)(new Date(this.getFullTimeStamp(timeText)));\n };\n\n timeParse = (specifier: string, timeText: string | number) => {\n return this.newParse(specifier, false)(timeText + '');\n };\n}\n"]}
@@ -1,10 +1,22 @@
1
1
  import type { IPointLike } from '../data-structure';
2
2
  import type { ICircle, IIntersectPoint, IOverlapAreaStats } from './interface';
3
+ /** Returns the intersection area of a bunch of circles (where each circle
4
+ is an object having an x,y and radius property) */
3
5
  export declare function intersectionArea(circles: ICircle[], stats?: IOverlapAreaStats): number;
6
+ /** returns whether a point is contained by all of a list of circles */
4
7
  export declare function containedInCircles(point: IPointLike, circles: ICircle[]): boolean;
8
+ /** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */
5
9
  export declare function circleArea(r: number, width: number): number;
10
+ /** Returns the overlap area of two circles of radius r1 and r2 - that
11
+ have their centers separated by distance d. Simpler faster
12
+ circle intersection for only two circles */
6
13
  export declare function circleOverlap(r1: number, r2: number, d: number): number;
14
+ /** Given two circles (containing a x/y/radius attributes),
15
+ returns the intersecting points if possible.
16
+ note: doesn't handle cases where there are infinitely many
17
+ intersection points (circles are equivalent):, or only one intersection point*/
7
18
  export declare function circleCircleIntersection(p1: ICircle, p2: ICircle): IIntersectPoint[];
19
+ /** Returns the center of a bunch of points */
8
20
  export declare function getCenter(points: IPointLike[]): {
9
21
  x: number;
10
22
  y: number;
@@ -1,18 +1,34 @@
1
1
  "use strict";
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
3
+ /* Adapted from venn.js by Ben Frederickson
4
+ * https://github.com/benfred/venn.js
5
+ * Licensed under the MIT
6
+
7
+ * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js
8
+ * License: https://github.com/benfred/venn.js/blob/master/LICENSE
9
+ * @license
10
+ */ Object.defineProperty(exports, "__esModule", {
4
11
  value: !0
5
12
  }), exports.getCenter = exports.circleCircleIntersection = exports.circleOverlap = exports.circleArea = exports.containedInCircles = exports.intersectionArea = void 0;
6
13
 
14
+ // eslint-disable-next-line no-duplicate-imports
7
15
  const data_structure_1 = require("../data-structure"), constant_1 = require("./constant");
8
16
 
17
+ /** Returns the intersection area of a bunch of circles (where each circle
18
+ is an object having an x,y and radius property) */
9
19
  function intersectionArea(circles, stats) {
20
+ // get all the intersection points of the circles
10
21
  const intersectionPoints = getIntersectionPoints(circles), innerPoints = intersectionPoints.filter((function(p) {
11
22
  return containedInCircles(p, circles);
12
23
  }));
13
- let arcArea = 0, polygonArea = 0;
24
+ // filter out points that aren't included in all the circles
25
+ let arcArea = 0, polygonArea = 0;
14
26
  const arcs = [];
15
- if (innerPoints.length > 1) {
27
+ // if we have intersection points that are within all the circles,
28
+ // then figure out the area contained by them
29
+ if (innerPoints.length > 1) {
30
+ // sort the points by angle from the center of the polygon, which lets
31
+ // us just iterate over points to get the edges
16
32
  const center = getCenter(innerPoints);
17
33
  for (let i = 0; i < innerPoints.length; ++i) {
18
34
  const p = innerPoints[i];
@@ -21,25 +37,37 @@ function intersectionArea(circles, stats) {
21
37
  innerPoints.sort((function(a, b) {
22
38
  return b.angle - a.angle;
23
39
  }));
40
+ // iterate over all points, get arc between the points
41
+ // and update the areas
24
42
  let p2 = innerPoints[innerPoints.length - 1];
25
43
  for (let i = 0; i < innerPoints.length; ++i) {
26
44
  const p1 = innerPoints[i];
27
- polygonArea += (p2.x + p1.x) * (p1.y - p2.y);
45
+ // polygon area updates easily ...
46
+ polygonArea += (p2.x + p1.x) * (p1.y - p2.y);
47
+ // updating the arc area is a little more involved
28
48
  const midPoint = {
29
49
  x: (p1.x + p2.x) / 2,
30
50
  y: (p1.y + p2.y) / 2
31
51
  };
32
52
  let arc = null;
33
53
  for (let j = 0; j < p1.parentIndex.length; ++j) if (p2.parentIndex.indexOf(p1.parentIndex[j]) > -1) {
54
+ // figure out the angle halfway between the two points
55
+ // on the current circle
34
56
  const circle = circles[p1.parentIndex[j]], a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y), a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);
35
57
  let angleDiff = a2 - a1;
36
58
  angleDiff < 0 && (angleDiff += 2 * Math.PI);
37
- const a = a2 - angleDiff / 2;
59
+ // and use that angle to figure out the width of the
60
+ // arc
61
+ const a = a2 - angleDiff / 2;
38
62
  let width = data_structure_1.PointService.distancePP(midPoint, {
39
63
  x: circle.x + circle.radius * Math.sin(a),
40
64
  y: circle.y + circle.radius * Math.cos(a)
41
65
  });
42
- width > 2 * circle.radius && (width = 2 * circle.radius), (null === arc || arc.width > width) && (arc = {
66
+ // clamp the width to the largest is can actually be
67
+ // (sometimes slightly overflows because of FP errors)
68
+ width > 2 * circle.radius && (width = 2 * circle.radius),
69
+ // pick the circle whose arc has the smallest width
70
+ (null === arc || arc.width > width) && (arc = {
43
71
  circle: circle,
44
72
  width: width,
45
73
  p1: p1,
@@ -50,9 +78,13 @@ function intersectionArea(circles, stats) {
50
78
  p2 = p1);
51
79
  }
52
80
  } else {
81
+ // no intersection points, is either disjoint - or is completely
82
+ // overlapped. figure out which by examining the smallest circle
53
83
  let smallest = circles[0];
54
84
  for (let i = 1; i < circles.length; ++i) circles[i].radius < smallest.radius && (smallest = circles[i]);
55
- let disjoint = !1;
85
+ // make sure the smallest circle is completely contained in all
86
+ // the other circles
87
+ let disjoint = !1;
56
88
  for (let i = 0; i < circles.length; ++i) if (data_structure_1.PointService.distancePP(circles[i], smallest) > Math.abs(smallest.radius - circles[i].radius)) {
57
89
  disjoint = !0;
58
90
  break;
@@ -76,11 +108,13 @@ function intersectionArea(circles, stats) {
76
108
  stats.intersectionPoints = intersectionPoints), arcArea + polygonArea;
77
109
  }
78
110
 
111
+ /** returns whether a point is contained by all of a list of circles */
79
112
  function containedInCircles(point, circles) {
80
113
  for (let i = 0; i < circles.length; ++i) if (data_structure_1.PointService.distancePP(point, circles[i]) > circles[i].radius + constant_1.SMALL) return !1;
81
114
  return !0;
82
115
  }
83
116
 
117
+ /** Gets all intersection points between a bunch of circles */
84
118
  function getIntersectionPoints(circles) {
85
119
  const ret = [];
86
120
  for (let i = 0; i < circles.length; ++i) for (let j = i + 1; j < circles.length; ++j) {
@@ -93,19 +127,29 @@ function getIntersectionPoints(circles) {
93
127
  return ret;
94
128
  }
95
129
 
96
- function circleArea(r, width) {
130
+ /** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */ function circleArea(r, width) {
97
131
  return r * r * Math.acos(1 - width / r) - (r - width) * Math.sqrt(width * (2 * r - width));
98
132
  }
99
133
 
134
+ /** Returns the overlap area of two circles of radius r1 and r2 - that
135
+ have their centers separated by distance d. Simpler faster
136
+ circle intersection for only two circles */
100
137
  function circleOverlap(r1, r2, d) {
138
+ // no overlap
101
139
  if (d >= r1 + r2) return 0;
102
- if (d <= Math.abs(r1 - r2)) return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);
140
+ // completely overlapped
141
+ if (d <= Math.abs(r1 - r2)) return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);
103
142
  const w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);
104
143
  return circleArea(r1, r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d)) + circleArea(r2, w2);
105
144
  }
106
145
 
146
+ /** Given two circles (containing a x/y/radius attributes),
147
+ returns the intersecting points if possible.
148
+ note: doesn't handle cases where there are infinitely many
149
+ intersection points (circles are equivalent):, or only one intersection point*/
107
150
  function circleCircleIntersection(p1, p2) {
108
151
  const d = data_structure_1.PointService.distancePP(p1, p2), r1 = p1.radius, r2 = p2.radius;
152
+ // if to far away, or self contained - can't be done
109
153
  if (d >= r1 + r2 || d <= Math.abs(r1 - r2)) return [];
110
154
  const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d), h = Math.sqrt(r1 * r1 - a * a), x0 = p1.x + a * (p2.x - p1.x) / d, y0 = p1.y + a * (p2.y - p1.y) / d, rx = -(p2.y - p1.y) * (h / d), ry = -(p2.x - p1.x) * (h / d);
111
155
  return [ {
@@ -117,6 +161,7 @@ function circleCircleIntersection(p1, p2) {
117
161
  } ];
118
162
  }
119
163
 
164
+ /** Returns the center of a bunch of points */
120
165
  function getCenter(points) {
121
166
  const center = {
122
167
  x: 0,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/geo/circle-intersection.ts"],"names":[],"mappings":"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","file":"circle-intersection.js","sourcesContent":["/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { IPointLike } from '../data-structure';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService } from '../data-structure';\nimport { SMALL } from './constant';\nimport type { ICircleArc, ICircle, IIntersectPoint, IOverlapAreaStats } from './interface';\n\n/** Returns the intersection area of a bunch of circles (where each circle\n is an object having an x,y and radius property) */\nexport function intersectionArea(circles: ICircle[], stats?: IOverlapAreaStats) {\n // get all the intersection points of the circles\n const intersectionPoints = getIntersectionPoints(circles);\n\n // filter out points that aren't included in all the circles\n const innerPoints = intersectionPoints.filter(function (p) {\n return containedInCircles(p, circles);\n });\n\n let arcArea = 0;\n let polygonArea = 0;\n const arcs: ICircleArc[] = [];\n\n // if we have intersection points that are within all the circles,\n // then figure out the area contained by them\n if (innerPoints.length > 1) {\n // sort the points by angle from the center of the polygon, which lets\n // us just iterate over points to get the edges\n const center = getCenter(innerPoints);\n for (let i = 0; i < innerPoints.length; ++i) {\n const p = innerPoints[i];\n p.angle = Math.atan2(p.x - center.x, p.y - center.y);\n }\n innerPoints.sort(function (a, b) {\n return b.angle - a.angle;\n });\n\n // iterate over all points, get arc between the points\n // and update the areas\n let p2 = innerPoints[innerPoints.length - 1];\n for (let i = 0; i < innerPoints.length; ++i) {\n const p1 = innerPoints[i];\n\n // polygon area updates easily ...\n polygonArea += (p2.x + p1.x) * (p1.y - p2.y);\n\n // updating the arc area is a little more involved\n const midPoint = { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2 };\n let arc = null;\n\n for (let j = 0; j < p1.parentIndex.length; ++j) {\n if (p2.parentIndex.indexOf(p1.parentIndex[j]) > -1) {\n // figure out the angle halfway between the two points\n // on the current circle\n const circle = circles[p1.parentIndex[j]];\n const a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y);\n const a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);\n\n let angleDiff = a2 - a1;\n if (angleDiff < 0) {\n angleDiff += 2 * Math.PI;\n }\n\n // and use that angle to figure out the width of the\n // arc\n const a = a2 - angleDiff / 2;\n let width = PointService.distancePP(midPoint, {\n x: circle.x + circle.radius * Math.sin(a),\n y: circle.y + circle.radius * Math.cos(a)\n });\n\n // clamp the width to the largest is can actually be\n // (sometimes slightly overflows because of FP errors)\n if (width > circle.radius * 2) {\n width = circle.radius * 2;\n }\n\n // pick the circle whose arc has the smallest width\n if (arc === null || arc.width > width) {\n arc = { circle: circle, width: width, p1: p1, p2: p2 };\n }\n }\n }\n\n if (arc !== null) {\n arcs.push(arc);\n arcArea += circleArea(arc.circle.radius, arc.width);\n p2 = p1;\n }\n }\n } else {\n // no intersection points, is either disjoint - or is completely\n // overlapped. figure out which by examining the smallest circle\n let smallest = circles[0];\n for (let i = 1; i < circles.length; ++i) {\n if (circles[i].radius < smallest.radius) {\n smallest = circles[i];\n }\n }\n\n // make sure the smallest circle is completely contained in all\n // the other circles\n let disjoint = false;\n for (let i = 0; i < circles.length; ++i) {\n if (PointService.distancePP(circles[i], smallest) > Math.abs(smallest.radius - circles[i].radius)) {\n disjoint = true;\n break;\n }\n }\n\n if (disjoint) {\n arcArea = polygonArea = 0;\n } else {\n arcArea = smallest.radius * smallest.radius * Math.PI;\n arcs.push({\n circle: smallest,\n p1: { x: smallest.x, y: smallest.y + smallest.radius },\n p2: { x: smallest.x - SMALL, y: smallest.y + smallest.radius },\n width: smallest.radius * 2\n });\n }\n }\n\n polygonArea /= 2;\n if (stats) {\n stats.area = arcArea + polygonArea;\n stats.arcArea = arcArea;\n stats.polygonArea = polygonArea;\n stats.arcs = arcs;\n stats.innerPoints = innerPoints;\n stats.intersectionPoints = intersectionPoints;\n }\n\n return arcArea + polygonArea;\n}\n\n/** returns whether a point is contained by all of a list of circles */\nexport function containedInCircles(point: IPointLike, circles: ICircle[]) {\n for (let i = 0; i < circles.length; ++i) {\n if (PointService.distancePP(point, circles[i]) > circles[i].radius + SMALL) {\n return false;\n }\n }\n return true;\n}\n\n/** Gets all intersection points between a bunch of circles */\nfunction getIntersectionPoints(circles: ICircle[]) {\n const ret = [];\n for (let i = 0; i < circles.length; ++i) {\n for (let j = i + 1; j < circles.length; ++j) {\n const intersect = circleCircleIntersection(circles[i], circles[j]);\n for (let k = 0; k < intersect.length; ++k) {\n const p = intersect[k];\n p.parentIndex = [i, j];\n ret.push(p);\n }\n }\n }\n return ret;\n}\n\n/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */\nexport function circleArea(r: number, width: number) {\n return r * r * Math.acos(1 - width / r) - (r - width) * Math.sqrt(width * (2 * r - width));\n}\n\n/** Returns the overlap area of two circles of radius r1 and r2 - that\nhave their centers separated by distance d. Simpler faster\ncircle intersection for only two circles */\nexport function circleOverlap(r1: number, r2: number, d: number) {\n // no overlap\n if (d >= r1 + r2) {\n return 0;\n }\n\n // completely overlapped\n if (d <= Math.abs(r1 - r2)) {\n return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);\n }\n\n const w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d);\n const w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);\n return circleArea(r1, w1) + circleArea(r2, w2);\n}\n\n/** Given two circles (containing a x/y/radius attributes),\nreturns the intersecting points if possible.\nnote: doesn't handle cases where there are infinitely many\nintersection points (circles are equivalent):, or only one intersection point*/\nexport function circleCircleIntersection(p1: ICircle, p2: ICircle): IIntersectPoint[] {\n const d = PointService.distancePP(p1, p2);\n const r1 = p1.radius;\n const r2 = p2.radius;\n\n // if to far away, or self contained - can't be done\n if (d >= r1 + r2 || d <= Math.abs(r1 - r2)) {\n return [];\n }\n\n const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d);\n const h = Math.sqrt(r1 * r1 - a * a);\n const x0 = p1.x + (a * (p2.x - p1.x)) / d;\n const y0 = p1.y + (a * (p2.y - p1.y)) / d;\n const rx = -(p2.y - p1.y) * (h / d);\n const ry = -(p2.x - p1.x) * (h / d);\n\n return [\n { x: x0 + rx, y: y0 - ry },\n { x: x0 - rx, y: y0 + ry }\n ];\n}\n\n/** Returns the center of a bunch of points */\nexport function getCenter(points: IPointLike[]) {\n const center = { x: 0, y: 0 };\n for (let i = 0; i < points.length; ++i) {\n center.x += points[i].x;\n center.y += points[i].y;\n }\n center.x /= points.length;\n center.y /= points.length;\n return center;\n}\n"]}
1
+ {"version":3,"sources":["../src/geo/circle-intersection.ts"],"names":[],"mappings":"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","file":"circle-intersection.js","sourcesContent":["/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nimport type { IPointLike } from '../data-structure';\n// eslint-disable-next-line no-duplicate-imports\nimport { PointService } from '../data-structure';\nimport { SMALL } from './constant';\nimport type { ICircleArc, ICircle, IIntersectPoint, IOverlapAreaStats } from './interface';\n\n/** Returns the intersection area of a bunch of circles (where each circle\n is an object having an x,y and radius property) */\nexport function intersectionArea(circles: ICircle[], stats?: IOverlapAreaStats) {\n // get all the intersection points of the circles\n const intersectionPoints = getIntersectionPoints(circles);\n\n // filter out points that aren't included in all the circles\n const innerPoints = intersectionPoints.filter(function (p) {\n return containedInCircles(p, circles);\n });\n\n let arcArea = 0;\n let polygonArea = 0;\n const arcs: ICircleArc[] = [];\n\n // if we have intersection points that are within all the circles,\n // then figure out the area contained by them\n if (innerPoints.length > 1) {\n // sort the points by angle from the center of the polygon, which lets\n // us just iterate over points to get the edges\n const center = getCenter(innerPoints);\n for (let i = 0; i < innerPoints.length; ++i) {\n const p = innerPoints[i];\n p.angle = Math.atan2(p.x - center.x, p.y - center.y);\n }\n innerPoints.sort(function (a, b) {\n return b.angle - a.angle;\n });\n\n // iterate over all points, get arc between the points\n // and update the areas\n let p2 = innerPoints[innerPoints.length - 1];\n for (let i = 0; i < innerPoints.length; ++i) {\n const p1 = innerPoints[i];\n\n // polygon area updates easily ...\n polygonArea += (p2.x + p1.x) * (p1.y - p2.y);\n\n // updating the arc area is a little more involved\n const midPoint = { x: (p1.x + p2.x) / 2, y: (p1.y + p2.y) / 2 };\n let arc = null;\n\n for (let j = 0; j < p1.parentIndex.length; ++j) {\n if (p2.parentIndex.indexOf(p1.parentIndex[j]) > -1) {\n // figure out the angle halfway between the two points\n // on the current circle\n const circle = circles[p1.parentIndex[j]];\n const a1 = Math.atan2(p1.x - circle.x, p1.y - circle.y);\n const a2 = Math.atan2(p2.x - circle.x, p2.y - circle.y);\n\n let angleDiff = a2 - a1;\n if (angleDiff < 0) {\n angleDiff += 2 * Math.PI;\n }\n\n // and use that angle to figure out the width of the\n // arc\n const a = a2 - angleDiff / 2;\n let width = PointService.distancePP(midPoint, {\n x: circle.x + circle.radius * Math.sin(a),\n y: circle.y + circle.radius * Math.cos(a)\n });\n\n // clamp the width to the largest is can actually be\n // (sometimes slightly overflows because of FP errors)\n if (width > circle.radius * 2) {\n width = circle.radius * 2;\n }\n\n // pick the circle whose arc has the smallest width\n if (arc === null || arc.width > width) {\n arc = { circle: circle, width: width, p1: p1, p2: p2 };\n }\n }\n }\n\n if (arc !== null) {\n arcs.push(arc);\n arcArea += circleArea(arc.circle.radius, arc.width);\n p2 = p1;\n }\n }\n } else {\n // no intersection points, is either disjoint - or is completely\n // overlapped. figure out which by examining the smallest circle\n let smallest = circles[0];\n for (let i = 1; i < circles.length; ++i) {\n if (circles[i].radius < smallest.radius) {\n smallest = circles[i];\n }\n }\n\n // make sure the smallest circle is completely contained in all\n // the other circles\n let disjoint = false;\n for (let i = 0; i < circles.length; ++i) {\n if (PointService.distancePP(circles[i], smallest) > Math.abs(smallest.radius - circles[i].radius)) {\n disjoint = true;\n break;\n }\n }\n\n if (disjoint) {\n arcArea = polygonArea = 0;\n } else {\n arcArea = smallest.radius * smallest.radius * Math.PI;\n arcs.push({\n circle: smallest,\n p1: { x: smallest.x, y: smallest.y + smallest.radius },\n p2: { x: smallest.x - SMALL, y: smallest.y + smallest.radius },\n width: smallest.radius * 2\n });\n }\n }\n\n polygonArea /= 2;\n if (stats) {\n stats.area = arcArea + polygonArea;\n stats.arcArea = arcArea;\n stats.polygonArea = polygonArea;\n stats.arcs = arcs;\n stats.innerPoints = innerPoints;\n stats.intersectionPoints = intersectionPoints;\n }\n\n return arcArea + polygonArea;\n}\n\n/** returns whether a point is contained by all of a list of circles */\nexport function containedInCircles(point: IPointLike, circles: ICircle[]) {\n for (let i = 0; i < circles.length; ++i) {\n if (PointService.distancePP(point, circles[i]) > circles[i].radius + SMALL) {\n return false;\n }\n }\n return true;\n}\n\n/** Gets all intersection points between a bunch of circles */\nfunction getIntersectionPoints(circles: ICircle[]) {\n const ret = [];\n for (let i = 0; i < circles.length; ++i) {\n for (let j = i + 1; j < circles.length; ++j) {\n const intersect = circleCircleIntersection(circles[i], circles[j]);\n for (let k = 0; k < intersect.length; ++k) {\n const p = intersect[k];\n p.parentIndex = [i, j];\n ret.push(p);\n }\n }\n }\n return ret;\n}\n\n/** Circular segment area calculation. See http://mathworld.wolfram.com/CircularSegment.html */\nexport function circleArea(r: number, width: number) {\n return r * r * Math.acos(1 - width / r) - (r - width) * Math.sqrt(width * (2 * r - width));\n}\n\n/** Returns the overlap area of two circles of radius r1 and r2 - that\nhave their centers separated by distance d. Simpler faster\ncircle intersection for only two circles */\nexport function circleOverlap(r1: number, r2: number, d: number) {\n // no overlap\n if (d >= r1 + r2) {\n return 0;\n }\n\n // completely overlapped\n if (d <= Math.abs(r1 - r2)) {\n return Math.PI * Math.min(r1, r2) * Math.min(r1, r2);\n }\n\n const w1 = r1 - (d * d - r2 * r2 + r1 * r1) / (2 * d);\n const w2 = r2 - (d * d - r1 * r1 + r2 * r2) / (2 * d);\n return circleArea(r1, w1) + circleArea(r2, w2);\n}\n\n/** Given two circles (containing a x/y/radius attributes),\nreturns the intersecting points if possible.\nnote: doesn't handle cases where there are infinitely many\nintersection points (circles are equivalent):, or only one intersection point*/\nexport function circleCircleIntersection(p1: ICircle, p2: ICircle): IIntersectPoint[] {\n const d = PointService.distancePP(p1, p2);\n const r1 = p1.radius;\n const r2 = p2.radius;\n\n // if to far away, or self contained - can't be done\n if (d >= r1 + r2 || d <= Math.abs(r1 - r2)) {\n return [];\n }\n\n const a = (r1 * r1 - r2 * r2 + d * d) / (2 * d);\n const h = Math.sqrt(r1 * r1 - a * a);\n const x0 = p1.x + (a * (p2.x - p1.x)) / d;\n const y0 = p1.y + (a * (p2.y - p1.y)) / d;\n const rx = -(p2.y - p1.y) * (h / d);\n const ry = -(p2.x - p1.x) * (h / d);\n\n return [\n { x: x0 + rx, y: y0 - ry },\n { x: x0 - rx, y: y0 + ry }\n ];\n}\n\n/** Returns the center of a bunch of points */\nexport function getCenter(points: IPointLike[]) {\n const center = { x: 0, y: 0 };\n for (let i = 0; i < points.length; ++i) {\n center.x += points[i].x;\n center.y += points[i].y;\n }\n center.x /= points.length;\n center.y /= points.length;\n return center;\n}\n"]}
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
3
+ /* Adapted from venn.js by Ben Frederickson
4
+ * https://github.com/benfred/venn.js
5
+ * Licensed under the MIT
6
+
7
+ * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js
8
+ * License: https://github.com/benfred/venn.js/blob/master/LICENSE
9
+ * @license
10
+ */ Object.defineProperty(exports, "__esModule", {
4
11
  value: !0
5
12
  }), exports.SMALL = void 0, exports.SMALL = 1e-10;
6
13
  //# sourceMappingURL=constant.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/geo/constant.ts"],"names":[],"mappings":";;;AASa,QAAA,KAAK,GAAG,KAAK,CAAC","file":"constant.js","sourcesContent":["/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nexport const SMALL = 1e-10;\n"]}
1
+ {"version":3,"sources":["../src/geo/constant.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEU,QAAA,KAAK,GAAG,KAAK,CAAC","file":"constant.js","sourcesContent":["/* Adapted from venn.js by Ben Frederickson\n * https://github.com/benfred/venn.js\n * Licensed under the MIT\n\n * url: https://github.com/benfred/venn.js/blob/master/src/circleintersection.js\n * License: https://github.com/benfred/venn.js/blob/master/LICENSE\n * @license\n */\n\nexport const SMALL = 1e-10;\n"]}
@@ -1,3 +1,25 @@
1
+ /**
2
+ * The MIT License (MIT)
3
+ *
4
+ * Copyright (c) 2019 Morgan Herlocker
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
7
+ * this software and associated documentation files (the "Software"), to deal in
8
+ * the Software without restriction, including without limitation the rights to
9
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
10
+ * the Software, and to permit persons to whom the Software is furnished to do so,
11
+ * subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+ *
22
+ */
1
23
  import type { Feature, MultiPolygon, Polygon, Units } from './interface';
2
24
  import type { IPointLike } from '../data-structure';
3
25
  export declare function isPointInPolygon<G extends Polygon | MultiPolygon>(point: IPointLike, polygon: Feature<G> | G): boolean;
@@ -1,11 +1,33 @@
1
1
  "use strict";
2
2
 
3
- Object.defineProperty(exports, "__esModule", {
3
+ /**
4
+ * The MIT License (MIT)
5
+ *
6
+ * Copyright (c) 2019 Morgan Herlocker
7
+ *
8
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
9
+ * this software and associated documentation files (the "Software"), to deal in
10
+ * the Software without restriction, including without limitation the rights to
11
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
12
+ * the Software, and to permit persons to whom the Software is furnished to do so,
13
+ * subject to the following conditions:
14
+ *
15
+ * The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.
16
+ *
17
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
19
+ * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
20
+ * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ *
24
+ */ Object.defineProperty(exports, "__esModule", {
4
25
  value: !0
5
26
  }), exports.destination = exports.isPointInPolygon = void 0;
6
27
 
7
28
  const helpers_1 = require("@turf/helpers"), graphics_1 = require("../graphics"), angle_1 = require("../angle");
8
29
 
30
+ // https://github.com/Turfjs/turf
9
31
  function getGeom(geojson) {
10
32
  return "Feature" === geojson.type ? geojson.geometry : geojson;
11
33
  }
@@ -32,6 +54,7 @@ function isPointInPolygon(point, polygon) {
32
54
  return result;
33
55
  }
34
56
 
57
+ // https://github.com/Turfjs/turf
35
58
  function destination(point, distance, bearing, options = {}) {
36
59
  const longitude1 = (0, angle_1.degreeToRadian)(point[0]), latitude1 = (0, angle_1.degreeToRadian)(point[1]), bearingRad = (0,
37
60
  angle_1.degreeToRadian)(bearing), radians = (0, helpers_1.lengthToRadians)(distance, options.units), latitude2 = Math.asin(Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)), longitude2 = longitude1 + Math.atan2(Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1), Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/geo/invariant.ts"],"names":[],"mappings":"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","file":"invariant.js","sourcesContent":["/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Morgan Herlocker\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n */\n\nimport type { Feature, MultiPolygon, Polygon, Units } from './interface';\nimport { lengthToRadians } from '@turf/helpers';\nimport { pointInRect, polygonContainPoint } from '../graphics';\nimport type { IPointLike } from '../data-structure';\nimport { degreeToRadian, radianToDegree } from '../angle';\n\n// https://github.com/Turfjs/turf\nfunction getGeom(geojson: any): any {\n if (geojson.type === 'Feature') {\n return geojson.geometry;\n }\n return geojson;\n}\n\nexport function isPointInPolygon<G extends Polygon | MultiPolygon>(point: IPointLike, polygon: Feature<G> | G) {\n if (!point) {\n return false;\n }\n\n if (!polygon) {\n return false;\n }\n\n const geom = getGeom(polygon);\n const type = geom.type;\n // BBox [west, south, east, north]\n const bbox = polygon.bbox;\n let polys: any[] = geom.coordinates;\n\n if (bbox && pointInRect(point, { x1: bbox[0], x2: bbox[1], y1: bbox[1], y2: bbox[3] }, true) === true) {\n return false;\n }\n\n if (type === 'Polygon') {\n polys = [polys];\n }\n let result = false;\n\n for (let i = 0; i < polys.length; ++i) {\n for (let j = 0; j < polys[i].length; ++j) {\n const polyResult = polygonContainPoint(\n polys[i][j].map((p: number[]) => ({ x: p[0], y: p[1] })),\n point.x,\n point.y\n );\n if (polyResult) {\n result = true;\n return result;\n }\n }\n }\n\n return result;\n}\n\n// https://github.com/Turfjs/turf\nexport function destination(\n point: IPointLike,\n distance: number,\n bearing: number,\n options: {\n units?: Units;\n } = {}\n) {\n const longitude1 = degreeToRadian(point[0]);\n const latitude1 = degreeToRadian(point[1]);\n const bearingRad = degreeToRadian(bearing);\n const radians = lengthToRadians(distance, options.units);\n\n // Main\n const latitude2 = Math.asin(\n Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)\n );\n const longitude2 =\n longitude1 +\n Math.atan2(\n Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1),\n Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2)\n );\n const lng = radianToDegree(longitude2);\n const lat = radianToDegree(latitude2);\n\n return { x: lng, y: lat };\n}\n"]}
1
+ {"version":3,"sources":["../src/geo/invariant.ts"],"names":[],"mappings":"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","file":"invariant.js","sourcesContent":["/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2019 Morgan Herlocker\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of\n * this software and associated documentation files (the \"Software\"), to deal in\n * the Software without restriction, including without limitation the rights to\n * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n * the Software, and to permit persons to whom the Software is furnished to do so,\n * subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in allcopies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n *\n */\n\nimport type { Feature, MultiPolygon, Polygon, Units } from './interface';\nimport { lengthToRadians } from '@turf/helpers';\nimport { pointInRect, polygonContainPoint } from '../graphics';\nimport type { IPointLike } from '../data-structure';\nimport { degreeToRadian, radianToDegree } from '../angle';\n\n// https://github.com/Turfjs/turf\nfunction getGeom(geojson: any): any {\n if (geojson.type === 'Feature') {\n return geojson.geometry;\n }\n return geojson;\n}\n\nexport function isPointInPolygon<G extends Polygon | MultiPolygon>(point: IPointLike, polygon: Feature<G> | G) {\n if (!point) {\n return false;\n }\n\n if (!polygon) {\n return false;\n }\n\n const geom = getGeom(polygon);\n const type = geom.type;\n // BBox [west, south, east, north]\n const bbox = polygon.bbox;\n let polys: any[] = geom.coordinates;\n\n if (bbox && pointInRect(point, { x1: bbox[0], x2: bbox[1], y1: bbox[1], y2: bbox[3] }, true) === true) {\n return false;\n }\n\n if (type === 'Polygon') {\n polys = [polys];\n }\n let result = false;\n\n for (let i = 0; i < polys.length; ++i) {\n for (let j = 0; j < polys[i].length; ++j) {\n const polyResult = polygonContainPoint(\n polys[i][j].map((p: number[]) => ({ x: p[0], y: p[1] })),\n point.x,\n point.y\n );\n if (polyResult) {\n result = true;\n return result;\n }\n }\n }\n\n return result;\n}\n\n// https://github.com/Turfjs/turf\nexport function destination(\n point: IPointLike,\n distance: number,\n bearing: number,\n options: {\n units?: Units;\n } = {}\n) {\n const longitude1 = degreeToRadian(point[0]);\n const latitude1 = degreeToRadian(point[1]);\n const bearingRad = degreeToRadian(bearing);\n const radians = lengthToRadians(distance, options.units);\n\n // Main\n const latitude2 = Math.asin(\n Math.sin(latitude1) * Math.cos(radians) + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad)\n );\n const longitude2 =\n longitude1 +\n Math.atan2(\n Math.sin(bearingRad) * Math.sin(radians) * Math.cos(latitude1),\n Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2)\n );\n const lng = radianToDegree(longitude2);\n const lat = radianToDegree(latitude2);\n\n return { x: lng, y: lat };\n}\n"]}
@@ -9,7 +9,9 @@ const intersect_1 = require("./intersect");
9
9
  let x1, y1, x2, y2;
10
10
 
11
11
  function getAABBFromPoints(points) {
12
- return x1 = 1 / 0, y1 = 1 / 0, x2 = -1 / 0, y2 = -1 / 0, points.forEach((point => {
12
+ return x1 = 1 / 0, y1 = 1 / 0, x2 = -1 / 0, y2 = -1 / 0,
13
+ // todo 有优化空间
14
+ points.forEach((point => {
13
15
  x1 > point.x && (x1 = point.x), x2 < point.x && (x2 = point.x), y1 > point.y && (y1 = point.y),
14
16
  y2 < point.y && (y2 = point.y);
15
17
  })), {
@@ -32,7 +34,8 @@ function unionAABB(bounds1, bounds2, buffer = 3, format = !1) {
32
34
  y12 = temp), x21 > x22 && (temp = x21, x21 = x22, x22 = temp), y21 > y22 && (temp = y21,
33
35
  y21 = y22, y22 = temp);
34
36
  }
35
- if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) return [ bounds1, bounds2 ];
37
+ // 不相交直接跳过
38
+ if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) return [ bounds1, bounds2 ];
36
39
  const area1 = (x12 - x11 + 2 * buffer) * (y12 - y11 + 2 * buffer), area2 = (x22 - x21 + 2 * buffer) * (y22 - y21 + 2 * buffer), x1 = Math.min(x11, x21), y1 = Math.min(y11, y21), x2 = Math.max(x12, x22), y2 = Math.max(y12, y22);
37
40
  return area1 + area2 > (x2 - x1) * (y2 - y1) ? [ {
38
41
  x1: x1,
@@ -48,7 +51,8 @@ function mergeAABB(boundsList) {
48
51
  const l = [];
49
52
  list.forEach((b => {
50
53
  let arr;
51
- (arr = unionAABB(baseBound, b)).length > 1 ? l.push(b) : baseBound = arr[0];
54
+ // 相交
55
+ (arr = unionAABB(baseBound, b)).length > 1 ? l.push(b) : baseBound = arr[0];
52
56
  })), nextList.push(baseBound), l.length && _merge(l[0], l.slice(1));
53
57
  }(boundsList[0], boundsList.slice(1)), nextList;
54
58
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphics/algorithm/aabb.ts"],"names":[],"mappings":"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","file":"aabb.js","sourcesContent":["import type { IBoundsLike } from '../../data-structure';\nimport type { Point } from './interface';\nimport { pointInRect } from './intersect';\n\nlet x1: number;\nlet y1: number;\nlet x2: number;\nlet y2: number;\nexport function getAABBFromPoints(points: Point[]): IBoundsLike {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n // todo 有优化空间\n points.forEach(point => {\n if (x1 > point.x) {\n x1 = point.x;\n }\n if (x2 < point.x) {\n x2 = point.x;\n }\n if (y1 > point.y) {\n y1 = point.y;\n }\n if (y2 < point.y) {\n y2 = point.y;\n }\n });\n\n return { x1, y1, x2, y2 };\n}\n\nexport function pointInAABB(point: Point, aabb: IBoundsLike): boolean {\n return pointInRect(point, aabb, false);\n}\n\nexport function unionAABB(\n bounds1: IBoundsLike,\n bounds2: IBoundsLike,\n buffer = 3,\n format = false\n): [IBoundsLike, IBoundsLike?] {\n let x11 = bounds1.x1;\n let x12 = bounds1.x2;\n let y11 = bounds1.y1;\n let y12 = bounds1.y2;\n let x21 = bounds2.x1;\n let x22 = bounds2.x2;\n let y21 = bounds2.y1;\n let y22 = bounds2.y2;\n if (format) {\n let temp;\n if (x11 > x12) {\n temp = x11;\n x11 = x12;\n x12 = temp;\n }\n if (y11 > y12) {\n temp = y11;\n y11 = y12;\n y12 = temp;\n }\n if (x21 > x22) {\n temp = x21;\n x21 = x22;\n x22 = temp;\n }\n if (y21 > y22) {\n temp = y21;\n y21 = y22;\n y22 = temp;\n }\n }\n // 不相交直接跳过\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return [bounds1, bounds2];\n }\n\n const area1 = (x12 - x11 + buffer * 2) * (y12 - y11 + buffer * 2);\n const area2 = (x22 - x21 + buffer * 2) * (y22 - y21 + buffer * 2);\n const x1 = Math.min(x11, x21);\n const y1 = Math.min(y11, y21);\n const x2 = Math.max(x12, x22);\n const y2 = Math.max(y12, y22);\n const unionArea = (x2 - x1) * (y2 - y1);\n if (area1 + area2 > unionArea) {\n return [{ x1, x2, y1, y2 }];\n }\n return [bounds1, bounds2];\n}\n\nexport function mergeAABB(boundsList: IBoundsLike[]) {\n const nextList: IBoundsLike[] = [];\n function _merge(baseBound: IBoundsLike, list: IBoundsLike[]) {\n const l: IBoundsLike[] = [];\n list.forEach(b => {\n let arr: [IBoundsLike, IBoundsLike?];\n // 相交\n if ((arr = unionAABB(baseBound, b)).length > 1) {\n l.push(b);\n return;\n }\n baseBound = arr[0];\n });\n nextList.push(baseBound);\n l.length && _merge(l[0], l.slice(1));\n }\n _merge(boundsList[0], boundsList.slice(1));\n return nextList;\n}\n"]}
1
+ {"version":3,"sources":["../src/graphics/algorithm/aabb.ts"],"names":[],"mappings":"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","file":"aabb.js","sourcesContent":["import type { IBoundsLike } from '../../data-structure';\nimport type { Point } from './interface';\nimport { pointInRect } from './intersect';\n\nlet x1: number;\nlet y1: number;\nlet x2: number;\nlet y2: number;\nexport function getAABBFromPoints(points: Point[]): IBoundsLike {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n // todo 有优化空间\n points.forEach(point => {\n if (x1 > point.x) {\n x1 = point.x;\n }\n if (x2 < point.x) {\n x2 = point.x;\n }\n if (y1 > point.y) {\n y1 = point.y;\n }\n if (y2 < point.y) {\n y2 = point.y;\n }\n });\n\n return { x1, y1, x2, y2 };\n}\n\nexport function pointInAABB(point: Point, aabb: IBoundsLike): boolean {\n return pointInRect(point, aabb, false);\n}\n\nexport function unionAABB(\n bounds1: IBoundsLike,\n bounds2: IBoundsLike,\n buffer = 3,\n format = false\n): [IBoundsLike, IBoundsLike?] {\n let x11 = bounds1.x1;\n let x12 = bounds1.x2;\n let y11 = bounds1.y1;\n let y12 = bounds1.y2;\n let x21 = bounds2.x1;\n let x22 = bounds2.x2;\n let y21 = bounds2.y1;\n let y22 = bounds2.y2;\n if (format) {\n let temp;\n if (x11 > x12) {\n temp = x11;\n x11 = x12;\n x12 = temp;\n }\n if (y11 > y12) {\n temp = y11;\n y11 = y12;\n y12 = temp;\n }\n if (x21 > x22) {\n temp = x21;\n x21 = x22;\n x22 = temp;\n }\n if (y21 > y22) {\n temp = y21;\n y21 = y22;\n y22 = temp;\n }\n }\n // 不相交直接跳过\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return [bounds1, bounds2];\n }\n\n const area1 = (x12 - x11 + buffer * 2) * (y12 - y11 + buffer * 2);\n const area2 = (x22 - x21 + buffer * 2) * (y22 - y21 + buffer * 2);\n const x1 = Math.min(x11, x21);\n const y1 = Math.min(y11, y21);\n const x2 = Math.max(x12, x22);\n const y2 = Math.max(y12, y22);\n const unionArea = (x2 - x1) * (y2 - y1);\n if (area1 + area2 > unionArea) {\n return [{ x1, x2, y1, y2 }];\n }\n return [bounds1, bounds2];\n}\n\nexport function mergeAABB(boundsList: IBoundsLike[]) {\n const nextList: IBoundsLike[] = [];\n function _merge(baseBound: IBoundsLike, list: IBoundsLike[]) {\n const l: IBoundsLike[] = [];\n list.forEach(b => {\n let arr: [IBoundsLike, IBoundsLike?];\n // 相交\n if ((arr = unionAABB(baseBound, b)).length > 1) {\n l.push(b);\n return;\n }\n baseBound = arr[0];\n });\n nextList.push(baseBound);\n l.length && _merge(l[0], l.slice(1));\n }\n _merge(boundsList[0], boundsList.slice(1));\n return nextList;\n}\n"]}