@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
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/data-structure/index.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|