@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.
- package/README.zh-CN.md +12 -0
- package/REGRESSION.md +36 -0
- package/cjs/angle.d.ts +61 -0
- package/cjs/angle.js +73 -7
- package/cjs/angle.js.map +1 -1
- package/cjs/color/Color.d.ts +3 -0
- package/cjs/color/Color.js +64 -10
- package/cjs/color/Color.js.map +1 -1
- package/cjs/color/hexToRgb.d.ts +5 -0
- package/cjs/color/hexToRgb.js +5 -0
- package/cjs/color/hexToRgb.js.map +1 -1
- package/cjs/color/rgbToHsl.js +5 -1
- package/cjs/color/rgbToHsl.js.map +1 -1
- package/cjs/common/array.d.ts +43 -0
- package/cjs/common/array.js +44 -0
- package/cjs/common/array.js.map +1 -1
- package/cjs/common/bisect.d.ts +21 -0
- package/cjs/common/bisect.js +29 -0
- package/cjs/common/bisect.js.map +1 -1
- package/cjs/common/bootstrap.d.ts +5 -0
- package/cjs/common/bootstrap.js +22 -0
- package/cjs/common/bootstrap.js.map +1 -0
- package/cjs/common/clone.js +6 -0
- package/cjs/common/clone.js.map +1 -1
- package/cjs/common/cloneDeep.js +4 -1
- package/cjs/common/cloneDeep.js.map +1 -1
- package/cjs/common/correlation.d.ts +3 -0
- package/cjs/common/correlation.js +83 -0
- package/cjs/common/correlation.js.map +1 -0
- package/cjs/common/debounce.js +22 -4
- package/cjs/common/debounce.js.map +1 -1
- package/cjs/common/deviation.js +1 -2
- package/cjs/common/ecdf.d.ts +8 -0
- package/cjs/common/ecdf.js +11 -2
- package/cjs/common/ecdf.js.map +1 -1
- package/cjs/common/extent.d.ts +4 -0
- package/cjs/common/extent.js +4 -2
- package/cjs/common/extent.js.map +1 -1
- package/cjs/common/field.d.ts +6 -0
- package/cjs/common/field.js +3 -0
- package/cjs/common/field.js.map +1 -1
- package/cjs/common/has.d.ts +17 -0
- package/cjs/common/has.js +18 -1
- package/cjs/common/has.js.map +1 -1
- package/cjs/common/index.d.ts +5 -0
- package/cjs/common/index.js +34 -6
- package/cjs/common/index.js.map +1 -1
- package/cjs/common/interpolate.js +16 -3
- package/cjs/common/interpolate.js.map +1 -1
- package/cjs/common/isBase64.d.ts +6 -0
- package/cjs/common/isBase64.js +6 -0
- package/cjs/common/isBase64.js.map +1 -1
- package/cjs/common/isBoolean.d.ts +13 -0
- package/cjs/common/isBoolean.js +13 -1
- package/cjs/common/isBoolean.js.map +1 -1
- package/cjs/common/isEmpty.js +11 -1
- package/cjs/common/isEmpty.js.map +1 -1
- package/cjs/common/isEqual.js +19 -7
- package/cjs/common/isEqual.js.map +1 -1
- package/cjs/common/isFunction.d.ts +25 -0
- package/cjs/common/isFunction.js +27 -2
- package/cjs/common/isFunction.js.map +1 -1
- package/cjs/common/isNull.js +2 -1
- package/cjs/common/isNumber.d.ts +23 -0
- package/cjs/common/isNumber.js +23 -1
- package/cjs/common/isNumber.js.map +1 -1
- package/cjs/common/isNumeric.d.ts +25 -0
- package/cjs/common/isNumeric.js +25 -0
- package/cjs/common/isNumeric.js.map +1 -1
- package/cjs/common/isObject.d.ts +21 -0
- package/cjs/common/isObject.js +22 -0
- package/cjs/common/isObject.js.map +1 -1
- package/cjs/common/isObjectLike.d.ts +20 -0
- package/cjs/common/isObjectLike.js +21 -0
- package/cjs/common/isObjectLike.js.map +1 -1
- package/cjs/common/isPlainObject.d.ts +25 -0
- package/cjs/common/isPlainObject.js.map +1 -1
- package/cjs/common/isPrototype.js +1 -1
- package/cjs/common/isRegExp.js +1 -1
- package/cjs/common/isShallowEqual.js +1 -0
- package/cjs/common/isShallowEqual.js.map +1 -1
- package/cjs/common/isString.d.ts +13 -0
- package/cjs/common/isString.js +13 -1
- package/cjs/common/isString.js.map +1 -1
- package/cjs/common/isType.d.ts +6 -0
- package/cjs/common/isType.js +6 -0
- package/cjs/common/isType.js.map +1 -1
- package/cjs/common/isValidNumber.js.map +1 -1
- package/cjs/common/isValidUrl.js.map +1 -1
- package/cjs/common/kde.d.ts +28 -0
- package/cjs/common/kde.js +29 -5
- package/cjs/common/kde.js.map +1 -1
- package/cjs/common/mean.d.ts +2 -0
- package/cjs/common/mean.js +25 -0
- package/cjs/common/mean.js.map +1 -0
- package/cjs/common/merge.js +20 -4
- package/cjs/common/merge.js.map +1 -1
- package/cjs/common/mixin.js +14 -3
- package/cjs/common/mixin.js.map +1 -1
- package/cjs/common/normalQuantile.d.ts +5 -0
- package/cjs/common/normalQuantile.js +21 -0
- package/cjs/common/normalQuantile.js.map +1 -0
- package/cjs/common/number.d.ts +24 -0
- package/cjs/common/number.js +24 -1
- package/cjs/common/number.js.map +1 -1
- package/cjs/common/pad.d.ts +21 -0
- package/cjs/common/pad.js +21 -1
- package/cjs/common/pad.js.map +1 -1
- package/cjs/common/random.d.ts +3 -0
- package/cjs/common/random.js +13 -0
- package/cjs/common/random.js.map +1 -1
- package/cjs/common/regression-bootstrap.d.ts +14 -0
- package/cjs/common/regression-bootstrap.js +37 -0
- package/cjs/common/regression-bootstrap.js.map +1 -0
- package/cjs/common/regression-linear.d.ts +5 -0
- package/cjs/common/regression-linear.js +28 -39
- package/cjs/common/regression-linear.js.map +1 -1
- package/cjs/common/regression-logistic.d.ts +6 -0
- package/cjs/common/regression-logistic.js +25 -14
- package/cjs/common/regression-logistic.js.map +1 -1
- package/cjs/common/regression-lowess.d.ts +11 -1
- package/cjs/common/regression-lowess.js +125 -118
- package/cjs/common/regression-lowess.js.map +1 -1
- package/cjs/common/regression-polynomial.d.ts +1 -0
- package/cjs/common/regression-polynomial.js +24 -94
- package/cjs/common/regression-polynomial.js.map +1 -1
- package/cjs/common/regression-solver.d.ts +26 -0
- package/cjs/common/regression-solver.js +180 -0
- package/cjs/common/regression-solver.js.map +1 -0
- package/cjs/common/regression-utils.d.ts +13 -1
- package/cjs/common/regression-utils.js +27 -12
- package/cjs/common/regression-utils.js.map +1 -1
- package/cjs/common/throttle.js +3 -0
- package/cjs/common/throttle.js.map +1 -1
- package/cjs/common/toDate.js +22 -3
- package/cjs/common/toDate.js.map +1 -1
- package/cjs/common/uuid.d.ts +7 -0
- package/cjs/common/uuid.js +15 -1
- package/cjs/common/uuid.js.map +1 -1
- package/cjs/data-structure/bounds.d.ts +101 -0
- package/cjs/data-structure/bounds.js +74 -7
- package/cjs/data-structure/bounds.js.map +1 -1
- package/cjs/data-structure/hashTable.d.ts +4 -0
- package/cjs/data-structure/hashTable.js +11 -2
- package/cjs/data-structure/hashTable.js.map +1 -1
- package/cjs/data-structure/index.js +6 -2
- package/cjs/data-structure/index.js.map +1 -1
- package/cjs/data-structure/matrix.d.ts +91 -0
- package/cjs/data-structure/matrix.js +52 -4
- package/cjs/data-structure/matrix.js.map +1 -1
- package/cjs/data-structure/point.d.ts +3 -0
- package/cjs/data-structure/point.js +5 -1
- package/cjs/data-structure/point.js.map +1 -1
- package/cjs/dom.d.ts +36 -0
- package/cjs/dom.js +43 -1
- package/cjs/dom.js.map +1 -1
- package/cjs/fmin/blas1.js +10 -1
- package/cjs/fmin/blas1.js.map +1 -1
- package/cjs/fmin/conjugate-gradient.js +18 -3
- package/cjs/fmin/conjugate-gradient.js.map +1 -1
- package/cjs/fmin/linesearch.js +15 -1
- package/cjs/fmin/linesearch.js.map +1 -1
- package/cjs/fmin/nelder-mead.d.ts +1 -0
- package/cjs/fmin/nelder-mead.js +30 -10
- package/cjs/fmin/nelder-mead.js.map +1 -1
- package/cjs/format/number/formatDecimal.js +9 -1
- package/cjs/format/number/formatDecimal.js.map +1 -1
- package/cjs/format/number/formatGroup.js +7 -0
- package/cjs/format/number/formatGroup.js.map +1 -1
- package/cjs/format/number/formatPrefixAuto.js +8 -0
- package/cjs/format/number/formatPrefixAuto.js.map +1 -1
- package/cjs/format/number/formatRounded.js +7 -0
- package/cjs/format/number/formatRounded.js.map +1 -1
- package/cjs/format/number/formatTrim.js +7 -0
- package/cjs/format/number/formatTrim.js.map +1 -1
- package/cjs/format/number/number.js +39 -9
- package/cjs/format/number/number.js.map +1 -1
- package/cjs/format/time.js +23 -6
- package/cjs/format/time.js.map +1 -1
- package/cjs/geo/circle-intersection.d.ts +12 -0
- package/cjs/geo/circle-intersection.js +54 -9
- package/cjs/geo/circle-intersection.js.map +1 -1
- package/cjs/geo/constant.js +8 -1
- package/cjs/geo/constant.js.map +1 -1
- package/cjs/geo/invariant.d.ts +22 -0
- package/cjs/geo/invariant.js +24 -1
- package/cjs/geo/invariant.js.map +1 -1
- package/cjs/graphics/algorithm/aabb.js +7 -3
- package/cjs/graphics/algorithm/aabb.js.map +1 -1
- package/cjs/graphics/algorithm/intersect.d.ts +48 -0
- package/cjs/graphics/algorithm/intersect.js +75 -7
- package/cjs/graphics/algorithm/intersect.js.map +1 -1
- package/cjs/graphics/bounds-util.js +4 -2
- package/cjs/graphics/bounds-util.js.map +1 -1
- package/cjs/graphics/graph-util.js +4 -0
- package/cjs/graphics/graph-util.js.map +1 -1
- package/cjs/graphics/index.js +7 -4
- package/cjs/graphics/index.js.map +1 -1
- package/cjs/graphics/polygon.d.ts +12 -0
- package/cjs/graphics/polygon.js +28 -5
- package/cjs/graphics/polygon.js.map +1 -1
- package/cjs/graphics/text/measure/interface.d.ts +12 -0
- package/cjs/graphics/text/measure/textMeasure.d.ts +23 -0
- package/cjs/graphics/text/measure/textMeasure.js +50 -22
- package/cjs/graphics/text/measure/textMeasure.js.map +1 -1
- package/cjs/graphics/text/measure/util.js +1 -0
- package/cjs/graphics/text/measure/util.js.map +1 -1
- package/cjs/graphics/text/stringWidth.js +7 -3
- package/cjs/graphics/text/stringWidth.js.map +1 -1
- package/cjs/index.d.ts +6 -0
- package/cjs/index.js +19 -4
- package/cjs/index.js.map +1 -1
- package/cjs/logger.js +12 -2
- package/cjs/logger.js.map +1 -1
- package/cjs/lru.js +14 -6
- package/cjs/lru.js.map +1 -1
- package/cjs/math.d.ts +9 -0
- package/cjs/math.js +10 -0
- package/cjs/math.js.map +1 -1
- package/cjs/padding.d.ts +5 -0
- package/cjs/padding.js +5 -0
- package/cjs/padding.js.map +1 -1
- package/cjs/time/formatUtils.d.ts +6 -0
- package/cjs/time/formatUtils.js +7 -0
- package/cjs/time/formatUtils.js.map +1 -1
- package/dist/index.js +2035 -411
- package/dist/index.min.js +128 -1
- package/es/angle.d.ts +61 -0
- package/es/angle.js +66 -10
- package/es/angle.js.map +1 -1
- package/es/color/Color.d.ts +3 -0
- package/es/color/Color.js +64 -9
- package/es/color/Color.js.map +1 -1
- package/es/color/hexToRgb.d.ts +5 -0
- package/es/color/hexToRgb.js +5 -0
- package/es/color/hexToRgb.js.map +1 -1
- package/es/color/rgbToHsl.js +5 -1
- package/es/color/rgbToHsl.js.map +1 -1
- package/es/common/array.d.ts +43 -0
- package/es/common/array.js +44 -8
- package/es/common/array.js.map +1 -1
- package/es/common/bisect.d.ts +21 -0
- package/es/common/bisect.js +29 -4
- package/es/common/bisect.js.map +1 -1
- package/es/common/bootstrap.d.ts +5 -0
- package/es/common/bootstrap.js +14 -0
- package/es/common/bootstrap.js.map +1 -0
- package/es/common/clone.js +6 -0
- package/es/common/clone.js.map +1 -1
- package/es/common/cloneDeep.js +4 -1
- package/es/common/cloneDeep.js.map +1 -1
- package/es/common/correlation.d.ts +3 -0
- package/es/common/correlation.js +77 -0
- package/es/common/correlation.js.map +1 -0
- package/es/common/debounce.js +22 -4
- package/es/common/debounce.js.map +1 -1
- package/es/common/deviation.js +1 -2
- package/es/common/ecdf.d.ts +8 -0
- package/es/common/ecdf.js +11 -1
- package/es/common/ecdf.js.map +1 -1
- package/es/common/extent.d.ts +4 -0
- package/es/common/extent.js +8 -3
- package/es/common/extent.js.map +1 -1
- package/es/common/field.d.ts +6 -0
- package/es/common/field.js +3 -1
- package/es/common/field.js.map +1 -1
- package/es/common/has.d.ts +17 -0
- package/es/common/has.js +18 -1
- package/es/common/has.js.map +1 -1
- package/es/common/index.d.ts +5 -0
- package/es/common/index.js +24 -0
- package/es/common/index.js.map +1 -1
- package/es/common/interpolate.js +16 -3
- package/es/common/interpolate.js.map +1 -1
- package/es/common/isBase64.d.ts +6 -0
- package/es/common/isBase64.js +6 -0
- package/es/common/isBase64.js.map +1 -1
- package/es/common/isBoolean.d.ts +13 -0
- package/es/common/isBoolean.js +13 -1
- package/es/common/isBoolean.js.map +1 -1
- package/es/common/isEmpty.js +11 -1
- package/es/common/isEmpty.js.map +1 -1
- package/es/common/isEqual.js +19 -7
- package/es/common/isEqual.js.map +1 -1
- package/es/common/isFunction.d.ts +25 -0
- package/es/common/isFunction.js +27 -2
- package/es/common/isFunction.js.map +1 -1
- package/es/common/isNull.js +2 -1
- package/es/common/isNumber.d.ts +23 -0
- package/es/common/isNumber.js +23 -1
- package/es/common/isNumber.js.map +1 -1
- package/es/common/isNumeric.d.ts +25 -0
- package/es/common/isNumeric.js +25 -0
- package/es/common/isNumeric.js.map +1 -1
- package/es/common/isObject.d.ts +21 -0
- package/es/common/isObject.js +22 -0
- package/es/common/isObject.js.map +1 -1
- package/es/common/isObjectLike.d.ts +20 -0
- package/es/common/isObjectLike.js +21 -0
- package/es/common/isObjectLike.js.map +1 -1
- package/es/common/isPlainObject.d.ts +25 -0
- package/es/common/isPlainObject.js +26 -0
- package/es/common/isPlainObject.js.map +1 -1
- package/es/common/isPrototype.js +1 -1
- package/es/common/isRegExp.js +1 -1
- package/es/common/isShallowEqual.js +1 -0
- package/es/common/isShallowEqual.js.map +1 -1
- package/es/common/isString.d.ts +13 -0
- package/es/common/isString.js +13 -1
- package/es/common/isString.js.map +1 -1
- package/es/common/isType.d.ts +6 -0
- package/es/common/isType.js +6 -0
- package/es/common/isType.js.map +1 -1
- package/es/common/isValidNumber.js.map +1 -1
- package/es/common/isValidUrl.js.map +1 -1
- package/es/common/kde.d.ts +28 -0
- package/es/common/kde.js +29 -7
- package/es/common/kde.js.map +1 -1
- package/es/common/mean.d.ts +2 -0
- package/es/common/mean.js +19 -0
- package/es/common/mean.js.map +1 -0
- package/es/common/merge.js +22 -5
- package/es/common/merge.js.map +1 -1
- package/es/common/mixin.js +14 -3
- package/es/common/mixin.js.map +1 -1
- package/es/common/normalQuantile.d.ts +5 -0
- package/es/common/normalQuantile.js +15 -0
- package/es/common/normalQuantile.js.map +1 -0
- package/es/common/number.d.ts +24 -0
- package/es/common/number.js +24 -2
- package/es/common/number.js.map +1 -1
- package/es/common/pad.d.ts +21 -0
- package/es/common/pad.js +21 -1
- package/es/common/pad.js.map +1 -1
- package/es/common/random.d.ts +3 -0
- package/es/common/random.js +13 -1
- package/es/common/random.js.map +1 -1
- package/es/common/regression-bootstrap.d.ts +14 -0
- package/es/common/regression-bootstrap.js +31 -0
- package/es/common/regression-bootstrap.js.map +1 -0
- package/es/common/regression-linear.d.ts +5 -0
- package/es/common/regression-linear.js +25 -39
- package/es/common/regression-linear.js.map +1 -1
- package/es/common/regression-logistic.d.ts +6 -0
- package/es/common/regression-logistic.js +24 -16
- package/es/common/regression-logistic.js.map +1 -1
- package/es/common/regression-lowess.d.ts +11 -1
- package/es/common/regression-lowess.js +120 -118
- package/es/common/regression-lowess.js.map +1 -1
- package/es/common/regression-polynomial.d.ts +1 -0
- package/es/common/regression-polynomial.js +21 -89
- package/es/common/regression-polynomial.js.map +1 -1
- package/es/common/regression-solver.d.ts +26 -0
- package/es/common/regression-solver.js +168 -0
- package/es/common/regression-solver.js.map +1 -0
- package/es/common/regression-utils.d.ts +13 -1
- package/es/common/regression-utils.js +18 -9
- package/es/common/regression-utils.js.map +1 -1
- package/es/common/throttle.js +3 -0
- package/es/common/throttle.js.map +1 -1
- package/es/common/toDate.js +23 -3
- package/es/common/toDate.js.map +1 -1
- package/es/common/uuid.d.ts +7 -0
- package/es/common/uuid.js +15 -1
- package/es/common/uuid.js.map +1 -1
- package/es/data-structure/bounds.d.ts +101 -0
- package/es/data-structure/bounds.js +74 -8
- package/es/data-structure/bounds.js.map +1 -1
- package/es/data-structure/hashTable.d.ts +4 -0
- package/es/data-structure/hashTable.js +11 -2
- package/es/data-structure/hashTable.js.map +1 -1
- package/es/data-structure/index.js +2 -0
- package/es/data-structure/index.js.map +1 -1
- package/es/data-structure/matrix.d.ts +91 -0
- package/es/data-structure/matrix.js +52 -5
- package/es/data-structure/matrix.js.map +1 -1
- package/es/data-structure/point.d.ts +3 -0
- package/es/data-structure/point.js +5 -1
- package/es/data-structure/point.js.map +1 -1
- package/es/dom.d.ts +36 -0
- package/es/dom.js +43 -8
- package/es/dom.js.map +1 -1
- package/es/fmin/blas1.js +10 -0
- package/es/fmin/blas1.js.map +1 -1
- package/es/fmin/conjugate-gradient.js +18 -2
- package/es/fmin/conjugate-gradient.js.map +1 -1
- package/es/fmin/linesearch.js +15 -0
- package/es/fmin/linesearch.js.map +1 -1
- package/es/fmin/nelder-mead.d.ts +1 -0
- package/es/fmin/nelder-mead.js +29 -9
- package/es/fmin/nelder-mead.js.map +1 -1
- package/es/format/number/formatDecimal.js +9 -1
- package/es/format/number/formatDecimal.js.map +1 -1
- package/es/format/number/formatGroup.js +7 -0
- package/es/format/number/formatGroup.js.map +1 -1
- package/es/format/number/formatPrefixAuto.js +8 -0
- package/es/format/number/formatPrefixAuto.js.map +1 -1
- package/es/format/number/formatRounded.js +7 -0
- package/es/format/number/formatRounded.js.map +1 -1
- package/es/format/number/formatTrim.js +7 -0
- package/es/format/number/formatTrim.js.map +1 -1
- package/es/format/number/number.js +40 -8
- package/es/format/number/number.js.map +1 -1
- package/es/format/time.js +23 -5
- package/es/format/time.js.map +1 -1
- package/es/geo/circle-intersection.d.ts +12 -0
- package/es/geo/circle-intersection.js +54 -14
- package/es/geo/circle-intersection.js.map +1 -1
- package/es/geo/constant.js +8 -0
- package/es/geo/constant.js.map +1 -1
- package/es/geo/invariant.d.ts +22 -0
- package/es/geo/invariant.js +24 -0
- package/es/geo/invariant.js.map +1 -1
- package/es/graphics/algorithm/aabb.js +7 -3
- package/es/graphics/algorithm/aabb.js.map +1 -1
- package/es/graphics/algorithm/intersect.d.ts +48 -0
- package/es/graphics/algorithm/intersect.js +75 -12
- package/es/graphics/algorithm/intersect.js.map +1 -1
- package/es/graphics/bounds-util.js +4 -2
- package/es/graphics/bounds-util.js.map +1 -1
- package/es/graphics/graph-util.js +4 -0
- package/es/graphics/graph-util.js.map +1 -1
- package/es/graphics/index.js +2 -0
- package/es/graphics/index.js.map +1 -1
- package/es/graphics/polygon.d.ts +12 -0
- package/es/graphics/polygon.js +28 -6
- package/es/graphics/polygon.js.map +1 -1
- package/es/graphics/text/measure/interface.d.ts +12 -0
- package/es/graphics/text/measure/textMeasure.d.ts +23 -0
- package/es/graphics/text/measure/textMeasure.js +46 -21
- package/es/graphics/text/measure/textMeasure.js.map +1 -1
- package/es/graphics/text/measure/util.js +1 -0
- package/es/graphics/text/measure/util.js.map +1 -1
- package/es/graphics/text/stringWidth.js +7 -3
- package/es/graphics/text/stringWidth.js.map +1 -1
- package/es/index.d.ts +6 -0
- package/es/index.js +15 -1
- package/es/index.js.map +1 -1
- package/es/logger.js +12 -1
- package/es/logger.js.map +1 -1
- package/es/lru.js +14 -6
- package/es/lru.js.map +1 -1
- package/es/math.d.ts +9 -0
- package/es/math.js +10 -1
- package/es/math.js.map +1 -1
- package/es/padding.d.ts +5 -0
- package/es/padding.js +5 -1
- package/es/padding.js.map +1 -1
- package/es/time/formatUtils.d.ts +6 -0
- package/es/time/formatUtils.js +7 -1
- package/es/time/formatUtils.js.map +1 -1
- package/package.json +4 -3
package/cjs/format/time.js.map
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
24
|
+
// filter out points that aren't included in all the circles
|
|
25
|
+
let arcArea = 0, polygonArea = 0;
|
|
14
26
|
const arcs = [];
|
|
15
|
-
if
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"]}
|
package/cjs/geo/constant.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
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
|
package/cjs/geo/constant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/geo/constant.ts"],"names":[],"mappings":";;;
|
|
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"]}
|
package/cjs/geo/invariant.d.ts
CHANGED
|
@@ -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;
|
package/cjs/geo/invariant.js
CHANGED
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
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));
|
package/cjs/geo/invariant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/geo/invariant.ts"],"names":[],"mappings":";;;
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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":";;;AAEA,2CAA0C;AAE1C,IAAI,EAAU,CAAC;AACf,IAAI,EAAU,CAAC;AACf,IAAI,EAAU,CAAC;AACf,IAAI,EAAU,CAAC;AACf,SAAgB,iBAAiB,CAAC,MAAe;IAC/C,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;
|
|
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"]}
|