@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/es/angle.d.ts
CHANGED
|
@@ -1,21 +1,82 @@
|
|
|
1
1
|
import type { IPointLike } from './data-structure/point';
|
|
2
|
+
/**
|
|
3
|
+
* degree -> radian
|
|
4
|
+
* @param degree
|
|
5
|
+
* @returns radian
|
|
6
|
+
*/
|
|
2
7
|
export declare function degreeToRadian(degree: number): number;
|
|
8
|
+
/**
|
|
9
|
+
* radian -> degree
|
|
10
|
+
* @param radian
|
|
11
|
+
* @returns
|
|
12
|
+
*/
|
|
3
13
|
export declare function radianToDegree(radian: number): number;
|
|
14
|
+
/**
|
|
15
|
+
* 对弧度进行格式化
|
|
16
|
+
* @param a 传入的弧度
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
4
19
|
export declare const clampRadian: (angle?: number) => number;
|
|
5
20
|
export declare const clampAngleByRadian: (angle?: number) => number;
|
|
21
|
+
/**
|
|
22
|
+
* 对角度进行格式化
|
|
23
|
+
* @param a 角度
|
|
24
|
+
* @returns
|
|
25
|
+
*/
|
|
6
26
|
export declare const clampDegree: (a?: number) => number;
|
|
7
27
|
export declare const clampAngleByDegree: (a?: number) => number;
|
|
28
|
+
/**
|
|
29
|
+
* 根据弧度及半径计算极坐标系下的坐标点
|
|
30
|
+
* @param centerX 圆心坐标
|
|
31
|
+
* @param radius 半径
|
|
32
|
+
* @param angleInRadian 弧度
|
|
33
|
+
* @returns 返回笛卡尔坐标点
|
|
34
|
+
*/
|
|
8
35
|
export declare function polarToCartesian(center: IPointLike, radius: number, angleInRadian: number): {
|
|
9
36
|
x: number;
|
|
10
37
|
y: number;
|
|
11
38
|
};
|
|
39
|
+
/**
|
|
40
|
+
* 根据笛卡尔坐标系坐标计算极坐标坐标点
|
|
41
|
+
* @param point
|
|
42
|
+
* @param center 极坐标系中心点坐标
|
|
43
|
+
* @param startAngle 极坐标系起始角度
|
|
44
|
+
* @param endAngle 极坐标系结束角度
|
|
45
|
+
* @returns 极坐标系坐标点
|
|
46
|
+
*/
|
|
12
47
|
export declare function cartesianToPolar(point: IPointLike, center?: IPointLike, startAngle?: number, endAngle?: number): {
|
|
13
48
|
radius: number;
|
|
14
49
|
angle: number;
|
|
15
50
|
};
|
|
51
|
+
/**
|
|
52
|
+
* 根据点的笛卡尔坐标获取该点与圆心的连线同正 x 轴方向的夹角
|
|
53
|
+
* @param center 圆心坐标
|
|
54
|
+
* @param point 待求的点坐标
|
|
55
|
+
* @returns 返回夹角对应的弧度值
|
|
56
|
+
*/
|
|
16
57
|
export declare function getAngleByPoint(center: IPointLike, point: IPointLike): number;
|
|
58
|
+
/**
|
|
59
|
+
* 角度标准化处理
|
|
60
|
+
* @param angle 弧度角
|
|
61
|
+
*/
|
|
17
62
|
export declare function normalizeAngle(angle: number): number;
|
|
63
|
+
/**
|
|
64
|
+
* 指定开始角度和结束角度,计算这个范围内的边界角度,
|
|
65
|
+
* 即起始角度以及经过的东、南、西、北四个方向的角度
|
|
66
|
+
* 计算这个角度,可以用于计算一个弧度的bounding box 等
|
|
67
|
+
* @param startAngle 起始角度的弧度值
|
|
68
|
+
* @param endAngle 结束角度的弧度值
|
|
69
|
+
* @returns 边界角度数组
|
|
70
|
+
*/
|
|
18
71
|
export declare function findBoundaryAngles(startAngle: number, endAngle: number): number[];
|
|
72
|
+
/**
|
|
73
|
+
* 计算指定范围内,指定中心的情况下,不超出边界的最大可用半径
|
|
74
|
+
* @param rect 矩形的大小
|
|
75
|
+
* @param center 中心点
|
|
76
|
+
* @param startAngle 起始角度的弧度值
|
|
77
|
+
* @param endAngle 结束角度的弧度值
|
|
78
|
+
* @returns 最大半径
|
|
79
|
+
*/
|
|
19
80
|
export declare function calculateMaxRadius(rect: {
|
|
20
81
|
width: number;
|
|
21
82
|
height: number;
|
package/es/angle.js
CHANGED
|
@@ -1,25 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 处理角度相关的数据计算
|
|
3
|
+
*/
|
|
1
4
|
import { tau } from "./math";
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
/**
|
|
7
|
+
* degree -> radian
|
|
8
|
+
* @param degree
|
|
9
|
+
* @returns radian
|
|
10
|
+
*/ export function degreeToRadian(degree) {
|
|
4
11
|
return degree * (Math.PI / 180);
|
|
5
12
|
}
|
|
6
13
|
|
|
7
|
-
|
|
14
|
+
/**
|
|
15
|
+
* radian -> degree
|
|
16
|
+
* @param radian
|
|
17
|
+
* @returns
|
|
18
|
+
*/ export function radianToDegree(radian) {
|
|
8
19
|
return 180 * radian / Math.PI;
|
|
9
20
|
}
|
|
10
21
|
|
|
11
|
-
|
|
22
|
+
/**
|
|
23
|
+
* 对弧度进行格式化
|
|
24
|
+
* @param a 传入的弧度
|
|
25
|
+
* @returns
|
|
26
|
+
*/ export const clampRadian = (angle = 0) => {
|
|
12
27
|
if (angle < 0) for (;angle < -tau; ) angle += tau; else if (angle > 0) for (;angle > tau; ) angle -= tau;
|
|
13
28
|
return angle;
|
|
14
29
|
};
|
|
15
30
|
|
|
31
|
+
// alias of clampRadian
|
|
16
32
|
export const clampAngleByRadian = clampRadian;
|
|
17
33
|
|
|
18
|
-
|
|
34
|
+
/**
|
|
35
|
+
* 对角度进行格式化
|
|
36
|
+
* @param a 角度
|
|
37
|
+
* @returns
|
|
38
|
+
*/ export const clampDegree = (a = 0) => a > 360 || a < -360 ? a % 360 : a;
|
|
19
39
|
|
|
40
|
+
// alias of clampDegree
|
|
20
41
|
export const clampAngleByDegree = clampDegree;
|
|
21
42
|
|
|
22
|
-
|
|
43
|
+
/**
|
|
44
|
+
* 根据弧度及半径计算极坐标系下的坐标点
|
|
45
|
+
* @param centerX 圆心坐标
|
|
46
|
+
* @param radius 半径
|
|
47
|
+
* @param angleInRadian 弧度
|
|
48
|
+
* @returns 返回笛卡尔坐标点
|
|
49
|
+
*/ export function polarToCartesian(center, radius, angleInRadian) {
|
|
23
50
|
return radius ? {
|
|
24
51
|
x: center.x + radius * Math.cos(angleInRadian),
|
|
25
52
|
y: center.y + radius * Math.sin(angleInRadian)
|
|
@@ -29,7 +56,14 @@ export function polarToCartesian(center, radius, angleInRadian) {
|
|
|
29
56
|
};
|
|
30
57
|
}
|
|
31
58
|
|
|
32
|
-
|
|
59
|
+
/**
|
|
60
|
+
* 根据笛卡尔坐标系坐标计算极坐标坐标点
|
|
61
|
+
* @param point
|
|
62
|
+
* @param center 极坐标系中心点坐标
|
|
63
|
+
* @param startAngle 极坐标系起始角度
|
|
64
|
+
* @param endAngle 极坐标系结束角度
|
|
65
|
+
* @returns 极坐标系坐标点
|
|
66
|
+
*/ export function cartesianToPolar(point, center = {
|
|
33
67
|
x: 0,
|
|
34
68
|
y: 0
|
|
35
69
|
}, startAngle = 0, endAngle = 2 * Math.PI) {
|
|
@@ -50,17 +84,32 @@ export function cartesianToPolar(point, center = {
|
|
|
50
84
|
};
|
|
51
85
|
}
|
|
52
86
|
|
|
53
|
-
|
|
87
|
+
/**
|
|
88
|
+
* 根据点的笛卡尔坐标获取该点与圆心的连线同正 x 轴方向的夹角
|
|
89
|
+
* @param center 圆心坐标
|
|
90
|
+
* @param point 待求的点坐标
|
|
91
|
+
* @returns 返回夹角对应的弧度值
|
|
92
|
+
*/ export function getAngleByPoint(center, point) {
|
|
54
93
|
return Math.atan2(point.y - center.y, point.x - center.x);
|
|
55
94
|
}
|
|
56
95
|
|
|
57
|
-
|
|
96
|
+
/**
|
|
97
|
+
* 角度标准化处理
|
|
98
|
+
* @param angle 弧度角
|
|
99
|
+
*/ export function normalizeAngle(angle) {
|
|
58
100
|
for (;angle < 0; ) angle += 2 * Math.PI;
|
|
59
101
|
for (;angle >= 2 * Math.PI; ) angle -= 2 * Math.PI;
|
|
60
102
|
return angle;
|
|
61
103
|
}
|
|
62
104
|
|
|
63
|
-
|
|
105
|
+
/**
|
|
106
|
+
* 指定开始角度和结束角度,计算这个范围内的边界角度,
|
|
107
|
+
* 即起始角度以及经过的东、南、西、北四个方向的角度
|
|
108
|
+
* 计算这个角度,可以用于计算一个弧度的bounding box 等
|
|
109
|
+
* @param startAngle 起始角度的弧度值
|
|
110
|
+
* @param endAngle 结束角度的弧度值
|
|
111
|
+
* @returns 边界角度数组
|
|
112
|
+
*/ export function findBoundaryAngles(startAngle, endAngle) {
|
|
64
113
|
const deltaAngle = Math.abs(endAngle - startAngle);
|
|
65
114
|
if (deltaAngle >= 2 * Math.PI || 2 * Math.PI - deltaAngle < 1e-6) return [ 0, Math.PI / 2, Math.PI, 1.5 * Math.PI ];
|
|
66
115
|
const normalMin = normalizeAngle(Math.min(startAngle, endAngle)), normalMax = normalMin + deltaAngle, steps = [ normalMin, normalMax ];
|
|
@@ -70,7 +119,14 @@ export function findBoundaryAngles(startAngle, endAngle) {
|
|
|
70
119
|
return steps;
|
|
71
120
|
}
|
|
72
121
|
|
|
73
|
-
|
|
122
|
+
/**
|
|
123
|
+
* 计算指定范围内,指定中心的情况下,不超出边界的最大可用半径
|
|
124
|
+
* @param rect 矩形的大小
|
|
125
|
+
* @param center 中心点
|
|
126
|
+
* @param startAngle 起始角度的弧度值
|
|
127
|
+
* @param endAngle 结束角度的弧度值
|
|
128
|
+
* @returns 最大半径
|
|
129
|
+
*/ export function calculateMaxRadius(rect, center, startAngle, endAngle) {
|
|
74
130
|
const {x: x, y: y} = center, steps = findBoundaryAngles(startAngle, endAngle), {width: width, height: height} = rect, radiusList = [];
|
|
75
131
|
return steps.forEach((step => {
|
|
76
132
|
const sin = Math.sin(step), cos = Math.cos(step);
|
package/es/angle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/angle.ts"],"names":[],"mappings":"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","file":"angle.js","sourcesContent":["import type { IPointLike } from './data-structure/point';\n/**\n * 处理角度相关的数据计算\n */\n\nimport { tau } from './math';\n\n/**\n * degree -> radian\n * @param degree\n * @returns radian\n */\nexport function degreeToRadian(degree: number) {\n return degree * (Math.PI / 180);\n}\n\n/**\n * radian -> degree\n * @param radian\n * @returns\n */\nexport function radianToDegree(radian: number) {\n return (radian * 180) / Math.PI;\n}\n\n/**\n * 对弧度进行格式化\n * @param a 传入的弧度\n * @returns\n */\nexport const clampRadian = (angle: number = 0) => {\n if (angle < 0) {\n while (angle < -tau) {\n angle += tau;\n }\n } else if (angle > 0) {\n while (angle > tau) {\n angle -= tau;\n }\n }\n\n return angle;\n};\n\n// alias of clampRadian\nexport const clampAngleByRadian = clampRadian;\n\n/**\n * 对角度进行格式化\n * @param a 角度\n * @returns\n */\nexport const clampDegree = (a: number = 0) => {\n if (a > 360 || a < -360) {\n return a % 360;\n }\n\n return a;\n};\n\n// alias of clampDegree\nexport const clampAngleByDegree = clampDegree;\n\n/**\n * 根据弧度及半径计算极坐标系下的坐标点\n * @param centerX 圆心坐标\n * @param radius 半径\n * @param angleInRadian 弧度\n * @returns 返回笛卡尔坐标点\n */\nexport function polarToCartesian(center: IPointLike, radius: number, angleInRadian: number): { x: number; y: number } {\n if (!radius) {\n return { x: center.x, y: center.y };\n }\n\n return {\n x: center.x + radius * Math.cos(angleInRadian),\n y: center.y + radius * Math.sin(angleInRadian)\n };\n}\n\n/**\n * 根据笛卡尔坐标系坐标计算极坐标坐标点\n * @param point\n * @param center 极坐标系中心点坐标\n * @param startAngle 极坐标系起始角度\n * @param endAngle 极坐标系结束角度\n * @returns 极坐标系坐标点\n */\nexport function cartesianToPolar(\n point: IPointLike,\n center: IPointLike = { x: 0, y: 0 },\n startAngle = 0,\n endAngle = 2 * Math.PI\n) {\n const { x, y } = point;\n const { x: centerX, y: centerY } = center;\n\n let dx = x - centerX;\n let dy = y - centerY;\n const radius = Math.sqrt(dx * dx + dy * dy);\n\n if (radius === 0) {\n return {\n radius: 0,\n angle: 0\n };\n }\n\n dx /= radius;\n dy /= radius;\n\n let radian = Math.atan2(dy, dx);\n if (radian < startAngle) {\n while (radian <= startAngle) {\n radian += Math.PI * 2;\n }\n }\n if (radian > endAngle) {\n while (radian >= endAngle) {\n radian -= Math.PI * 2;\n }\n }\n return {\n radius,\n angle: radian\n };\n}\n\n/**\n * 根据点的笛卡尔坐标获取该点与圆心的连线同正 x 轴方向的夹角\n * @param center 圆心坐标\n * @param point 待求的点坐标\n * @returns 返回夹角对应的弧度值\n */\nexport function getAngleByPoint(center: IPointLike, point: IPointLike): number {\n return Math.atan2(point.y - center.y, point.x - center.x);\n}\n\n/**\n * 角度标准化处理\n * @param angle 弧度角\n */\nexport function normalizeAngle(angle: number): number {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n}\n\n/**\n * 指定开始角度和结束角度,计算这个范围内的边界角度,\n * 即起始角度以及经过的东、南、西、北四个方向的角度\n * 计算这个角度,可以用于计算一个弧度的bounding box 等\n * @param startAngle 起始角度的弧度值\n * @param endAngle 结束角度的弧度值\n * @returns 边界角度数组\n */\nexport function findBoundaryAngles(startAngle: number, endAngle: number) {\n const deltaAngle = Math.abs(endAngle - startAngle);\n\n if (deltaAngle >= 2 * Math.PI || 2 * Math.PI - deltaAngle < 1e-6) {\n return [0, Math.PI / 2, Math.PI, 1.5 * Math.PI];\n }\n const min = Math.min(startAngle, endAngle);\n const normalMin = normalizeAngle(min);\n const normalMax = normalMin + deltaAngle;\n const steps = [normalMin, normalMax];\n let directionAngle = (Math.floor(normalMin / Math.PI) * Math.PI) / 2;\n\n while (directionAngle < normalMax) {\n if (directionAngle > normalMin) {\n steps.push(directionAngle);\n }\n directionAngle += Math.PI / 2;\n }\n\n return steps;\n}\n/**\n * 计算指定范围内,指定中心的情况下,不超出边界的最大可用半径\n * @param rect 矩形的大小\n * @param center 中心点\n * @param startAngle 起始角度的弧度值\n * @param endAngle 结束角度的弧度值\n * @returns 最大半径\n */\nexport function calculateMaxRadius(\n rect: { width: number; height: number },\n center: { x: number; y: number },\n startAngle: number,\n endAngle: number\n) {\n const { x, y } = center;\n const steps = findBoundaryAngles(startAngle, endAngle);\n const { width, height } = rect;\n\n const radiusList: number[] = [];\n\n steps.forEach(step => {\n const sin = Math.sin(step);\n const cos = Math.cos(step);\n\n if (sin === 1) {\n radiusList.push(height - y);\n } else if (sin === -1) {\n radiusList.push(y);\n } else if (cos === 1) {\n radiusList.push(width - x);\n } else if (cos === -1) {\n radiusList.push(x);\n } else {\n if (sin > 0) {\n radiusList.push(Math.abs((height - y) / sin));\n } else {\n radiusList.push(Math.abs(y / sin));\n }\n\n if (cos > 0) {\n radiusList.push(Math.abs((width - x) / cos));\n } else {\n radiusList.push(Math.abs(x / cos));\n }\n }\n });\n\n return Math.min.apply(null, radiusList);\n}\n\nexport type Quadrant = 1 | 2 | 3 | 4;\n\nexport function computeQuadrant(angle: number): Quadrant {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/angle.ts"],"names":[],"mappings":"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","file":"angle.js","sourcesContent":["import type { IPointLike } from './data-structure/point';\n/**\n * 处理角度相关的数据计算\n */\n\nimport { tau } from './math';\n\n/**\n * degree -> radian\n * @param degree\n * @returns radian\n */\nexport function degreeToRadian(degree: number) {\n return degree * (Math.PI / 180);\n}\n\n/**\n * radian -> degree\n * @param radian\n * @returns\n */\nexport function radianToDegree(radian: number) {\n return (radian * 180) / Math.PI;\n}\n\n/**\n * 对弧度进行格式化\n * @param a 传入的弧度\n * @returns\n */\nexport const clampRadian = (angle: number = 0) => {\n if (angle < 0) {\n while (angle < -tau) {\n angle += tau;\n }\n } else if (angle > 0) {\n while (angle > tau) {\n angle -= tau;\n }\n }\n\n return angle;\n};\n\n// alias of clampRadian\nexport const clampAngleByRadian = clampRadian;\n\n/**\n * 对角度进行格式化\n * @param a 角度\n * @returns\n */\nexport const clampDegree = (a: number = 0) => {\n if (a > 360 || a < -360) {\n return a % 360;\n }\n\n return a;\n};\n\n// alias of clampDegree\nexport const clampAngleByDegree = clampDegree;\n\n/**\n * 根据弧度及半径计算极坐标系下的坐标点\n * @param centerX 圆心坐标\n * @param radius 半径\n * @param angleInRadian 弧度\n * @returns 返回笛卡尔坐标点\n */\nexport function polarToCartesian(center: IPointLike, radius: number, angleInRadian: number): { x: number; y: number } {\n if (!radius) {\n return { x: center.x, y: center.y };\n }\n\n return {\n x: center.x + radius * Math.cos(angleInRadian),\n y: center.y + radius * Math.sin(angleInRadian)\n };\n}\n\n/**\n * 根据笛卡尔坐标系坐标计算极坐标坐标点\n * @param point\n * @param center 极坐标系中心点坐标\n * @param startAngle 极坐标系起始角度\n * @param endAngle 极坐标系结束角度\n * @returns 极坐标系坐标点\n */\nexport function cartesianToPolar(\n point: IPointLike,\n center: IPointLike = { x: 0, y: 0 },\n startAngle = 0,\n endAngle = 2 * Math.PI\n) {\n const { x, y } = point;\n const { x: centerX, y: centerY } = center;\n\n let dx = x - centerX;\n let dy = y - centerY;\n const radius = Math.sqrt(dx * dx + dy * dy);\n\n if (radius === 0) {\n return {\n radius: 0,\n angle: 0\n };\n }\n\n dx /= radius;\n dy /= radius;\n\n let radian = Math.atan2(dy, dx);\n if (radian < startAngle) {\n while (radian <= startAngle) {\n radian += Math.PI * 2;\n }\n }\n if (radian > endAngle) {\n while (radian >= endAngle) {\n radian -= Math.PI * 2;\n }\n }\n return {\n radius,\n angle: radian\n };\n}\n\n/**\n * 根据点的笛卡尔坐标获取该点与圆心的连线同正 x 轴方向的夹角\n * @param center 圆心坐标\n * @param point 待求的点坐标\n * @returns 返回夹角对应的弧度值\n */\nexport function getAngleByPoint(center: IPointLike, point: IPointLike): number {\n return Math.atan2(point.y - center.y, point.x - center.x);\n}\n\n/**\n * 角度标准化处理\n * @param angle 弧度角\n */\nexport function normalizeAngle(angle: number): number {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n while (angle >= Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n}\n\n/**\n * 指定开始角度和结束角度,计算这个范围内的边界角度,\n * 即起始角度以及经过的东、南、西、北四个方向的角度\n * 计算这个角度,可以用于计算一个弧度的bounding box 等\n * @param startAngle 起始角度的弧度值\n * @param endAngle 结束角度的弧度值\n * @returns 边界角度数组\n */\nexport function findBoundaryAngles(startAngle: number, endAngle: number) {\n const deltaAngle = Math.abs(endAngle - startAngle);\n\n if (deltaAngle >= 2 * Math.PI || 2 * Math.PI - deltaAngle < 1e-6) {\n return [0, Math.PI / 2, Math.PI, 1.5 * Math.PI];\n }\n const min = Math.min(startAngle, endAngle);\n const normalMin = normalizeAngle(min);\n const normalMax = normalMin + deltaAngle;\n const steps = [normalMin, normalMax];\n let directionAngle = (Math.floor(normalMin / Math.PI) * Math.PI) / 2;\n\n while (directionAngle < normalMax) {\n if (directionAngle > normalMin) {\n steps.push(directionAngle);\n }\n directionAngle += Math.PI / 2;\n }\n\n return steps;\n}\n/**\n * 计算指定范围内,指定中心的情况下,不超出边界的最大可用半径\n * @param rect 矩形的大小\n * @param center 中心点\n * @param startAngle 起始角度的弧度值\n * @param endAngle 结束角度的弧度值\n * @returns 最大半径\n */\nexport function calculateMaxRadius(\n rect: { width: number; height: number },\n center: { x: number; y: number },\n startAngle: number,\n endAngle: number\n) {\n const { x, y } = center;\n const steps = findBoundaryAngles(startAngle, endAngle);\n const { width, height } = rect;\n\n const radiusList: number[] = [];\n\n steps.forEach(step => {\n const sin = Math.sin(step);\n const cos = Math.cos(step);\n\n if (sin === 1) {\n radiusList.push(height - y);\n } else if (sin === -1) {\n radiusList.push(y);\n } else if (cos === 1) {\n radiusList.push(width - x);\n } else if (cos === -1) {\n radiusList.push(x);\n } else {\n if (sin > 0) {\n radiusList.push(Math.abs((height - y) / sin));\n } else {\n radiusList.push(Math.abs(y / sin));\n }\n\n if (cos > 0) {\n radiusList.push(Math.abs((width - x) / cos));\n } else {\n radiusList.push(Math.abs(x / cos));\n }\n }\n });\n\n return Math.min.apply(null, radiusList);\n}\n\nexport type Quadrant = 1 | 2 | 3 | 4;\n\nexport function computeQuadrant(angle: number): Quadrant {\n angle = normalizeAngle(angle);\n if (angle > 0 && angle <= Math.PI / 2) {\n return 2;\n } else if (angle > Math.PI / 2 && angle <= Math.PI) {\n return 3;\n } else if (angle > Math.PI && angle <= (3 * Math.PI) / 2) {\n return 4;\n }\n return 1;\n}\n"]}
|
package/es/color/Color.d.ts
CHANGED
|
@@ -174,6 +174,9 @@ export declare class Color {
|
|
|
174
174
|
getLuminance(): number;
|
|
175
175
|
getLuminance2(): number;
|
|
176
176
|
getLuminance3(): number;
|
|
177
|
+
/**
|
|
178
|
+
* https://www.w3.org/TR/WCAG21/#use-of-color
|
|
179
|
+
*/
|
|
177
180
|
getLuminanceWCAG(): number;
|
|
178
181
|
clone(): Color;
|
|
179
182
|
copyGammaToLinear(color: Color, gammaFactor?: number): this;
|
package/es/color/Color.js
CHANGED
|
@@ -1,3 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (c) 2013, Jason Davies.
|
|
3
|
+
All rights reserved.
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
* The name Jason Davies may not be used to endorse or promote products
|
|
16
|
+
derived from this software without specific prior written permission.
|
|
17
|
+
|
|
18
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
19
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
20
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
21
|
+
DISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
22
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
23
|
+
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
24
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
25
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
|
26
|
+
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
27
|
+
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
28
|
+
*/
|
|
29
|
+
// Mike Bostock, https://github.com/d3/d3-color
|
|
30
|
+
/**
|
|
31
|
+
* 参考 d3-color 实现。用于颜色转化
|
|
32
|
+
* 16进制/rgb 转化为r,g,b, o
|
|
33
|
+
*/
|
|
1
34
|
import { clamp, isArray, isNil, isNumber, isValid } from "../common";
|
|
2
35
|
|
|
3
36
|
import hslToRgb from "./hslToRgb";
|
|
@@ -165,10 +198,12 @@ function hex(value) {
|
|
|
165
198
|
|
|
166
199
|
function rgb(value) {
|
|
167
200
|
return isNumber(value) ? new RGB(value >> 16, value >> 8 & 255, 255 & value, 1) : isArray(value) ? new RGB(value[0], value[1], value[2]) : new RGB(255, 255, 255);
|
|
201
|
+
// default return
|
|
168
202
|
}
|
|
169
203
|
|
|
170
204
|
function rgba(value) {
|
|
171
205
|
return isNumber(value) ? new RGB(value >>> 24, value >>> 16 & 255, value >>> 8 & 255, 255 & value) : isArray(value) ? new RGB(value[0], value[1], value[2], value[3]) : new RGB(255, 255, 255, 1);
|
|
206
|
+
// default return
|
|
172
207
|
}
|
|
173
208
|
|
|
174
209
|
function SRGBToLinear(c) {
|
|
@@ -183,7 +218,10 @@ const setHex = (formatValue, forceHex) => {
|
|
|
183
218
|
const isHex = REG_HEX.exec(formatValue);
|
|
184
219
|
if (forceHex || isHex) {
|
|
185
220
|
const hex = parseInt(isHex[1], 16), hexLength = isHex[1].length;
|
|
186
|
-
|
|
221
|
+
// #fff
|
|
222
|
+
return 3 === hexLength ? new RGB((hex >> 8 & 15) + ((hex >> 8 & 15) << 4), (hex >> 4 & 15) + ((hex >> 4 & 15) << 4), (15 & hex) + ((15 & hex) << 4), 1) :
|
|
223
|
+
// #ffffff
|
|
224
|
+
6 === hexLength ? rgb(hex) : 8 === hexLength ? new RGB(hex >> 24 & 255, hex >> 16 & 255, hex >> 8 & 255, (255 & hex) / 255) : null;
|
|
187
225
|
}
|
|
188
226
|
};
|
|
189
227
|
|
|
@@ -218,22 +256,30 @@ export class Color {
|
|
|
218
256
|
}
|
|
219
257
|
}
|
|
220
258
|
static parseColorString(value) {
|
|
259
|
+
// case0: transparent
|
|
221
260
|
if (isValid(DEFAULT_COLORS_OPACITY[value])) return rgba(DEFAULT_COLORS_OPACITY[value]);
|
|
222
|
-
|
|
261
|
+
// case1: 简写 ['blue','red']
|
|
262
|
+
if (isValid(DEFAULT_COLORS[value])) return rgb(DEFAULT_COLORS[value]);
|
|
223
263
|
const formatValue = `${value}`.trim().toLowerCase(), hexRes = setHex(formatValue);
|
|
224
|
-
|
|
225
|
-
|
|
264
|
+
// case2: 16进制
|
|
265
|
+
if (void 0 !== hexRes) return hexRes;
|
|
266
|
+
// case3 : rgb
|
|
267
|
+
if (/^(rgb|RGB|rgba|RGBA)/.test(formatValue)) {
|
|
226
268
|
const aColor = formatValue.replace(/(?:\(|\)|rgba|RGBA|rgb|RGB)*/g, "").split(",");
|
|
227
269
|
return new RGB(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10), parseFloat(aColor[3]));
|
|
228
270
|
}
|
|
229
|
-
|
|
271
|
+
// case4: hsl
|
|
272
|
+
if (/^(hsl|HSL|hsla|HSLA)/.test(formatValue)) {
|
|
230
273
|
const aColor = formatValue.replace(/(?:\(|\)|hsla|HSLA|hsl|HSL)*/g, "").split(","), rgb = hslToRgb(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10));
|
|
231
274
|
return new RGB(rgb.r, rgb.g, rgb.b, parseFloat(aColor[3]));
|
|
232
275
|
}
|
|
233
276
|
}
|
|
234
277
|
constructor(value) {
|
|
235
278
|
const color = Color.parseColorString(value);
|
|
236
|
-
|
|
279
|
+
// case0: transparent
|
|
280
|
+
color ? this.color = color : (
|
|
281
|
+
// default: 白色
|
|
282
|
+
console.warn(`Warn: 传入${value}无法解析为Color`), this.color = new RGB(255, 255, 255));
|
|
237
283
|
}
|
|
238
284
|
toRGBA() {
|
|
239
285
|
return this.color.formatRgb();
|
|
@@ -267,6 +313,7 @@ export class Color {
|
|
|
267
313
|
this.color.g = Math.max(0, Math.min(255, Math.floor(g * color.color.g))), this.color.b = Math.max(0, Math.min(255, Math.floor(b * color.color.b))),
|
|
268
314
|
this;
|
|
269
315
|
}
|
|
316
|
+
// todo: 这里亮度计算都没考虑alpha通道
|
|
270
317
|
getHSVBrightness() {
|
|
271
318
|
return Math.max(this.color.r, this.color.g, this.color.b) / 255;
|
|
272
319
|
}
|
|
@@ -286,9 +333,13 @@ export class Color {
|
|
|
286
333
|
return null != res ? res : this;
|
|
287
334
|
}
|
|
288
335
|
setColorName(name) {
|
|
336
|
+
// color keywords
|
|
289
337
|
const hex = DEFAULT_COLORS[name.toLowerCase()];
|
|
290
|
-
return void 0 !== hex ?
|
|
291
|
-
|
|
338
|
+
return void 0 !== hex ?
|
|
339
|
+
// red
|
|
340
|
+
this.setHex(hex) :
|
|
341
|
+
// unknown color
|
|
342
|
+
console.warn("THREE.Color: Unknown color " + name), this;
|
|
292
343
|
}
|
|
293
344
|
setScalar(scalar) {
|
|
294
345
|
return this.color.r = scalar, this.color.g = scalar, this.color.b = scalar, this;
|
|
@@ -305,7 +356,9 @@ export class Color {
|
|
|
305
356
|
getLuminance3() {
|
|
306
357
|
return (.299 * this.color.r + .587 * this.color.g + .114 * this.color.b) / 255;
|
|
307
358
|
}
|
|
308
|
-
|
|
359
|
+
/**
|
|
360
|
+
* https://www.w3.org/TR/WCAG21/#use-of-color
|
|
361
|
+
*/ getLuminanceWCAG() {
|
|
309
362
|
const RsRGB = this.color.r / 255, GsRGB = this.color.g / 255, BsRGB = this.color.b / 255;
|
|
310
363
|
let R, G, B;
|
|
311
364
|
R = RsRGB <= .03928 ? RsRGB / 12.92 : Math.pow((RsRGB + .055) / 1.055, 2.4), G = GsRGB <= .03928 ? GsRGB / 12.92 : Math.pow((GsRGB + .055) / 1.055, 2.4),
|
|
@@ -351,6 +404,7 @@ export class RGB {
|
|
|
351
404
|
this.r = isNaN(+r) ? 255 : Math.max(0, Math.min(255, +r)), this.g = isNaN(+g) ? 255 : Math.max(0, Math.min(255, +g)),
|
|
352
405
|
this.b = isNaN(+b) ? 255 : Math.max(0, Math.min(255, +b)), isValid(opacity) ? this.opacity = isNaN(+opacity) ? 1 : Math.max(0, Math.min(1, +opacity)) : this.opacity = 1;
|
|
353
406
|
}
|
|
407
|
+
// 转为16进制
|
|
354
408
|
formatHex() {
|
|
355
409
|
return `#${hex(this.r) + hex(this.g) + hex(this.b) + (1 === this.opacity ? "" : hex(255 * this.opacity))}`;
|
|
356
410
|
}
|
|
@@ -362,6 +416,7 @@ export class RGB {
|
|
|
362
416
|
const opacity = this.opacity, {h: h, s: s, l: l} = rgbToHsl(this.r, this.g, this.b);
|
|
363
417
|
return `${1 === opacity ? "hsl(" : "hsla("}${h},${s}%,${l}%${1 === opacity ? ")" : `,${opacity})`}`;
|
|
364
418
|
}
|
|
419
|
+
// 转为16进制
|
|
365
420
|
toString() {
|
|
366
421
|
return this.formatHex();
|
|
367
422
|
}
|
package/es/color/Color.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/color/Color.ts"],"names":[],"mappings":"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","file":"Color.js","sourcesContent":["/*\nCopyright (c) 2013, Jason Davies.\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\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * 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\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Mike Bostock, https://github.com/d3/d3-color\n/**\n * 参考 d3-color 实现。用于颜色转化\n * 16进制/rgb 转化为r,g,b, o\n */\nimport { clamp, isArray, isNil, isNumber, isValid } from '../common';\nimport hslToRgb from './hslToRgb';\nimport rgbToHsl from './rgbToHsl';\n\nconst REG_HEX = /^#([0-9a-f]{3,8})$/;\n\nconst DEFAULT_COLORS_OPACITY = {\n transparent: 0xffffff00\n};\n\nexport const DEFAULT_COLORS = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\nfunction hex(value: number) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? '0' : '') + value.toString(16);\n}\n\nfunction rgb(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB((value as number) >> 16, ((value as number) >> 8) & 0xff, (value as number) & 0xff, 1);\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2]);\n }\n\n // default return\n return new RGB(255, 255, 255);\n}\n\nfunction rgba(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB(\n (value as number) >>> 24,\n ((value as number) >>> 16) & 0xff,\n ((value as number) >>> 8) & 0xff,\n (value as number) & 0xff\n );\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2], value[3]);\n }\n\n // default return\n return new RGB(255, 255, 255, 1);\n}\n\nfunction SRGBToLinear(c: number) {\n return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n}\n\nfunction LinearToSRGB(c: number) {\n return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n}\n\nconst setHex = (formatValue: string, forceHex?: boolean) => {\n const isHex = REG_HEX.exec(formatValue);\n\n if (forceHex || isHex) {\n const hex = parseInt(isHex[1], 16);\n const hexLength = isHex[1].length;\n // #fff\n if (hexLength === 3) {\n return new RGB(\n ((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4),\n ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4),\n (hex & 0xf) + ((hex & 0xf) << 4),\n 1\n );\n }\n // #ffffff\n if (hexLength === 6) {\n return rgb(hex);\n }\n // #ffffffaa\n else if (hexLength === 8) {\n return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);\n }\n\n return null;\n }\n\n return undefined;\n};\n\nexport class Color {\n color!: RGB;\n\n static Brighter(source: string, b = 1) {\n if (b === 1) {\n return source;\n }\n return new Color(source).brighter(b).toRGBA();\n }\n\n static SetOpacity(source: string, o = 1) {\n if (o === 1) {\n return source;\n }\n return new Color(source).setOpacity(o).toRGBA();\n }\n\n static getColorBrightness(source: string | Color, model: 'hsv' | 'hsl' | 'lum' | 'lum2' | 'lum3' | 'wcag' = 'hsl') {\n const color = source instanceof Color ? source : new Color(source);\n switch (model) {\n case 'hsv':\n return color.getHSVBrightness();\n case 'hsl':\n return color.getHSLBrightness();\n case 'lum':\n return color.getLuminance();\n case 'lum2':\n return color.getLuminance2();\n case 'lum3':\n return color.getLuminance3();\n case 'wcag':\n return color.getLuminanceWCAG();\n default:\n return color.getHSVBrightness();\n }\n }\n\n static parseColorString(value: string) {\n // case0: transparent\n if (isValid(DEFAULT_COLORS_OPACITY[value])) {\n return rgba(DEFAULT_COLORS_OPACITY[value]);\n }\n\n // case1: 简写 ['blue','red']\n if (isValid(DEFAULT_COLORS[value])) {\n return rgb(DEFAULT_COLORS[value]);\n }\n const formatValue = `${value}`.trim().toLowerCase();\n\n // case2: 16进制\n const hexRes = setHex(formatValue);\n\n if (hexRes !== undefined) {\n return hexRes;\n }\n\n // case3 : rgb\n if (/^(rgb|RGB|rgba|RGBA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|rgba|RGBA|rgb|RGB)*/g, '').split(',');\n return new RGB(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10), parseFloat(aColor[3]));\n }\n\n // case4: hsl\n if (/^(hsl|HSL|hsla|HSLA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|hsla|HSLA|hsl|HSL)*/g, '').split(',');\n const rgb = hslToRgb(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10));\n\n return new RGB(rgb.r, rgb.g, rgb.b, parseFloat(aColor[3]));\n }\n\n return;\n }\n\n constructor(value: string) {\n const color = Color.parseColorString(value);\n\n // case0: transparent\n if (color) {\n this.color = color;\n } else {\n // default: 白色\n console.warn(`Warn: 传入${value}无法解析为Color`);\n this.color = new RGB(255, 255, 255);\n }\n }\n toRGBA() {\n return this.color.formatRgb();\n }\n toString() {\n return this.color.formatRgb();\n }\n toHex() {\n return this.color.formatHex();\n }\n toHsl() {\n return this.color.formatHsl();\n }\n\n brighter(k: number) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * k)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * k)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * k)));\n return this;\n }\n\n add(color: Color) {\n const { r, g, b } = this.color;\n this.color.r += Math.min(255, r + color.color.r);\n this.color.g += Math.min(255, g + color.color.g);\n this.color.b += Math.min(255, b + color.color.b);\n return this;\n }\n\n sub(color: Color) {\n this.color.r = Math.max(0, this.color.r - color.color.r);\n this.color.g = Math.max(0, this.color.g - color.color.g);\n this.color.b = Math.max(0, this.color.b - color.color.b);\n return this;\n }\n\n multiply(color: Color) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * color.color.r)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * color.color.g)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * color.color.b)));\n return this;\n }\n\n // todo: 这里亮度计算都没考虑alpha通道\n getHSVBrightness() {\n return Math.max(this.color.r, this.color.g, this.color.b) / 255;\n }\n\n getHSLBrightness() {\n return (\n (Math.max(this.color.r, this.color.g, this.color.b) / 255 +\n Math.min(this.color.r, this.color.g, this.color.b) / 255) *\n 0.5\n );\n }\n\n setHsl(h?: number | null | undefined, s?: number | null | undefined, l?: number | null | undefined) {\n const opacity = this.color.opacity;\n const hsl = rgbToHsl(this.color.r, this.color.g, this.color.b);\n\n const rgb = hslToRgb(\n isNil(h) ? hsl.h : clamp(h as number, 0, 360),\n isNil(s) ? hsl.s : s >= 0 && s <= 1 ? s * 100 : s,\n isNil(l) ? hsl.l : l <= 1 && l >= 0 ? l * 100 : l\n );\n this.color = new RGB(rgb.r, rgb.g, rgb.b, opacity);\n\n return this;\n }\n\n setRGB(r: number, g: number, b: number) {\n !isNil(r) && (this.color.r = r);\n !isNil(g) && (this.color.g = g);\n !isNil(b) && (this.color.b = b);\n\n return this;\n }\n\n setHex(value: string) {\n const formatValue = `${value}`.trim().toLowerCase();\n\n const res = setHex(formatValue, true);\n\n return res ?? this;\n }\n\n setColorName(name: string) {\n // color keywords\n const hex = DEFAULT_COLORS[name.toLowerCase()];\n\n if (typeof hex !== 'undefined') {\n // red\n this.setHex(hex);\n } else {\n // unknown color\n console.warn('THREE.Color: Unknown color ' + name);\n }\n\n return this;\n }\n\n setScalar(scalar: number) {\n this.color.r = scalar;\n this.color.g = scalar;\n this.color.b = scalar;\n return this;\n }\n\n setOpacity(o = 1) {\n this.color.opacity = o;\n return this;\n }\n\n getLuminance() {\n return (0.2126 * this.color.r + 0.7152 * this.color.g + 0.0722 * this.color.b) / 255;\n }\n\n getLuminance2() {\n return (0.2627 * this.color.r + 0.678 * this.color.g + 0.0593 * this.color.b) / 255;\n }\n\n getLuminance3() {\n return (0.299 * this.color.r + 0.587 * this.color.g + 0.114 * this.color.b) / 255;\n }\n\n /**\n * https://www.w3.org/TR/WCAG21/#use-of-color\n */\n getLuminanceWCAG() {\n const RsRGB = this.color.r / 255;\n const GsRGB = this.color.g / 255;\n const BsRGB = this.color.b / 255;\n let R;\n let G;\n let B;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n } else {\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n } else {\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n } else {\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n const L = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n return L;\n }\n\n clone() {\n return new Color(this.color.toString());\n }\n\n copyGammaToLinear(color: Color, gammaFactor = 2.0) {\n this.color.r = Math.pow(color.color.r, gammaFactor);\n this.color.g = Math.pow(color.color.g, gammaFactor);\n this.color.b = Math.pow(color.color.b, gammaFactor);\n return this;\n }\n\n copyLinearToGamma(color: Color, gammaFactor = 2.0) {\n const safeInverse = gammaFactor > 0 ? 1.0 / gammaFactor : 1.0;\n\n this.color.r = Math.pow(color.color.r, safeInverse);\n this.color.g = Math.pow(color.color.g, safeInverse);\n this.color.b = Math.pow(color.color.b, safeInverse);\n\n return this;\n }\n\n convertGammaToLinear(gammaFactor: number) {\n this.copyGammaToLinear(this, gammaFactor);\n return this;\n }\n\n convertLinearToGamma(gammaFactor: number) {\n this.copyLinearToGamma(this, gammaFactor);\n return this;\n }\n\n copySRGBToLinear(color: Color) {\n this.color.r = SRGBToLinear(color.color.r);\n this.color.g = SRGBToLinear(color.color.g);\n this.color.b = SRGBToLinear(color.color.b);\n return this;\n }\n\n copyLinearToSRGB(color: Color) {\n this.color.r = LinearToSRGB(color.color.r);\n this.color.g = LinearToSRGB(color.color.g);\n this.color.b = LinearToSRGB(color.color.b);\n return this;\n }\n\n convertSRGBToLinear() {\n this.copySRGBToLinear(this);\n return this;\n }\n\n convertLinearToSRGB() {\n this.copyLinearToSRGB(this);\n return this;\n }\n}\n\nexport class RGB {\n r: number;\n g: number;\n b: number;\n opacity: number;\n constructor(r: number, g: number, b: number, opacity?: number) {\n this.r = isNaN(+r) ? 255 : Math.max(0, Math.min(255, +r));\n this.g = isNaN(+g) ? 255 : Math.max(0, Math.min(255, +g));\n this.b = isNaN(+b) ? 255 : Math.max(0, Math.min(255, +b));\n\n if (isValid(opacity)) {\n this.opacity = isNaN(+(opacity as number)) ? 1 : Math.max(0, Math.min(1, +(opacity as number)));\n } else {\n this.opacity = 1;\n }\n }\n // 转为16进制\n formatHex() {\n return `#${hex(this.r) + hex(this.g) + hex(this.b) + (this.opacity === 1 ? '' : hex(this.opacity * 255))}`;\n }\n formatRgb() {\n const opacity = this.opacity;\n return `${opacity === 1 ? 'rgb(' : 'rgba('}${this.r},${this.g},${this.b}${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n\n formatHsl() {\n const opacity = this.opacity;\n const { h, s, l } = rgbToHsl(this.r, this.g, this.b);\n\n return `${opacity === 1 ? 'hsl(' : 'hsla('}${h},${s}%,${l}%${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n // 转为16进制\n toString() {\n return this.formatHex();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/color/Color.ts"],"names":[],"mappings":"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","file":"Color.js","sourcesContent":["/*\nCopyright (c) 2013, Jason Davies.\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\n * Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n * 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\n * The name Jason Davies may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT,\nINCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\nLIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\nOR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\nADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n// Mike Bostock, https://github.com/d3/d3-color\n/**\n * 参考 d3-color 实现。用于颜色转化\n * 16进制/rgb 转化为r,g,b, o\n */\nimport { clamp, isArray, isNil, isNumber, isValid } from '../common';\nimport hslToRgb from './hslToRgb';\nimport rgbToHsl from './rgbToHsl';\n\nconst REG_HEX = /^#([0-9a-f]{3,8})$/;\n\nconst DEFAULT_COLORS_OPACITY = {\n transparent: 0xffffff00\n};\n\nexport const DEFAULT_COLORS = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\nfunction hex(value: number) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? '0' : '') + value.toString(16);\n}\n\nfunction rgb(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB((value as number) >> 16, ((value as number) >> 8) & 0xff, (value as number) & 0xff, 1);\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2]);\n }\n\n // default return\n return new RGB(255, 255, 255);\n}\n\nfunction rgba(value: number | number[]): RGB {\n if (isNumber(value)) {\n return new RGB(\n (value as number) >>> 24,\n ((value as number) >>> 16) & 0xff,\n ((value as number) >>> 8) & 0xff,\n (value as number) & 0xff\n );\n } else if (isArray(value)) {\n return new RGB(value[0], value[1], value[2], value[3]);\n }\n\n // default return\n return new RGB(255, 255, 255, 1);\n}\n\nfunction SRGBToLinear(c: number) {\n return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n}\n\nfunction LinearToSRGB(c: number) {\n return c < 0.0031308 ? c * 12.92 : 1.055 * Math.pow(c, 0.41666) - 0.055;\n}\n\nconst setHex = (formatValue: string, forceHex?: boolean) => {\n const isHex = REG_HEX.exec(formatValue);\n\n if (forceHex || isHex) {\n const hex = parseInt(isHex[1], 16);\n const hexLength = isHex[1].length;\n // #fff\n if (hexLength === 3) {\n return new RGB(\n ((hex >> 8) & 0xf) + (((hex >> 8) & 0xf) << 4),\n ((hex >> 4) & 0xf) + (((hex >> 4) & 0xf) << 4),\n (hex & 0xf) + ((hex & 0xf) << 4),\n 1\n );\n }\n // #ffffff\n if (hexLength === 6) {\n return rgb(hex);\n }\n // #ffffffaa\n else if (hexLength === 8) {\n return new RGB((hex >> 24) & 0xff, (hex >> 16) & 0xff, (hex >> 8) & 0xff, (hex & 0xff) / 0xff);\n }\n\n return null;\n }\n\n return undefined;\n};\n\nexport class Color {\n color!: RGB;\n\n static Brighter(source: string, b = 1) {\n if (b === 1) {\n return source;\n }\n return new Color(source).brighter(b).toRGBA();\n }\n\n static SetOpacity(source: string, o = 1) {\n if (o === 1) {\n return source;\n }\n return new Color(source).setOpacity(o).toRGBA();\n }\n\n static getColorBrightness(source: string | Color, model: 'hsv' | 'hsl' | 'lum' | 'lum2' | 'lum3' | 'wcag' = 'hsl') {\n const color = source instanceof Color ? source : new Color(source);\n switch (model) {\n case 'hsv':\n return color.getHSVBrightness();\n case 'hsl':\n return color.getHSLBrightness();\n case 'lum':\n return color.getLuminance();\n case 'lum2':\n return color.getLuminance2();\n case 'lum3':\n return color.getLuminance3();\n case 'wcag':\n return color.getLuminanceWCAG();\n default:\n return color.getHSVBrightness();\n }\n }\n\n static parseColorString(value: string) {\n // case0: transparent\n if (isValid(DEFAULT_COLORS_OPACITY[value])) {\n return rgba(DEFAULT_COLORS_OPACITY[value]);\n }\n\n // case1: 简写 ['blue','red']\n if (isValid(DEFAULT_COLORS[value])) {\n return rgb(DEFAULT_COLORS[value]);\n }\n const formatValue = `${value}`.trim().toLowerCase();\n\n // case2: 16进制\n const hexRes = setHex(formatValue);\n\n if (hexRes !== undefined) {\n return hexRes;\n }\n\n // case3 : rgb\n if (/^(rgb|RGB|rgba|RGBA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|rgba|RGBA|rgb|RGB)*/g, '').split(',');\n return new RGB(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10), parseFloat(aColor[3]));\n }\n\n // case4: hsl\n if (/^(hsl|HSL|hsla|HSLA)/.test(formatValue)) {\n const aColor = formatValue.replace(/(?:\\(|\\)|hsla|HSLA|hsl|HSL)*/g, '').split(',');\n const rgb = hslToRgb(parseInt(aColor[0], 10), parseInt(aColor[1], 10), parseInt(aColor[2], 10));\n\n return new RGB(rgb.r, rgb.g, rgb.b, parseFloat(aColor[3]));\n }\n\n return;\n }\n\n constructor(value: string) {\n const color = Color.parseColorString(value);\n\n // case0: transparent\n if (color) {\n this.color = color;\n } else {\n // default: 白色\n console.warn(`Warn: 传入${value}无法解析为Color`);\n this.color = new RGB(255, 255, 255);\n }\n }\n toRGBA() {\n return this.color.formatRgb();\n }\n toString() {\n return this.color.formatRgb();\n }\n toHex() {\n return this.color.formatHex();\n }\n toHsl() {\n return this.color.formatHsl();\n }\n\n brighter(k: number) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * k)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * k)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * k)));\n return this;\n }\n\n add(color: Color) {\n const { r, g, b } = this.color;\n this.color.r += Math.min(255, r + color.color.r);\n this.color.g += Math.min(255, g + color.color.g);\n this.color.b += Math.min(255, b + color.color.b);\n return this;\n }\n\n sub(color: Color) {\n this.color.r = Math.max(0, this.color.r - color.color.r);\n this.color.g = Math.max(0, this.color.g - color.color.g);\n this.color.b = Math.max(0, this.color.b - color.color.b);\n return this;\n }\n\n multiply(color: Color) {\n const { r, g, b } = this.color;\n this.color.r = Math.max(0, Math.min(255, Math.floor(r * color.color.r)));\n this.color.g = Math.max(0, Math.min(255, Math.floor(g * color.color.g)));\n this.color.b = Math.max(0, Math.min(255, Math.floor(b * color.color.b)));\n return this;\n }\n\n // todo: 这里亮度计算都没考虑alpha通道\n getHSVBrightness() {\n return Math.max(this.color.r, this.color.g, this.color.b) / 255;\n }\n\n getHSLBrightness() {\n return (\n (Math.max(this.color.r, this.color.g, this.color.b) / 255 +\n Math.min(this.color.r, this.color.g, this.color.b) / 255) *\n 0.5\n );\n }\n\n setHsl(h?: number | null | undefined, s?: number | null | undefined, l?: number | null | undefined) {\n const opacity = this.color.opacity;\n const hsl = rgbToHsl(this.color.r, this.color.g, this.color.b);\n\n const rgb = hslToRgb(\n isNil(h) ? hsl.h : clamp(h as number, 0, 360),\n isNil(s) ? hsl.s : s >= 0 && s <= 1 ? s * 100 : s,\n isNil(l) ? hsl.l : l <= 1 && l >= 0 ? l * 100 : l\n );\n this.color = new RGB(rgb.r, rgb.g, rgb.b, opacity);\n\n return this;\n }\n\n setRGB(r: number, g: number, b: number) {\n !isNil(r) && (this.color.r = r);\n !isNil(g) && (this.color.g = g);\n !isNil(b) && (this.color.b = b);\n\n return this;\n }\n\n setHex(value: string) {\n const formatValue = `${value}`.trim().toLowerCase();\n\n const res = setHex(formatValue, true);\n\n return res ?? this;\n }\n\n setColorName(name: string) {\n // color keywords\n const hex = DEFAULT_COLORS[name.toLowerCase()];\n\n if (typeof hex !== 'undefined') {\n // red\n this.setHex(hex);\n } else {\n // unknown color\n console.warn('THREE.Color: Unknown color ' + name);\n }\n\n return this;\n }\n\n setScalar(scalar: number) {\n this.color.r = scalar;\n this.color.g = scalar;\n this.color.b = scalar;\n return this;\n }\n\n setOpacity(o = 1) {\n this.color.opacity = o;\n return this;\n }\n\n getLuminance() {\n return (0.2126 * this.color.r + 0.7152 * this.color.g + 0.0722 * this.color.b) / 255;\n }\n\n getLuminance2() {\n return (0.2627 * this.color.r + 0.678 * this.color.g + 0.0593 * this.color.b) / 255;\n }\n\n getLuminance3() {\n return (0.299 * this.color.r + 0.587 * this.color.g + 0.114 * this.color.b) / 255;\n }\n\n /**\n * https://www.w3.org/TR/WCAG21/#use-of-color\n */\n getLuminanceWCAG() {\n const RsRGB = this.color.r / 255;\n const GsRGB = this.color.g / 255;\n const BsRGB = this.color.b / 255;\n let R;\n let G;\n let B;\n if (RsRGB <= 0.03928) {\n R = RsRGB / 12.92;\n } else {\n R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);\n }\n if (GsRGB <= 0.03928) {\n G = GsRGB / 12.92;\n } else {\n G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);\n }\n if (BsRGB <= 0.03928) {\n B = BsRGB / 12.92;\n } else {\n B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);\n }\n const L = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n return L;\n }\n\n clone() {\n return new Color(this.color.toString());\n }\n\n copyGammaToLinear(color: Color, gammaFactor = 2.0) {\n this.color.r = Math.pow(color.color.r, gammaFactor);\n this.color.g = Math.pow(color.color.g, gammaFactor);\n this.color.b = Math.pow(color.color.b, gammaFactor);\n return this;\n }\n\n copyLinearToGamma(color: Color, gammaFactor = 2.0) {\n const safeInverse = gammaFactor > 0 ? 1.0 / gammaFactor : 1.0;\n\n this.color.r = Math.pow(color.color.r, safeInverse);\n this.color.g = Math.pow(color.color.g, safeInverse);\n this.color.b = Math.pow(color.color.b, safeInverse);\n\n return this;\n }\n\n convertGammaToLinear(gammaFactor: number) {\n this.copyGammaToLinear(this, gammaFactor);\n return this;\n }\n\n convertLinearToGamma(gammaFactor: number) {\n this.copyLinearToGamma(this, gammaFactor);\n return this;\n }\n\n copySRGBToLinear(color: Color) {\n this.color.r = SRGBToLinear(color.color.r);\n this.color.g = SRGBToLinear(color.color.g);\n this.color.b = SRGBToLinear(color.color.b);\n return this;\n }\n\n copyLinearToSRGB(color: Color) {\n this.color.r = LinearToSRGB(color.color.r);\n this.color.g = LinearToSRGB(color.color.g);\n this.color.b = LinearToSRGB(color.color.b);\n return this;\n }\n\n convertSRGBToLinear() {\n this.copySRGBToLinear(this);\n return this;\n }\n\n convertLinearToSRGB() {\n this.copyLinearToSRGB(this);\n return this;\n }\n}\n\nexport class RGB {\n r: number;\n g: number;\n b: number;\n opacity: number;\n constructor(r: number, g: number, b: number, opacity?: number) {\n this.r = isNaN(+r) ? 255 : Math.max(0, Math.min(255, +r));\n this.g = isNaN(+g) ? 255 : Math.max(0, Math.min(255, +g));\n this.b = isNaN(+b) ? 255 : Math.max(0, Math.min(255, +b));\n\n if (isValid(opacity)) {\n this.opacity = isNaN(+(opacity as number)) ? 1 : Math.max(0, Math.min(1, +(opacity as number)));\n } else {\n this.opacity = 1;\n }\n }\n // 转为16进制\n formatHex() {\n return `#${hex(this.r) + hex(this.g) + hex(this.b) + (this.opacity === 1 ? '' : hex(this.opacity * 255))}`;\n }\n formatRgb() {\n const opacity = this.opacity;\n return `${opacity === 1 ? 'rgb(' : 'rgba('}${this.r},${this.g},${this.b}${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n\n formatHsl() {\n const opacity = this.opacity;\n const { h, s, l } = rgbToHsl(this.r, this.g, this.b);\n\n return `${opacity === 1 ? 'hsl(' : 'hsla('}${h},${s}%,${l}%${opacity === 1 ? ')' : `,${opacity})`}`;\n }\n // 转为16进制\n toString() {\n return this.formatHex();\n }\n}\n"]}
|
package/es/color/hexToRgb.d.ts
CHANGED
package/es/color/hexToRgb.js
CHANGED
package/es/color/hexToRgb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/color/hexToRgb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/color/hexToRgb.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,GAAW;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,IAAI,CAAC,GAAG,EAAE,CAAC;IACX,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC3C,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;YAClB,SAAS;SACV;QACD,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE;YACrB,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;SACb;aAAM,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE;YAC5B,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;SACb;aAAM,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE;YAC5B,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;SACb;KACF;IACD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3B,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACtB,CAAC","file":"hexToRgb.js","sourcesContent":["/**\n * 将 hex 格式颜色转换为 rgb 格式\n * @param str hex 格式的颜色值\n * @returns rgb 格式\n */\nexport default function hexToRgb(str: string): [number, number, number] {\n let r = '';\n let g = '';\n let b = '';\n const strtIndex = str[0] === '#' ? 1 : 0;\n for (let i = strtIndex; i < str.length; i++) {\n if (str[i] === '#') {\n continue;\n }\n if (i < strtIndex + 2) {\n r += str[i];\n } else if (i < strtIndex + 4) {\n g += str[i];\n } else if (i < strtIndex + 6) {\n b += str[i];\n }\n }\n const ri = parseInt(r, 16);\n const gi = parseInt(g, 16);\n const bi = parseInt(b, 16);\n return [ri, gi, bi];\n}\n"]}
|
package/es/color/rgbToHsl.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
export default function rgbToHsl(r, g, b) {
|
|
2
2
|
r /= 255, g /= 255, b /= 255;
|
|
3
|
+
// Find greatest and smallest channel values
|
|
3
4
|
const cMin = Math.min(r, g, b), cMax = Math.max(r, g, b), delta = cMax - cMin;
|
|
4
5
|
let h = 0, s = 0, l = 0;
|
|
5
6
|
return h = 0 === delta ? 0 : cMax === r ? (g - b) / delta % 6 : cMax === g ? (b - r) / delta + 2 : (r - g) / delta + 4,
|
|
6
|
-
h = Math.round(60 * h), h < 0 && (h += 360), l = (cMax + cMin) / 2,
|
|
7
|
+
h = Math.round(60 * h), h < 0 && (h += 360), l = (cMax + cMin) / 2,
|
|
8
|
+
// Calculate saturation
|
|
9
|
+
s = 0 === delta ? 0 : delta / (1 - Math.abs(2 * l - 1)),
|
|
10
|
+
// Multiply l and s by 100
|
|
7
11
|
s = +(100 * s).toFixed(1), l = +(100 * l).toFixed(1), {
|
|
8
12
|
h: h,
|
|
9
13
|
s: s,
|