@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
@@ -6,7 +6,8 @@ import { abs, epsilon } from "../math";
6
6
 
7
7
  export function transformBoundsWithMatrix(out, bounds, matrix) {
8
8
  const {x1: x1, y1: y1, x2: x2, y2: y2} = bounds;
9
- return matrix.onlyTranslate() ? (out !== bounds && out.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2),
9
+ // 如果没有旋转和缩放,那就直接translate
10
+ return matrix.onlyTranslate() ? (out !== bounds && out.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2),
10
11
  out.translate(matrix.e, matrix.f), bounds) : (out.clear(), out.add(matrix.a * x1 + matrix.c * y1 + matrix.e, matrix.b * x1 + matrix.d * y1 + matrix.f),
11
12
  out.add(matrix.a * x2 + matrix.c * y1 + matrix.e, matrix.b * x2 + matrix.d * y1 + matrix.f),
12
13
  out.add(matrix.a * x2 + matrix.c * y2 + matrix.e, matrix.b * x2 + matrix.d * y2 + matrix.f),
@@ -14,7 +15,16 @@ export function transformBoundsWithMatrix(out, bounds, matrix) {
14
15
  bounds);
15
16
  }
16
17
 
17
- export function transformBounds(bounds, x, y, scaleX, scaleY, angle, rotateCenter) {
18
+ /**
19
+ * 依据graphic的属性对bounds进行变换
20
+ * @param bounds
21
+ * @param x
22
+ * @param y
23
+ * @param scaleX
24
+ * @param scaleY
25
+ * @param angle
26
+ * @param rotateCenter
27
+ */ export function transformBounds(bounds, x, y, scaleX, scaleY, angle, rotateCenter) {
18
28
  if (!(abs(scaleX) <= epsilon || abs(scaleY) <= epsilon)) {
19
29
  if (1 !== scaleX && bounds.scaleX(scaleX), 1 !== scaleY && bounds.scaleY(scaleY),
20
30
  isFinite(angle) && Math.abs(angle) > epsilon) {
@@ -25,6 +35,37 @@ export function transformBounds(bounds, x, y, scaleX, scaleY, angle, rotateCente
25
35
  }
26
36
  }
27
37
 
38
+ /**
39
+ Copyright (c) 2015-2021, University of Washington Interactive Data Lab
40
+ All rights reserved.
41
+
42
+ Redistribution and use in source and binary forms, with or without
43
+ modification, are permitted provided that the following conditions are met:
44
+
45
+ 1. Redistributions of source code must retain the above copyright notice, this
46
+ list of conditions and the following disclaimer.
47
+
48
+ 2. Redistributions in binary form must reproduce the above copyright notice,
49
+ this list of conditions and the following disclaimer in the documentation
50
+ and/or other materials provided with the distribution.
51
+
52
+ 3. Neither the name of the copyright holder nor the names of its contributors
53
+ may be used to endorse or promote products derived from this software
54
+ without specific prior written permission.
55
+
56
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
57
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
58
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
59
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
60
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
61
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
62
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
63
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
64
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
65
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
66
+ */
67
+ // 基于Vega的Bounds重构
68
+ // https://github.com/vega/vega/blob/825bfaba6ccfe3306183df22b8c955a07bb30714/packages/vega-scenegraph/src/Bounds.js
28
69
  export class Bounds {
29
70
  constructor(bounds) {
30
71
  bounds ? this.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2) : this.clear();
@@ -72,24 +113,49 @@ export class Bounds {
72
113
  const p = this.scalePoints(sx, sy, x, y);
73
114
  return this.clear().add(p[0], p[1]).add(p[2], p[3]);
74
115
  }
75
- union(b) {
116
+ /**
117
+ * 并集
118
+ * @param b
119
+ * @returns
120
+ */ union(b) {
76
121
  return b.x1 < this.x1 && (this.x1 = b.x1), b.y1 < this.y1 && (this.y1 = b.y1), b.x2 > this.x2 && (this.x2 = b.x2),
77
122
  b.y2 > this.y2 && (this.y2 = b.y2), this;
78
123
  }
79
- intersect(b) {
124
+ /**
125
+ * 交集
126
+ * @param b
127
+ * @returns
128
+ */ intersect(b) {
80
129
  return b.x1 > this.x1 && (this.x1 = b.x1), b.y1 > this.y1 && (this.y1 = b.y1), b.x2 < this.x2 && (this.x2 = b.x2),
81
130
  b.y2 < this.y2 && (this.y2 = b.y2), this;
82
131
  }
83
- encloses(b) {
132
+ /**
133
+ * 是否包含b
134
+ * @param b
135
+ * @returns
136
+ */ encloses(b) {
84
137
  return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;
85
138
  }
86
- alignsWith(b) {
139
+ /**
140
+ * 是否共边
141
+ * @param b
142
+ * @returns
143
+ */ alignsWith(b) {
87
144
  return b && (this.x1 === b.x1 || this.x2 === b.x2 || this.y1 === b.y1 || this.y2 === b.y2);
88
145
  }
89
- intersects(b) {
146
+ /**
147
+ * 是否相交
148
+ * @param b
149
+ * @returns
150
+ */ intersects(b) {
90
151
  return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);
91
152
  }
92
- contains(x = 0, y = 0) {
153
+ /**
154
+ * 是否包含
155
+ * @param x
156
+ * @param y
157
+ * @returns
158
+ */ contains(x = 0, y = 0) {
93
159
  return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);
94
160
  }
95
161
  containsPoint(p) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data-structure/bounds.ts"],"names":[],"mappings":"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","file":"bounds.js","sourcesContent":["import { isArray } from '../common';\nimport { isRotateAABBIntersect, rotatePoint } from '../graphics';\nimport type { vec4, vec8 } from '../math';\nimport { abs, epsilon } from '../math';\nimport type { IMatrix } from './matrix';\nimport type { IPointLike } from './point';\n\nexport type IBoundsLike = Pick<IBounds, 'x1' | 'y1' | 'x2' | 'y2'>;\nexport type IAABBBoundsLike = IBoundsLike;\nexport type IOBBBoundsLike = Pick<IOBBBounds, 'x1' | 'y1' | 'x2' | 'y2' | 'angle'>;\n\nexport interface IBounds {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n clone: () => IBounds;\n clear: () => IBounds;\n empty: () => boolean;\n equals: (b: IBounds) => boolean;\n set: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n setValue: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n add: (x: number, y: number) => IBounds;\n expand: (d: number) => IBounds;\n round: () => IBounds;\n translate: (dx: number, dy: number) => IBounds;\n rotate: (angle: number, x: number, y: number) => IBounds;\n scale: (sx: number, sy: number, x: number, y: number) => IBounds;\n /**\n * 并集\n * @param b\n * @returns\n */\n union: (b: IBoundsLike) => IBounds;\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect: (b: IBoundsLike) => IBounds;\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses: (b: IBoundsLike) => boolean;\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith: (b: IBoundsLike) => boolean;\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects: (b: IBoundsLike) => boolean;\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains: (x: number, y: number) => boolean;\n containsPoint: (p: IPointLike) => boolean;\n width: () => number;\n height: () => number;\n scaleX: (s: number) => IBounds;\n scaleY: (s: number) => IBounds;\n\n copy: (b: IBoundsLike) => IBounds;\n\n transformWithMatrix: (matrix: IMatrix) => IBounds;\n}\n\nexport type IAABBBounds = IBounds;\n\nexport interface IOBBBounds extends IBounds {\n angle: number;\n getRotatedCorners: () => IPointLike[];\n}\n\nexport function transformBoundsWithMatrix(out: IBounds, bounds: IBounds, matrix: IMatrix): IBounds {\n const { x1, y1, x2, y2 } = bounds;\n // 如果没有旋转和缩放,那就直接translate\n if (matrix.onlyTranslate()) {\n if (out !== bounds) {\n out.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n }\n out.translate(matrix.e, matrix.f);\n return bounds;\n }\n out.clear();\n out.add(matrix.a * x1 + matrix.c * y1 + matrix.e, matrix.b * x1 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y1 + matrix.e, matrix.b * x2 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y2 + matrix.e, matrix.b * x2 + matrix.d * y2 + matrix.f);\n out.add(matrix.a * x1 + matrix.c * y2 + matrix.e, matrix.b * x1 + matrix.d * y2 + matrix.f);\n return bounds;\n}\n\n/**\n * 依据graphic的属性对bounds进行变换\n * @param bounds\n * @param x\n * @param y\n * @param scaleX\n * @param scaleY\n * @param angle\n * @param rotateCenter\n */\nexport function transformBounds(\n bounds: IBounds,\n x: number,\n y: number,\n scaleX: number,\n scaleY: number,\n angle: number,\n rotateCenter?: [number, number]\n) {\n if (abs(scaleX) <= epsilon || abs(scaleY) <= epsilon) {\n return;\n }\n\n scaleX !== 1 && bounds.scaleX(scaleX);\n scaleY !== 1 && bounds.scaleY(scaleY);\n\n if (isFinite(angle) && Math.abs(angle) > epsilon) {\n let rx = 0;\n let ry = 0;\n if (rotateCenter !== undefined) {\n rx = rotateCenter[0];\n ry = rotateCenter[1];\n }\n bounds.rotate(angle, rx, ry);\n }\n\n bounds.translate(x, y);\n}\n\n/**\nCopyright (c) 2015-2021, University of Washington Interactive Data Lab\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n// 基于Vega的Bounds重构\n// https://github.com/vega/vega/blob/825bfaba6ccfe3306183df22b8c955a07bb30714/packages/vega-scenegraph/src/Bounds.js\nexport class Bounds implements IBounds {\n // 默认初始值是Number.MAX_VALUE\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n\n constructor(bounds?: Bounds) {\n if (bounds) {\n this.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n } else {\n this.clear();\n }\n }\n\n clone() {\n return new Bounds(this);\n }\n\n clear(): Bounds {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n }\n empty(): boolean {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n }\n equals(b: IBoundsLike): boolean {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n }\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n return this;\n }\n set(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n }\n add(x: number = 0, y: number = 0): Bounds {\n if (x < this.x1) {\n this.x1 = x;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n return this;\n }\n expand(d: number | [number, number, number, number] = 0): Bounds {\n if (isArray(d)) {\n this.y1 -= d[0];\n this.x2 += d[1];\n this.y2 += d[2];\n this.x1 -= d[3];\n } else {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n }\n return this;\n }\n round(): Bounds {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n }\n translate(dx: number = 0, dy: number = 0): Bounds {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n }\n rotate(angle: number = 0, x: number = 0, y: number = 0) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n }\n scale(sx: number = 0, sy: number = 0, x: number = 0, y: number = 0) {\n const p = this.scalePoints(sx, sy, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]);\n }\n /**\n * 并集\n * @param b\n * @returns\n */\n union(b: IBoundsLike): Bounds {\n if (b.x1 < this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 < this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 > this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 > this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect(b: IBoundsLike): Bounds {\n if (b.x1 > this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 > this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 < this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 < this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses(b: IBoundsLike): boolean {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n }\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith(b: IBoundsLike): boolean {\n return b && (this.x1 === b.x1 || this.x2 === b.x2 || this.y1 === b.y1 || this.y2 === b.y2);\n }\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects(b: IBoundsLike): boolean {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n }\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains(x: number = 0, y: number = 0): boolean {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n }\n containsPoint(p: IPointLike): boolean {\n return !(p.x < this.x1 || p.x > this.x2 || p.y < this.y1 || p.y > this.y2);\n }\n width(): number {\n if (this.empty()) {\n return 0;\n }\n return this.x2 - this.x1;\n }\n height(): number {\n if (this.empty()) {\n return 0;\n }\n return this.y2 - this.y1;\n }\n scaleX(s: number = 0): Bounds {\n this.x1 *= s;\n this.x2 *= s;\n return this;\n }\n\n scaleY(s: number = 0): Bounds {\n this.y1 *= s;\n this.y2 *= s;\n return this;\n }\n\n transformWithMatrix(matrix: IMatrix): Bounds {\n transformBoundsWithMatrix(this, this, matrix);\n return this;\n }\n\n copy(b: IBoundsLike) {\n this.x1 = b.x1;\n this.y1 = b.y1;\n this.x2 = b.x2;\n this.y2 = b.y2;\n return this;\n }\n private rotatedPoints(angle: number, x: number, y: number): vec8 {\n const { x1, y1, x2, y2 } = this;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = x - x * cos + y * sin;\n const cy = y - x * sin - y * cos;\n\n return [\n cos * x1 - sin * y1 + cx,\n sin * x1 + cos * y1 + cy,\n cos * x1 - sin * y2 + cx,\n sin * x1 + cos * y2 + cy,\n cos * x2 - sin * y1 + cx,\n sin * x2 + cos * y1 + cy,\n cos * x2 - sin * y2 + cx,\n sin * x2 + cos * y2 + cy\n ];\n }\n private scalePoints(sx: number, sy: number, x: number, y: number): vec4 {\n const { x1, y1, x2, y2 } = this;\n\n return [sx * x1 + (1 - sx) * x, sy * y1 + (1 - sy) * y, sx * x2 + (1 - sx) * x, sy * y2 + (1 - sy) * y];\n }\n}\n\nexport class AABBBounds extends Bounds {}\nexport class OBBBounds extends Bounds {\n angle: number;\n\n constructor(bounds?: Bounds, angle = 0) {\n super(bounds);\n if (bounds) {\n this.angle = (bounds as any).angle ?? angle;\n }\n }\n\n intersects(b: OBBBounds): boolean {\n return isRotateAABBIntersect(this, b);\n }\n\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0, angle = 0): Bounds {\n super.setValue(x1, y1, x2, y2);\n this.angle = angle;\n return this;\n }\n\n clone(): OBBBounds {\n return new OBBBounds(this);\n }\n\n getRotatedCorners(): IPointLike[] {\n const cx = (this.x1 + this.x2) / 2;\n const cy = (this.y1 + this.y2) / 2;\n\n const originPoint = { x: cx, y: cy };\n return [\n rotatePoint({ x: this.x1, y: this.y1 }, this.angle, originPoint),\n rotatePoint({ x: this.x2, y: this.y1 }, this.angle, originPoint),\n rotatePoint({ x: this.x1, y: this.y2 }, this.angle, originPoint),\n rotatePoint({ x: this.x2, y: this.y2 }, this.angle, originPoint)\n ];\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/data-structure/bounds.ts"],"names":[],"mappings":"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","file":"bounds.js","sourcesContent":["import { isArray } from '../common';\nimport { isRotateAABBIntersect, rotatePoint } from '../graphics';\nimport type { vec4, vec8 } from '../math';\nimport { abs, epsilon } from '../math';\nimport type { IMatrix } from './matrix';\nimport type { IPointLike } from './point';\n\nexport type IBoundsLike = Pick<IBounds, 'x1' | 'y1' | 'x2' | 'y2'>;\nexport type IAABBBoundsLike = IBoundsLike;\nexport type IOBBBoundsLike = Pick<IOBBBounds, 'x1' | 'y1' | 'x2' | 'y2' | 'angle'>;\n\nexport interface IBounds {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n clone: () => IBounds;\n clear: () => IBounds;\n empty: () => boolean;\n equals: (b: IBounds) => boolean;\n set: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n setValue: (x1: number, y1: number, x2: number, y2: number) => IBounds;\n add: (x: number, y: number) => IBounds;\n expand: (d: number) => IBounds;\n round: () => IBounds;\n translate: (dx: number, dy: number) => IBounds;\n rotate: (angle: number, x: number, y: number) => IBounds;\n scale: (sx: number, sy: number, x: number, y: number) => IBounds;\n /**\n * 并集\n * @param b\n * @returns\n */\n union: (b: IBoundsLike) => IBounds;\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect: (b: IBoundsLike) => IBounds;\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses: (b: IBoundsLike) => boolean;\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith: (b: IBoundsLike) => boolean;\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects: (b: IBoundsLike) => boolean;\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains: (x: number, y: number) => boolean;\n containsPoint: (p: IPointLike) => boolean;\n width: () => number;\n height: () => number;\n scaleX: (s: number) => IBounds;\n scaleY: (s: number) => IBounds;\n\n copy: (b: IBoundsLike) => IBounds;\n\n transformWithMatrix: (matrix: IMatrix) => IBounds;\n}\n\nexport type IAABBBounds = IBounds;\n\nexport interface IOBBBounds extends IBounds {\n angle: number;\n getRotatedCorners: () => IPointLike[];\n}\n\nexport function transformBoundsWithMatrix(out: IBounds, bounds: IBounds, matrix: IMatrix): IBounds {\n const { x1, y1, x2, y2 } = bounds;\n // 如果没有旋转和缩放,那就直接translate\n if (matrix.onlyTranslate()) {\n if (out !== bounds) {\n out.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n }\n out.translate(matrix.e, matrix.f);\n return bounds;\n }\n out.clear();\n out.add(matrix.a * x1 + matrix.c * y1 + matrix.e, matrix.b * x1 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y1 + matrix.e, matrix.b * x2 + matrix.d * y1 + matrix.f);\n out.add(matrix.a * x2 + matrix.c * y2 + matrix.e, matrix.b * x2 + matrix.d * y2 + matrix.f);\n out.add(matrix.a * x1 + matrix.c * y2 + matrix.e, matrix.b * x1 + matrix.d * y2 + matrix.f);\n return bounds;\n}\n\n/**\n * 依据graphic的属性对bounds进行变换\n * @param bounds\n * @param x\n * @param y\n * @param scaleX\n * @param scaleY\n * @param angle\n * @param rotateCenter\n */\nexport function transformBounds(\n bounds: IBounds,\n x: number,\n y: number,\n scaleX: number,\n scaleY: number,\n angle: number,\n rotateCenter?: [number, number]\n) {\n if (abs(scaleX) <= epsilon || abs(scaleY) <= epsilon) {\n return;\n }\n\n scaleX !== 1 && bounds.scaleX(scaleX);\n scaleY !== 1 && bounds.scaleY(scaleY);\n\n if (isFinite(angle) && Math.abs(angle) > epsilon) {\n let rx = 0;\n let ry = 0;\n if (rotateCenter !== undefined) {\n rx = rotateCenter[0];\n ry = rotateCenter[1];\n }\n bounds.rotate(angle, rx, ry);\n }\n\n bounds.translate(x, y);\n}\n\n/**\nCopyright (c) 2015-2021, University of Washington Interactive Data Lab\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n// 基于Vega的Bounds重构\n// https://github.com/vega/vega/blob/825bfaba6ccfe3306183df22b8c955a07bb30714/packages/vega-scenegraph/src/Bounds.js\nexport class Bounds implements IBounds {\n // 默认初始值是Number.MAX_VALUE\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n\n constructor(bounds?: Bounds) {\n if (bounds) {\n this.setValue(bounds.x1, bounds.y1, bounds.x2, bounds.y2);\n } else {\n this.clear();\n }\n }\n\n clone() {\n return new Bounds(this);\n }\n\n clear(): Bounds {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n }\n empty(): boolean {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n }\n equals(b: IBoundsLike): boolean {\n return this.x1 === b.x1 && this.y1 === b.y1 && this.x2 === b.x2 && this.y2 === b.y2;\n }\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n this.x1 = x1;\n this.y1 = y1;\n this.x2 = x2;\n this.y2 = y2;\n return this;\n }\n set(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0): Bounds {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n }\n add(x: number = 0, y: number = 0): Bounds {\n if (x < this.x1) {\n this.x1 = x;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n return this;\n }\n expand(d: number | [number, number, number, number] = 0): Bounds {\n if (isArray(d)) {\n this.y1 -= d[0];\n this.x2 += d[1];\n this.y2 += d[2];\n this.x1 -= d[3];\n } else {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n }\n return this;\n }\n round(): Bounds {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n }\n translate(dx: number = 0, dy: number = 0): Bounds {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n }\n rotate(angle: number = 0, x: number = 0, y: number = 0) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]).add(p[4], p[5]).add(p[6], p[7]);\n }\n scale(sx: number = 0, sy: number = 0, x: number = 0, y: number = 0) {\n const p = this.scalePoints(sx, sy, x, y);\n return this.clear().add(p[0], p[1]).add(p[2], p[3]);\n }\n /**\n * 并集\n * @param b\n * @returns\n */\n union(b: IBoundsLike): Bounds {\n if (b.x1 < this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 < this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 > this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 > this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 交集\n * @param b\n * @returns\n */\n intersect(b: IBoundsLike): Bounds {\n if (b.x1 > this.x1) {\n this.x1 = b.x1;\n }\n if (b.y1 > this.y1) {\n this.y1 = b.y1;\n }\n if (b.x2 < this.x2) {\n this.x2 = b.x2;\n }\n if (b.y2 < this.y2) {\n this.y2 = b.y2;\n }\n return this;\n }\n /**\n * 是否包含b\n * @param b\n * @returns\n */\n encloses(b: IBoundsLike): boolean {\n return b && this.x1 <= b.x1 && this.x2 >= b.x2 && this.y1 <= b.y1 && this.y2 >= b.y2;\n }\n /**\n * 是否共边\n * @param b\n * @returns\n */\n alignsWith(b: IBoundsLike): boolean {\n return b && (this.x1 === b.x1 || this.x2 === b.x2 || this.y1 === b.y1 || this.y2 === b.y2);\n }\n /**\n * 是否相交\n * @param b\n * @returns\n */\n intersects(b: IBoundsLike): boolean {\n return b && !(this.x2 < b.x1 || this.x1 > b.x2 || this.y2 < b.y1 || this.y1 > b.y2);\n }\n /**\n * 是否包含\n * @param x\n * @param y\n * @returns\n */\n contains(x: number = 0, y: number = 0): boolean {\n return !(x < this.x1 || x > this.x2 || y < this.y1 || y > this.y2);\n }\n containsPoint(p: IPointLike): boolean {\n return !(p.x < this.x1 || p.x > this.x2 || p.y < this.y1 || p.y > this.y2);\n }\n width(): number {\n if (this.empty()) {\n return 0;\n }\n return this.x2 - this.x1;\n }\n height(): number {\n if (this.empty()) {\n return 0;\n }\n return this.y2 - this.y1;\n }\n scaleX(s: number = 0): Bounds {\n this.x1 *= s;\n this.x2 *= s;\n return this;\n }\n\n scaleY(s: number = 0): Bounds {\n this.y1 *= s;\n this.y2 *= s;\n return this;\n }\n\n transformWithMatrix(matrix: IMatrix): Bounds {\n transformBoundsWithMatrix(this, this, matrix);\n return this;\n }\n\n copy(b: IBoundsLike) {\n this.x1 = b.x1;\n this.y1 = b.y1;\n this.x2 = b.x2;\n this.y2 = b.y2;\n return this;\n }\n private rotatedPoints(angle: number, x: number, y: number): vec8 {\n const { x1, y1, x2, y2 } = this;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = x - x * cos + y * sin;\n const cy = y - x * sin - y * cos;\n\n return [\n cos * x1 - sin * y1 + cx,\n sin * x1 + cos * y1 + cy,\n cos * x1 - sin * y2 + cx,\n sin * x1 + cos * y2 + cy,\n cos * x2 - sin * y1 + cx,\n sin * x2 + cos * y1 + cy,\n cos * x2 - sin * y2 + cx,\n sin * x2 + cos * y2 + cy\n ];\n }\n private scalePoints(sx: number, sy: number, x: number, y: number): vec4 {\n const { x1, y1, x2, y2 } = this;\n\n return [sx * x1 + (1 - sx) * x, sy * y1 + (1 - sy) * y, sx * x2 + (1 - sx) * x, sy * y2 + (1 - sy) * y];\n }\n}\n\nexport class AABBBounds extends Bounds {}\nexport class OBBBounds extends Bounds {\n angle: number;\n\n constructor(bounds?: Bounds, angle = 0) {\n super(bounds);\n if (bounds) {\n this.angle = (bounds as any).angle ?? angle;\n }\n }\n\n intersects(b: OBBBounds): boolean {\n return isRotateAABBIntersect(this, b);\n }\n\n setValue(x1: number = 0, y1: number = 0, x2: number = 0, y2: number = 0, angle = 0): Bounds {\n super.setValue(x1, y1, x2, y2);\n this.angle = angle;\n return this;\n }\n\n clone(): OBBBounds {\n return new OBBBounds(this);\n }\n\n getRotatedCorners(): IPointLike[] {\n const cx = (this.x1 + this.x2) / 2;\n const cy = (this.y1 + this.y2) / 2;\n\n const originPoint = { x: cx, y: cy };\n return [\n rotatePoint({ x: this.x1, y: this.y1 }, this.angle, originPoint),\n rotatePoint({ x: this.x2, y: this.y1 }, this.angle, originPoint),\n rotatePoint({ x: this.x1, y: this.y2 }, this.angle, originPoint),\n rotatePoint({ x: this.x2, y: this.y2 }, this.angle, originPoint)\n ];\n }\n}\n"]}
@@ -12,6 +12,10 @@ export declare class HashTable<T> {
12
12
  set(key: string, value: T): HashValue<T>;
13
13
  clear(): void;
14
14
  del(key: string): void;
15
+ /**
16
+ * 不包含当前index
17
+ * @param index
18
+ */
15
19
  delFrom(index: number): void;
16
20
  resetIndex(): void;
17
21
  has(key: string): boolean;
@@ -1,5 +1,6 @@
1
1
  export class HashValue {}
2
2
 
3
+ // 基于 array 和 object的 HashTable
3
4
  export class HashTable {
4
5
  constructor() {
5
6
  this.items = {}, this.itemList = [];
@@ -23,7 +24,10 @@ export class HashTable {
23
24
  index > -1 && this.itemList.splice(index, 1), delete this.items[key], this.resetIndex();
24
25
  }
25
26
  }
26
- delFrom(index) {
27
+ /**
28
+ * 不包含当前index
29
+ * @param index
30
+ */ delFrom(index) {
27
31
  for (let i = index + 1; i < this.count(); i++) {
28
32
  const key = this.itemList[i].key;
29
33
  delete this.items[key];
@@ -60,6 +64,7 @@ export class HashTable {
60
64
  getKeyByIndex(index) {
61
65
  return this.itemList[index].key;
62
66
  }
67
+ //遍历 扩展
63
68
  foreach(callback) {
64
69
  for (const key in this.items) {
65
70
  if (!1 === callback(key, this.items[key].value)) return !1;
@@ -76,9 +81,11 @@ export class HashTable {
76
81
  for (const key in this.items) if (this.items[key].value === value) return !0;
77
82
  return !1;
78
83
  }
84
+ //获取index
79
85
  indexOf(key) {
80
86
  return this.has(key) ? this.items[key].index : -1;
81
87
  }
88
+ //插入
82
89
  insertAt(index, value, key) {
83
90
  const hashV = new HashValue;
84
91
  hashV.index = index, hashV.key = key, hashV.value = value, this.itemList.splice(index, 0, hashV),
@@ -100,5 +107,7 @@ export class HashTable {
100
107
  for (const key in this.items) returnArr.push(key);
101
108
  return returnArr;
102
109
  }
103
- toImmutableMap() {}
110
+ toImmutableMap() {
111
+ // do nothing
112
+ }
104
113
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data-structure/hashTable.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,SAAS;CAIrB;AAGD,MAAM,OAAO,SAAS;IAGpB;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IACD,IAAI,IAAI;QACN,OAAO,aAAa,CAAC;IACvB,CAAC;IACD,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,MAAM,EAAE,GAAG,IAAI,SAAS,EAAK,CAAC;QAC9B,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;QACb,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;QACjB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACjC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;SAC/B;QACD,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACrB,CAAC;IACD,GAAG,CAAC,GAAW;QACb,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YACpC,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;gBACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAChC;YACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,UAAU,EAAE,CAAC;SACnB;IACH,CAAC;IAMD,OAAO,CAAC,KAAa;QACnB,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACjC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SACxB;QACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,YAAY,CAAC,CAAC,CAAM,EAAE,CAAe,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,GAAW;QACb,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAW;QACb,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;SAC9B;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC5B,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,KAAK;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAChC,CAAC;IACD,IAAI;QACF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;IACD,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;IACpC,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;IAClC,CAAC;IAGD,OAAO,CAAC,QAAmD;QACzD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,SAAS,KAAK,KAAK,EAAE;gBACvB,OAAO,KAAK,CAAC;aACd;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACO,YAAY,CAAC,QAA8D;QACjF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,IAAI,SAAS,KAAK,KAAK,EAAE;gBACvB,OAAO,KAAK,CAAC;aACd;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,QAAQ,CAAC,KAAU;QACjB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,EAAE;gBACnC,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,GAAQ;QACd,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACjB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;SAC9B;QACD,OAAO,CAAC,CAAC,CAAC;IACZ,CAAC;IAGD,QAAQ,CAAC,KAAa,EAAE,KAAQ,EAAE,GAAW;QAC3C,MAAM,KAAK,GAAG,IAAI,SAAS,EAAK,CAAC;QAEjC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QAChB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,CAAC,QAAuB;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,CAAe,EAAE,EAAE;YAC7D,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAC3D,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,KAAqB;QACxB,KAAK,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,KAAQ,EAAE,EAAE;YACtC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM;QACJ,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE;YAC5B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACrB;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,cAAc;IAEd,CAAC;CACF","file":"hashTable.js","sourcesContent":["import type { LooseFunction } from '../type';\n\nexport class HashValue<T> {\n index: number;\n key: string;\n value: T;\n}\n\n// 基于 array 和 object的 HashTable\nexport class HashTable<T> {\n private items: { [key: string]: HashValue<T> };\n private itemList: Array<HashValue<T>>;\n constructor() {\n this.items = {};\n this.itemList = [];\n }\n get type() {\n return 'xhHashTable';\n }\n set(key: string, value: T): HashValue<T> {\n const vl = new HashValue<T>();\n vl.key = key;\n vl.value = value;\n let index = this.itemList.length;\n if (this.has(key)) {\n index = this.items[key].index;\n }\n vl.index = index;\n this.itemList[index] = vl;\n this.items[key] = vl;\n return vl;\n }\n\n clear() {\n this.items = {};\n this.itemList = [];\n }\n del(key: string): void {\n if (this.has(key)) {\n const index = this.items[key].index;\n if (index > -1) {\n this.itemList.splice(index, 1);\n }\n delete this.items[key];\n this.resetIndex();\n }\n }\n\n /**\n * 不包含当前index\n * @param index\n */\n delFrom(index: number) {\n for (let i = index + 1; i < this.count(); i++) {\n const key = this.itemList[i].key;\n delete this.items[key];\n }\n this.itemList.splice(index + 1, this.count() - index);\n this.resetIndex();\n }\n\n resetIndex(): void {\n this.foreachHashv((k: any, v: HashValue<T>) => {\n const index = this.itemList.indexOf(v);\n this.items[k].index = index;\n });\n }\n\n has(key: string): boolean {\n return key in this.items;\n }\n\n get(key: string): T | null {\n if (this.has(key)) {\n return this.items[key].value;\n }\n return null;\n }\n\n count(): number {\n return this.itemList.length;\n }\n\n all(): Array<T> {\n return this.itemList.map(vl => {\n return vl.value;\n });\n }\n first(): T {\n return this.itemList[0].value;\n }\n last(): T {\n return this.itemList[this.itemList.length - 1].value;\n }\n getByIndex(index: number): T {\n return this.itemList[index].value;\n }\n\n getKeyByIndex(index: number): string {\n return this.itemList[index].key;\n }\n\n //遍历 扩展\n foreach(callback: (key: string, value: T) => boolean | void) {\n for (const key in this.items) {\n const returnVal = callback(key, this.items[key].value);\n if (returnVal === false) {\n return false;\n }\n }\n return true;\n }\n private foreachHashv(callback: (key: string, value: HashValue<T>) => boolean | void) {\n for (const key in this.items) {\n const returnVal = callback(key, this.items[key]);\n if (returnVal === false) {\n return false;\n }\n }\n return true;\n }\n hasValue(value: any): boolean {\n for (const key in this.items) {\n if (this.items[key].value === value) {\n return true;\n }\n }\n return false;\n }\n //获取index\n indexOf(key: any): number {\n if (this.has(key)) {\n return this.items[key].index;\n }\n return -1;\n }\n\n //插入\n insertAt(index: number, value: T, key: string) {\n const hashV = new HashValue<T>();\n\n hashV.index = index;\n hashV.key = key;\n hashV.value = value;\n this.itemList.splice(index, 0, hashV);\n this.items[key] = hashV;\n this.resetIndex();\n }\n\n sort(callback: LooseFunction) {\n return this.itemList.sort((a: HashValue<T>, b: HashValue<T>) => {\n return callback(a.value, b.value);\n });\n }\n toArray(): Array<T> {\n return this.itemList.slice(0, this.itemList.length).map(vl => {\n return vl.value;\n });\n }\n push(lists: HashTable<any>) {\n lists.foreach((key: string, value: T) => {\n this.set(key, value);\n });\n }\n mapKey(): string[] {\n const returnArr: string[] = [];\n for (const key in this.items) {\n returnArr.push(key);\n }\n return returnArr;\n }\n\n toImmutableMap() {\n // do nothing\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/data-structure/hashTable.ts"],"names":[],"mappings":"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","file":"hashTable.js","sourcesContent":["import type { LooseFunction } from '../type';\n\nexport class HashValue<T> {\n index: number;\n key: string;\n value: T;\n}\n\n// 基于 array 和 object的 HashTable\nexport class HashTable<T> {\n private items: { [key: string]: HashValue<T> };\n private itemList: Array<HashValue<T>>;\n constructor() {\n this.items = {};\n this.itemList = [];\n }\n get type() {\n return 'xhHashTable';\n }\n set(key: string, value: T): HashValue<T> {\n const vl = new HashValue<T>();\n vl.key = key;\n vl.value = value;\n let index = this.itemList.length;\n if (this.has(key)) {\n index = this.items[key].index;\n }\n vl.index = index;\n this.itemList[index] = vl;\n this.items[key] = vl;\n return vl;\n }\n\n clear() {\n this.items = {};\n this.itemList = [];\n }\n del(key: string): void {\n if (this.has(key)) {\n const index = this.items[key].index;\n if (index > -1) {\n this.itemList.splice(index, 1);\n }\n delete this.items[key];\n this.resetIndex();\n }\n }\n\n /**\n * 不包含当前index\n * @param index\n */\n delFrom(index: number) {\n for (let i = index + 1; i < this.count(); i++) {\n const key = this.itemList[i].key;\n delete this.items[key];\n }\n this.itemList.splice(index + 1, this.count() - index);\n this.resetIndex();\n }\n\n resetIndex(): void {\n this.foreachHashv((k: any, v: HashValue<T>) => {\n const index = this.itemList.indexOf(v);\n this.items[k].index = index;\n });\n }\n\n has(key: string): boolean {\n return key in this.items;\n }\n\n get(key: string): T | null {\n if (this.has(key)) {\n return this.items[key].value;\n }\n return null;\n }\n\n count(): number {\n return this.itemList.length;\n }\n\n all(): Array<T> {\n return this.itemList.map(vl => {\n return vl.value;\n });\n }\n first(): T {\n return this.itemList[0].value;\n }\n last(): T {\n return this.itemList[this.itemList.length - 1].value;\n }\n getByIndex(index: number): T {\n return this.itemList[index].value;\n }\n\n getKeyByIndex(index: number): string {\n return this.itemList[index].key;\n }\n\n //遍历 扩展\n foreach(callback: (key: string, value: T) => boolean | void) {\n for (const key in this.items) {\n const returnVal = callback(key, this.items[key].value);\n if (returnVal === false) {\n return false;\n }\n }\n return true;\n }\n private foreachHashv(callback: (key: string, value: HashValue<T>) => boolean | void) {\n for (const key in this.items) {\n const returnVal = callback(key, this.items[key]);\n if (returnVal === false) {\n return false;\n }\n }\n return true;\n }\n hasValue(value: any): boolean {\n for (const key in this.items) {\n if (this.items[key].value === value) {\n return true;\n }\n }\n return false;\n }\n //获取index\n indexOf(key: any): number {\n if (this.has(key)) {\n return this.items[key].index;\n }\n return -1;\n }\n\n //插入\n insertAt(index: number, value: T, key: string) {\n const hashV = new HashValue<T>();\n\n hashV.index = index;\n hashV.key = key;\n hashV.value = value;\n this.itemList.splice(index, 0, hashV);\n this.items[key] = hashV;\n this.resetIndex();\n }\n\n sort(callback: LooseFunction) {\n return this.itemList.sort((a: HashValue<T>, b: HashValue<T>) => {\n return callback(a.value, b.value);\n });\n }\n toArray(): Array<T> {\n return this.itemList.slice(0, this.itemList.length).map(vl => {\n return vl.value;\n });\n }\n push(lists: HashTable<any>) {\n lists.foreach((key: string, value: T) => {\n this.set(key, value);\n });\n }\n mapKey(): string[] {\n const returnArr: string[] = [];\n for (const key in this.items) {\n returnArr.push(key);\n }\n return returnArr;\n }\n\n toImmutableMap() {\n // do nothing\n }\n}\n"]}
@@ -1,5 +1,7 @@
1
+ // 基于 array 和 object 的 HashTable
1
2
  export * from "./hashTable";
2
3
 
4
+ // Point
3
5
  export * from "./point";
4
6
 
5
7
  export * from "./bounds";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/data-structure/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAE5B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC","file":"index.js","sourcesContent":["// 基于 array 和 object 的 HashTable\nexport * from './hashTable';\n// Point\nexport * from './point';\nexport * from './bounds';\nexport * from './matrix';\n"]}
1
+ {"version":3,"sources":["../src/data-structure/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,cAAc,aAAa,CAAC;AAC5B,QAAQ;AACR,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC","file":"index.js","sourcesContent":["// 基于 array 和 object 的 HashTable\nexport * from './hashTable';\n// Point\nexport * from './point';\nexport * from './bounds';\nexport * from './matrix';\n"]}
@@ -2,20 +2,56 @@ import type { vec2 } from '../math';
2
2
  import type { IPointLike } from './point';
3
3
  export interface IMatrixLike {
4
4
  a: number;
5
+ /**
6
+ * skew y
7
+ */
5
8
  b: number;
9
+ /**
10
+ * skewx
11
+ */
6
12
  c: number;
13
+ /**
14
+ * scale y
15
+ */
7
16
  d: number;
17
+ /**
18
+ * translate x
19
+ */
8
20
  e: number;
21
+ /**
22
+ * translate y
23
+ */
9
24
  f: number;
10
25
  }
11
26
  export interface IMatrix {
27
+ /**
28
+ * scale x
29
+ */
12
30
  a: number;
31
+ /**
32
+ * skew y
33
+ */
13
34
  b: number;
35
+ /**
36
+ * skewx
37
+ */
14
38
  c: number;
39
+ /**
40
+ * scale y
41
+ */
15
42
  d: number;
43
+ /**
44
+ * translate x
45
+ */
16
46
  e: number;
47
+ /**
48
+ * translate y
49
+ */
17
50
  f: number;
18
51
  setValue: (a: number, b: number, c: number, d: number, e: number, f: number) => IMatrix;
52
+ /**
53
+ * 获取当前矩阵的逆矩阵
54
+ */
19
55
  getInverse: () => IMatrix;
20
56
  rotate: (rad: number) => IMatrix;
21
57
  rotateByCenter: (rad: number, cx: number, cy: number) => IMatrix;
@@ -26,7 +62,16 @@ export interface IMatrix {
26
62
  transpose: () => IMatrix;
27
63
  equalToMatrix: (m2: IMatrixLike) => boolean;
28
64
  equalTo: (a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) => boolean;
65
+ /**
66
+ * 矩阵相乘
67
+ * @param matrix
68
+ */
29
69
  multiply: (a2: number, b2: number, c2: number, d2: number, e2: number, f2: number) => IMatrix;
70
+ /**
71
+ * 插值计算
72
+ * @param m2
73
+ * @param t
74
+ */
30
75
  interpolate: (m2: IMatrix, t: number) => IMatrix;
31
76
  transformPoint: (source: IPointLike, target: IPointLike) => void;
32
77
  reset: () => IMatrix;
@@ -43,17 +88,38 @@ export interface IMatrix {
43
88
  };
44
89
  }
45
90
  export declare class Matrix implements IMatrix {
91
+ /**
92
+ * scale x
93
+ */
46
94
  a: number;
95
+ /**
96
+ * skew y
97
+ */
47
98
  b: number;
99
+ /**
100
+ * skewx
101
+ */
48
102
  c: number;
103
+ /**
104
+ * scale y
105
+ */
49
106
  d: number;
107
+ /**
108
+ * translate x
109
+ */
50
110
  e: number;
111
+ /**
112
+ * translate y
113
+ */
51
114
  f: number;
52
115
  constructor(a?: number, b?: number, c?: number, d?: number, e?: number, f?: number);
53
116
  equalToMatrix(m2: IMatrixLike): boolean;
54
117
  equalTo(a: number, b: number, c: number, d: number, e: number, f: number): boolean;
55
118
  setValue(a: number, b: number, c: number, d: number, e: number, f: number): this;
56
119
  reset(): this;
120
+ /**
121
+ * 获取当前矩阵的逆矩阵
122
+ */
57
123
  getInverse(): Matrix;
58
124
  rotate(rad: number): this;
59
125
  rotateByCenter(rad: number, cx: number, cy: number): this;
@@ -62,8 +128,22 @@ export declare class Matrix implements IMatrix {
62
128
  transform(a: number, b: number, c: number, d: number, e: number, f: number): this;
63
129
  translate(x: number, y: number): this;
64
130
  transpose(): this;
131
+ /**
132
+ * 矩阵相乘
133
+ * @param matrix
134
+ */
65
135
  multiply(a2: number, b2: number, c2: number, d2: number, e2: number, f2: number): this;
136
+ /**
137
+ * 插值计算
138
+ * @param m2
139
+ * @param t
140
+ */
66
141
  interpolate(m2: Matrix, t: number): Matrix;
142
+ /**
143
+ * 将point转到当前矩阵的坐标空间中
144
+ * @param source
145
+ * @param target
146
+ */
67
147
  transformPoint(source: IPointLike, target: IPointLike): void;
68
148
  onlyTranslate(scale?: number): boolean;
69
149
  clone(): Matrix;
@@ -77,4 +157,15 @@ export declare class Matrix implements IMatrix {
77
157
  skewY: number;
78
158
  };
79
159
  }
160
+ /**
161
+ * 对matrix进行通常的变换(基于rotateCenter进行旋转的同时进行translate和scale)
162
+ * @param out
163
+ * @param origin
164
+ * @param x
165
+ * @param y
166
+ * @param scaleX
167
+ * @param scaleY
168
+ * @param angle
169
+ * @param rotateCenter
170
+ */
80
171
  export declare function normalTransform(out: Matrix, origin: Matrix, x: number, y: number, scaleX: number, scaleY: number, angle: number, rotateCenter?: vec2): void;
@@ -7,9 +7,11 @@ export class Matrix {
7
7
  this.a = a, this.b = b, this.c = c, this.d = d, this.e = e, this.f = f;
8
8
  }
9
9
  equalToMatrix(m2) {
10
+ // ef -> ad -> bc
10
11
  return !(this.e !== m2.e || this.f !== m2.f || this.a !== m2.a || this.d !== m2.d || this.b !== m2.b || this.c !== m2.c);
11
12
  }
12
13
  equalTo(a, b, c, d, e, f) {
14
+ // ef -> ad -> bc
13
15
  return !(this.e !== e || this.f !== f || this.a !== a || this.d !== d || this.b !== b || this.c !== c);
14
16
  }
15
17
  setValue(a, b, c, d, e, f) {
@@ -18,7 +20,9 @@ export class Matrix {
18
20
  reset() {
19
21
  return this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.e = 0, this.f = 0, this;
20
22
  }
21
- getInverse() {
23
+ /**
24
+ * 获取当前矩阵的逆矩阵
25
+ */ getInverse() {
22
26
  const a = this.a, b = this.b, c = this.c, d = this.d, e = this.e, f = this.f, m = new Matrix, dt = a * d - b * c;
23
27
  return m.a = d / dt, m.b = -b / dt, m.c = -c / dt, m.d = a / dt, m.e = (c * f - d * e) / dt,
24
28
  m.f = -(a * f - b * e) / dt, m;
@@ -28,6 +32,17 @@ export class Matrix {
28
32
  return this.a = m11, this.b = m12, this.c = m21, this.d = m22, this;
29
33
  }
30
34
  rotateByCenter(rad, cx, cy) {
35
+ /** rotate matrix
36
+ * | cos -sin (1-cos)*cx+sin*cy |
37
+ * | sin cos (1-cos)*cy-sin*cx |
38
+ * | 0 0 1 |
39
+ * after multiply
40
+ * m13 = (1-cos)*cx+sin*cy;
41
+ * m23 = (1-cos)*cy-sin*cx;
42
+ * | cos*a-sin*b cos*c-sin*d cos*e-sin*f+m13 |
43
+ * | sin*a+cos*b sin*c+cos*d sin*e+cos*f+m23 |
44
+ * | 0 0 1 |
45
+ */
31
46
  const cos = Math.cos(rad), sin = Math.sin(rad), rotateM13 = (1 - cos) * cx + sin * cy, rotateM23 = (1 - cos) * cy - sin * cx, m11 = cos * this.a - sin * this.b, m21 = sin * this.a + cos * this.b, m12 = cos * this.c - sin * this.d, m22 = sin * this.c + cos * this.d, m13 = cos * this.e - sin * this.f + rotateM13, m23 = sin * this.e + cos * this.f + rotateM23;
32
47
  return this.a = m11, this.b = m21, this.c = m12, this.d = m22, this.e = m13, this.f = m23,
33
48
  this;
@@ -46,24 +61,45 @@ export class Matrix {
46
61
  return this.e += this.a * x + this.c * y, this.f += this.b * x + this.d * y, this;
47
62
  }
48
63
  transpose() {
64
+ /** transpose matrix
65
+ * | 0 1 0 |
66
+ * | 1 0 0 |
67
+ * | 0 0 1 |
68
+ * after multiply
69
+ * | b d f |
70
+ * | a c e |
71
+ * | 0 0 1 |
72
+ */
49
73
  const {a: a, b: b, c: c, d: d, e: e, f: f} = this;
50
74
  return this.a = b, this.b = a, this.c = d, this.d = c, this.e = f, this.f = e, this;
51
75
  }
52
- multiply(a2, b2, c2, d2, e2, f2) {
76
+ /**
77
+ * 矩阵相乘
78
+ * @param matrix
79
+ */ multiply(a2, b2, c2, d2, e2, f2) {
53
80
  const a1 = this.a, b1 = this.b, c1 = this.c, d1 = this.d, m11 = a1 * a2 + c1 * b2, m12 = b1 * a2 + d1 * b2, m21 = a1 * c2 + c1 * d2, m22 = b1 * c2 + d1 * d2, dx = a1 * e2 + c1 * f2 + this.e, dy = b1 * e2 + d1 * f2 + this.f;
54
81
  return this.a = m11, this.b = m12, this.c = m21, this.d = m22, this.e = dx, this.f = dy,
55
82
  this;
56
83
  }
57
- interpolate(m2, t) {
84
+ /**
85
+ * 插值计算
86
+ * @param m2
87
+ * @param t
88
+ */ interpolate(m2, t) {
58
89
  const m = new Matrix;
59
90
  return m.a = this.a + (m2.a - this.a) * t, m.b = this.b + (m2.b - this.b) * t, m.c = this.c + (m2.c - this.c) * t,
60
91
  m.d = this.d + (m2.d - this.d) * t, m.e = this.e + (m2.e - this.e) * t, m.f = this.f + (m2.f - this.f) * t,
61
92
  m;
62
93
  }
63
- transformPoint(source, target) {
94
+ /**
95
+ * 将point转到当前矩阵的坐标空间中
96
+ * @param source
97
+ * @param target
98
+ */ transformPoint(source, target) {
64
99
  const {a: a, b: b, c: c, d: d, e: e, f: f} = this, dt = a * d - b * c, nextA = d / dt, nextB = -b / dt, nextC = -c / dt, nextD = a / dt, nextE = (c * f - d * e) / dt, nextF = -(a * f - b * e) / dt, {x: x, y: y} = source;
65
100
  target.x = x * nextA + y * nextC + nextE, target.y = x * nextB + y * nextD + nextF;
66
101
  }
102
+ // 只有translate
67
103
  onlyTranslate(scale = 1) {
68
104
  return this.a === scale && 0 === this.b && 0 === this.c && this.d === scale;
69
105
  }
@@ -80,6 +116,7 @@ export class Matrix {
80
116
  skewX: 0,
81
117
  skewY: 0
82
118
  };
119
+ // Apply the QR-like decomposition.
83
120
  if (0 !== a || 0 !== b) {
84
121
  const r = Math.sqrt(a * a + b * b);
85
122
  result.rotateDeg = b > 0 ? Math.acos(a / r) : -Math.acos(a / r), result.scaleX = r,
@@ -93,7 +130,17 @@ export class Matrix {
93
130
  }
94
131
  }
95
132
 
96
- export function normalTransform(out, origin, x, y, scaleX, scaleY, angle, rotateCenter) {
133
+ /**
134
+ * 对matrix进行通常的变换(基于rotateCenter进行旋转的同时进行translate和scale)
135
+ * @param out
136
+ * @param origin
137
+ * @param x
138
+ * @param y
139
+ * @param scaleX
140
+ * @param scaleY
141
+ * @param angle
142
+ * @param rotateCenter
143
+ */ export function normalTransform(out, origin, x, y, scaleX, scaleY, angle, rotateCenter) {
97
144
  const oa = origin.a, ob = origin.b, oc = origin.c, od = origin.d, oe = origin.e, of = origin.f, cosTheta = cos(angle), sinTheta = sin(angle);
98
145
  let rotateCenterX, rotateCenterY;
99
146
  rotateCenter ? (rotateCenterX = rotateCenter[0], rotateCenterY = rotateCenter[1]) : (rotateCenterX = x,