@visactor/vutils 0.9.0-alpha.0
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.md +34 -0
- package/README.zh-CN.md +0 -0
- package/cjs/angle.d.ts +12 -0
- package/cjs/angle.js +40 -0
- package/cjs/angle.js.map +1 -0
- package/cjs/color/Color.d.ts +181 -0
- package/cjs/color/Color.js +298 -0
- package/cjs/color/Color.js.map +1 -0
- package/cjs/color/hexToRgb.d.ts +1 -0
- package/cjs/color/hexToRgb.js +13 -0
- package/cjs/color/hexToRgb.js.map +1 -0
- package/cjs/color/hslToRgb.d.ts +5 -0
- package/cjs/color/hslToRgb.js +21 -0
- package/cjs/color/hslToRgb.js.map +1 -0
- package/cjs/color/index.d.ts +6 -0
- package/cjs/color/index.js +80 -0
- package/cjs/color/index.js.map +1 -0
- package/cjs/color/interpolate.d.ts +2 -0
- package/cjs/color/interpolate.js +18 -0
- package/cjs/color/interpolate.js.map +1 -0
- package/cjs/color/rgbToHex.d.ts +1 -0
- package/cjs/color/rgbToHex.js +10 -0
- package/cjs/color/rgbToHex.js.map +1 -0
- package/cjs/color/rgbToHsl.d.ts +5 -0
- package/cjs/color/rgbToHsl.js +19 -0
- package/cjs/color/rgbToHsl.js.map +1 -0
- package/cjs/common/array.d.ts +9 -0
- package/cjs/common/array.js +64 -0
- package/cjs/common/array.js.map +1 -0
- package/cjs/common/ascending.d.ts +1 -0
- package/cjs/common/ascending.js +10 -0
- package/cjs/common/ascending.js.map +1 -0
- package/cjs/common/bisect.d.ts +1 -0
- package/cjs/common/bisect.js +24 -0
- package/cjs/common/bisect.js.map +1 -0
- package/cjs/common/clamp.d.ts +2 -0
- package/cjs/common/clamp.js +12 -0
- package/cjs/common/clamp.js.map +1 -0
- package/cjs/common/clampRange.d.ts +2 -0
- package/cjs/common/clampRange.js +16 -0
- package/cjs/common/clampRange.js.map +1 -0
- package/cjs/common/clamper.d.ts +1 -0
- package/cjs/common/clamper.js +11 -0
- package/cjs/common/clamper.js.map +1 -0
- package/cjs/common/clone.d.ts +1 -0
- package/cjs/common/clone.js +42 -0
- package/cjs/common/clone.js.map +1 -0
- package/cjs/common/cloneDeep.d.ts +1 -0
- package/cjs/common/cloneDeep.js +31 -0
- package/cjs/common/cloneDeep.js.map +1 -0
- package/cjs/common/constant.d.ts +2 -0
- package/cjs/common/constant.js +17 -0
- package/cjs/common/constant.js.map +1 -0
- package/cjs/common/debounce.d.ts +7 -0
- package/cjs/common/debounce.js +76 -0
- package/cjs/common/debounce.js.map +1 -0
- package/cjs/common/deviation.d.ts +1 -0
- package/cjs/common/deviation.js +15 -0
- package/cjs/common/deviation.js.map +1 -0
- package/cjs/common/get.d.ts +3 -0
- package/cjs/common/get.js +20 -0
- package/cjs/common/get.js.map +1 -0
- package/cjs/common/getType.d.ts +2 -0
- package/cjs/common/getType.js +9 -0
- package/cjs/common/getType.js.map +1 -0
- package/cjs/common/has.d.ts +3 -0
- package/cjs/common/has.js +10 -0
- package/cjs/common/has.js.map +1 -0
- package/cjs/common/index.d.ts +56 -0
- package/cjs/common/index.js +485 -0
- package/cjs/common/index.js.map +1 -0
- package/cjs/common/interpolate.d.ts +4 -0
- package/cjs/common/interpolate.js +55 -0
- package/cjs/common/interpolate.js.map +1 -0
- package/cjs/common/isArray.d.ts +2 -0
- package/cjs/common/isArray.js +17 -0
- package/cjs/common/isArray.js.map +1 -0
- package/cjs/common/isArrayLike.d.ts +2 -0
- package/cjs/common/isArrayLike.js +12 -0
- package/cjs/common/isArrayLike.js.map +1 -0
- package/cjs/common/isBase64.d.ts +2 -0
- package/cjs/common/isBase64.js +10 -0
- package/cjs/common/isBase64.js.map +1 -0
- package/cjs/common/isBoolean.d.ts +2 -0
- package/cjs/common/isBoolean.js +17 -0
- package/cjs/common/isBoolean.js.map +1 -0
- package/cjs/common/isDate.d.ts +2 -0
- package/cjs/common/isDate.js +16 -0
- package/cjs/common/isDate.js.map +1 -0
- package/cjs/common/isEmpty.d.ts +2 -0
- package/cjs/common/isEmpty.js +26 -0
- package/cjs/common/isEmpty.js.map +1 -0
- package/cjs/common/isEqual.d.ts +1 -0
- package/cjs/common/isEqual.js +49 -0
- package/cjs/common/isEqual.js.map +1 -0
- package/cjs/common/isFunction.d.ts +2 -0
- package/cjs/common/isFunction.js +10 -0
- package/cjs/common/isFunction.js.map +1 -0
- package/cjs/common/isNil.d.ts +2 -0
- package/cjs/common/isNil.js +10 -0
- package/cjs/common/isNil.js.map +1 -0
- package/cjs/common/isNull.d.ts +2 -0
- package/cjs/common/isNull.js +10 -0
- package/cjs/common/isNull.js.map +1 -0
- package/cjs/common/isNumber.d.ts +2 -0
- package/cjs/common/isNumber.js +19 -0
- package/cjs/common/isNumber.js.map +1 -0
- package/cjs/common/isNumeric.d.ts +2 -0
- package/cjs/common/isNumeric.js +10 -0
- package/cjs/common/isNumeric.js.map +1 -0
- package/cjs/common/isObject.d.ts +2 -0
- package/cjs/common/isObject.js +12 -0
- package/cjs/common/isObject.js.map +1 -0
- package/cjs/common/isObjectLike.d.ts +2 -0
- package/cjs/common/isObjectLike.js +10 -0
- package/cjs/common/isObjectLike.js.map +1 -0
- package/cjs/common/isPlainObject.d.ts +2 -0
- package/cjs/common/isPlainObject.js +22 -0
- package/cjs/common/isPlainObject.js.map +1 -0
- package/cjs/common/isPrototype.d.ts +2 -0
- package/cjs/common/isPrototype.js +13 -0
- package/cjs/common/isPrototype.js.map +1 -0
- package/cjs/common/isRegExp.d.ts +2 -0
- package/cjs/common/isRegExp.js +16 -0
- package/cjs/common/isRegExp.js.map +1 -0
- package/cjs/common/isShallowEqual.d.ts +1 -0
- package/cjs/common/isShallowEqual.js +34 -0
- package/cjs/common/isShallowEqual.js.map +1 -0
- package/cjs/common/isString.d.ts +2 -0
- package/cjs/common/isString.js +19 -0
- package/cjs/common/isString.js.map +1 -0
- package/cjs/common/isType.d.ts +2 -0
- package/cjs/common/isType.js +10 -0
- package/cjs/common/isType.js.map +1 -0
- package/cjs/common/isUndefined.d.ts +2 -0
- package/cjs/common/isUndefined.js +10 -0
- package/cjs/common/isUndefined.js.map +1 -0
- package/cjs/common/isValid.d.ts +2 -0
- package/cjs/common/isValid.js +10 -0
- package/cjs/common/isValid.js.map +1 -0
- package/cjs/common/isValidNumber.d.ts +2 -0
- package/cjs/common/isValidNumber.js +17 -0
- package/cjs/common/isValidNumber.js.map +1 -0
- package/cjs/common/isValidUrl.d.ts +2 -0
- package/cjs/common/isValidUrl.js +10 -0
- package/cjs/common/isValidUrl.js.map +1 -0
- package/cjs/common/lowerFirst.d.ts +2 -0
- package/cjs/common/lowerFirst.js +12 -0
- package/cjs/common/lowerFirst.js.map +1 -0
- package/cjs/common/median.d.ts +1 -0
- package/cjs/common/median.js +13 -0
- package/cjs/common/median.js.map +1 -0
- package/cjs/common/merge.d.ts +1 -0
- package/cjs/common/merge.js +63 -0
- package/cjs/common/merge.js.map +1 -0
- package/cjs/common/mixin.d.ts +5 -0
- package/cjs/common/mixin.js +35 -0
- package/cjs/common/mixin.js.map +1 -0
- package/cjs/common/number.d.ts +3 -0
- package/cjs/common/number.js +23 -0
- package/cjs/common/number.js.map +1 -0
- package/cjs/common/pad.d.ts +2 -0
- package/cjs/common/pad.js +17 -0
- package/cjs/common/pad.js.map +1 -0
- package/cjs/common/pick.d.ts +1 -0
- package/cjs/common/pick.js +24 -0
- package/cjs/common/pick.js.map +1 -0
- package/cjs/common/pickWithout.d.ts +1 -0
- package/cjs/common/pickWithout.js +28 -0
- package/cjs/common/pickWithout.js.map +1 -0
- package/cjs/common/quantileSorted.d.ts +1 -0
- package/cjs/common/quantileSorted.js +19 -0
- package/cjs/common/quantileSorted.js.map +1 -0
- package/cjs/common/range.d.ts +1 -0
- package/cjs/common/range.js +24 -0
- package/cjs/common/range.js.map +1 -0
- package/cjs/common/throttle.d.ts +5 -0
- package/cjs/common/throttle.js +27 -0
- package/cjs/common/throttle.js.map +1 -0
- package/cjs/common/tickStep.d.ts +1 -0
- package/cjs/common/tickStep.js +18 -0
- package/cjs/common/tickStep.js.map +1 -0
- package/cjs/common/toDate.d.ts +2 -0
- package/cjs/common/toDate.js +28 -0
- package/cjs/common/toDate.js.map +1 -0
- package/cjs/common/toNumber.d.ts +1 -0
- package/cjs/common/toNumber.js +10 -0
- package/cjs/common/toNumber.js.map +1 -0
- package/cjs/common/toValidNumber.d.ts +1 -0
- package/cjs/common/toValidNumber.js +22 -0
- package/cjs/common/toValidNumber.js.map +1 -0
- package/cjs/common/truncate.d.ts +2 -0
- package/cjs/common/truncate.js +19 -0
- package/cjs/common/truncate.js.map +1 -0
- package/cjs/common/upperFirst.d.ts +2 -0
- package/cjs/common/upperFirst.js +12 -0
- package/cjs/common/upperFirst.js.map +1 -0
- package/cjs/common/uuid.d.ts +2 -0
- package/cjs/common/uuid.js +19 -0
- package/cjs/common/uuid.js.map +1 -0
- package/cjs/common/variance.d.ts +1 -0
- package/cjs/common/variance.js +17 -0
- package/cjs/common/variance.js.map +1 -0
- package/cjs/data-structure/bounds.d.ts +81 -0
- package/cjs/data-structure/bounds.js +139 -0
- package/cjs/data-structure/bounds.js.map +1 -0
- package/cjs/data-structure/hashTable.d.ts +35 -0
- package/cjs/data-structure/hashTable.js +114 -0
- package/cjs/data-structure/hashTable.js.map +1 -0
- package/cjs/data-structure/index.d.ts +4 -0
- package/cjs/data-structure/index.js +22 -0
- package/cjs/data-structure/index.js.map +1 -0
- package/cjs/data-structure/matrix.d.ts +80 -0
- package/cjs/data-structure/matrix.js +113 -0
- package/cjs/data-structure/matrix.js.map +1 -0
- package/cjs/data-structure/point.d.ts +62 -0
- package/cjs/data-structure/point.js +81 -0
- package/cjs/data-structure/point.js.map +1 -0
- package/cjs/dom.d.ts +10 -0
- package/cjs/dom.js +86 -0
- package/cjs/dom.js.map +1 -0
- package/cjs/geo/index.d.ts +2 -0
- package/cjs/geo/index.js +21 -0
- package/cjs/geo/index.js.map +1 -0
- package/cjs/geo/interface.d.ts +1 -0
- package/cjs/geo/interface.js +6 -0
- package/cjs/geo/interface.js.map +1 -0
- package/cjs/geo/invariant.d.ts +9 -0
- package/cjs/geo/invariant.js +45 -0
- package/cjs/geo/invariant.js.map +1 -0
- package/cjs/graphics/algorithm/aabb.d.ts +6 -0
- package/cjs/graphics/algorithm/aabb.js +58 -0
- package/cjs/graphics/algorithm/aabb.js.map +1 -0
- package/cjs/graphics/algorithm/index.d.ts +3 -0
- package/cjs/graphics/algorithm/index.js +22 -0
- package/cjs/graphics/algorithm/index.js.map +1 -0
- package/cjs/graphics/algorithm/interface.d.ts +20 -0
- package/cjs/graphics/algorithm/interface.js +6 -0
- package/cjs/graphics/algorithm/interface.js.map +1 -0
- package/cjs/graphics/algorithm/intersect.d.ts +25 -0
- package/cjs/graphics/algorithm/intersect.js +143 -0
- package/cjs/graphics/algorithm/intersect.js.map +1 -0
- package/cjs/graphics/algorithm/obb.d.ts +5 -0
- package/cjs/graphics/algorithm/obb.js +80 -0
- package/cjs/graphics/algorithm/obb.js.map +1 -0
- package/cjs/graphics/graph-util.d.ts +23 -0
- package/cjs/graphics/graph-util.js +47 -0
- package/cjs/graphics/graph-util.js.map +1 -0
- package/cjs/graphics/image.d.ts +2 -0
- package/cjs/graphics/image.js +18 -0
- package/cjs/graphics/image.js.map +1 -0
- package/cjs/graphics/index.d.ts +5 -0
- package/cjs/graphics/index.js +23 -0
- package/cjs/graphics/index.js.map +1 -0
- package/cjs/graphics/polygon.d.ts +5 -0
- package/cjs/graphics/polygon.js +54 -0
- package/cjs/graphics/polygon.js.map +1 -0
- package/cjs/graphics/text/index.d.ts +2 -0
- package/cjs/graphics/text/index.js +39 -0
- package/cjs/graphics/text/index.js.map +1 -0
- package/cjs/graphics/text/measure/index.d.ts +4 -0
- package/cjs/graphics/text/measure/index.js +22 -0
- package/cjs/graphics/text/measure/index.js.map +1 -0
- package/cjs/graphics/text/measure/interface.d.ts +31 -0
- package/cjs/graphics/text/measure/interface.js +6 -0
- package/cjs/graphics/text/measure/interface.js.map +1 -0
- package/cjs/graphics/text/measure/test.d.ts +14 -0
- package/cjs/graphics/text/measure/test.js +67 -0
- package/cjs/graphics/text/measure/test.js.map +1 -0
- package/cjs/graphics/text/measure/textMeasure.d.ts +38 -0
- package/cjs/graphics/text/measure/textMeasure.js +183 -0
- package/cjs/graphics/text/measure/textMeasure.js.map +1 -0
- package/cjs/graphics/text/measure/util.d.ts +2 -0
- package/cjs/graphics/text/measure/util.js +11 -0
- package/cjs/graphics/text/measure/util.js.map +1 -0
- package/cjs/graphics/text/stringWidth.d.ts +2 -0
- package/cjs/graphics/text/stringWidth.js +49 -0
- package/cjs/graphics/text/stringWidth.js.map +1 -0
- package/cjs/index.d.ts +15 -0
- package/cjs/index.js +47 -0
- package/cjs/index.js.map +1 -0
- package/cjs/logger.d.ts +12 -0
- package/cjs/logger.js +36 -0
- package/cjs/logger.js.map +1 -0
- package/cjs/lru.d.ts +25 -0
- package/cjs/lru.js +43 -0
- package/cjs/lru.js.map +1 -0
- package/cjs/math.d.ts +66 -0
- package/cjs/math.js +57 -0
- package/cjs/math.js.map +1 -0
- package/cjs/padding.d.ts +7 -0
- package/cjs/padding.js +41 -0
- package/cjs/padding.js.map +1 -0
- package/cjs/time/formatUtils.d.ts +17 -0
- package/cjs/time/formatUtils.js +95 -0
- package/cjs/time/formatUtils.js.map +1 -0
- package/cjs/time/index.d.ts +2 -0
- package/cjs/time/index.js +21 -0
- package/cjs/time/index.js.map +1 -0
- package/cjs/time/interval.d.ts +77 -0
- package/cjs/time/interval.js +324 -0
- package/cjs/time/interval.js.map +1 -0
- package/cjs/type.d.ts +5 -0
- package/cjs/type.js +6 -0
- package/cjs/type.js.map +1 -0
- package/dist/visactor_vutils.js +1 -0
- package/dist/visactor_vutils.min.js +1 -0
- package/es/angle.d.ts +12 -0
- package/es/angle.js +31 -0
- package/es/angle.js.map +1 -0
- package/es/color/Color.d.ts +181 -0
- package/es/color/Color.js +283 -0
- package/es/color/Color.js.map +1 -0
- package/es/color/hexToRgb.d.ts +1 -0
- package/es/color/hexToRgb.js +7 -0
- package/es/color/hexToRgb.js.map +1 -0
- package/es/color/hslToRgb.d.ts +5 -0
- package/es/color/hslToRgb.js +15 -0
- package/es/color/hslToRgb.js.map +1 -0
- package/es/color/index.d.ts +6 -0
- package/es/color/index.js +12 -0
- package/es/color/index.js.map +1 -0
- package/es/color/interpolate.d.ts +2 -0
- package/es/color/interpolate.js +10 -0
- package/es/color/interpolate.js.map +1 -0
- package/es/color/rgbToHex.d.ts +1 -0
- package/es/color/rgbToHex.js +4 -0
- package/es/color/rgbToHex.js.map +1 -0
- package/es/color/rgbToHsl.d.ts +5 -0
- package/es/color/rgbToHsl.js +13 -0
- package/es/color/rgbToHsl.js.map +1 -0
- package/es/common/array.d.ts +9 -0
- package/es/common/array.js +50 -0
- package/es/common/array.js.map +1 -0
- package/es/common/ascending.d.ts +1 -0
- package/es/common/ascending.js +4 -0
- package/es/common/ascending.js.map +1 -0
- package/es/common/bisect.d.ts +1 -0
- package/es/common/bisect.js +12 -0
- package/es/common/bisect.js.map +1 -0
- package/es/common/clamp.d.ts +2 -0
- package/es/common/clamp.js +6 -0
- package/es/common/clamp.js.map +1 -0
- package/es/common/clampRange.d.ts +2 -0
- package/es/common/clampRange.js +10 -0
- package/es/common/clampRange.js.map +1 -0
- package/es/common/clamper.d.ts +1 -0
- package/es/common/clamper.js +5 -0
- package/es/common/clamper.js.map +1 -0
- package/es/common/clone.d.ts +1 -0
- package/es/common/clone.js +32 -0
- package/es/common/clone.js.map +1 -0
- package/es/common/cloneDeep.d.ts +1 -0
- package/es/common/cloneDeep.js +26 -0
- package/es/common/cloneDeep.js.map +1 -0
- package/es/common/constant.d.ts +2 -0
- package/es/common/constant.js +6 -0
- package/es/common/constant.js.map +1 -0
- package/es/common/debounce.d.ts +7 -0
- package/es/common/debounce.js +68 -0
- package/es/common/debounce.js.map +1 -0
- package/es/common/deviation.d.ts +1 -0
- package/es/common/deviation.js +7 -0
- package/es/common/deviation.js.map +1 -0
- package/es/common/get.d.ts +3 -0
- package/es/common/get.js +10 -0
- package/es/common/get.js.map +1 -0
- package/es/common/getType.d.ts +2 -0
- package/es/common/getType.js +3 -0
- package/es/common/getType.js.map +1 -0
- package/es/common/has.d.ts +3 -0
- package/es/common/has.js +4 -0
- package/es/common/has.js.map +1 -0
- package/es/common/index.d.ts +56 -0
- package/es/common/index.js +112 -0
- package/es/common/index.js.map +1 -0
- package/es/common/interpolate.d.ts +4 -0
- package/es/common/interpolate.js +45 -0
- package/es/common/interpolate.js.map +1 -0
- package/es/common/isArray.d.ts +2 -0
- package/es/common/isArray.js +6 -0
- package/es/common/isArray.js.map +1 -0
- package/es/common/isArrayLike.d.ts +2 -0
- package/es/common/isArrayLike.js +6 -0
- package/es/common/isArrayLike.js.map +1 -0
- package/es/common/isBase64.d.ts +2 -0
- package/es/common/isBase64.js +4 -0
- package/es/common/isBase64.js.map +1 -0
- package/es/common/isBoolean.d.ts +2 -0
- package/es/common/isBoolean.js +6 -0
- package/es/common/isBoolean.js.map +1 -0
- package/es/common/isDate.d.ts +2 -0
- package/es/common/isDate.js +6 -0
- package/es/common/isDate.js.map +1 -0
- package/es/common/isEmpty.d.ts +2 -0
- package/es/common/isEmpty.js +22 -0
- package/es/common/isEmpty.js.map +1 -0
- package/es/common/isEqual.d.ts +1 -0
- package/es/common/isEqual.js +39 -0
- package/es/common/isEqual.js.map +1 -0
- package/es/common/isFunction.d.ts +2 -0
- package/es/common/isFunction.js +4 -0
- package/es/common/isFunction.js.map +1 -0
- package/es/common/isNil.d.ts +2 -0
- package/es/common/isNil.js +4 -0
- package/es/common/isNil.js.map +1 -0
- package/es/common/isNull.d.ts +2 -0
- package/es/common/isNull.js +4 -0
- package/es/common/isNull.js.map +1 -0
- package/es/common/isNumber.d.ts +2 -0
- package/es/common/isNumber.js +9 -0
- package/es/common/isNumber.js.map +1 -0
- package/es/common/isNumeric.d.ts +2 -0
- package/es/common/isNumeric.js +4 -0
- package/es/common/isNumeric.js.map +1 -0
- package/es/common/isObject.d.ts +2 -0
- package/es/common/isObject.js +6 -0
- package/es/common/isObject.js.map +1 -0
- package/es/common/isObjectLike.d.ts +2 -0
- package/es/common/isObjectLike.js +4 -0
- package/es/common/isObjectLike.js.map +1 -0
- package/es/common/isPlainObject.d.ts +2 -0
- package/es/common/isPlainObject.js +14 -0
- package/es/common/isPlainObject.js.map +1 -0
- package/es/common/isPrototype.d.ts +2 -0
- package/es/common/isPrototype.js +7 -0
- package/es/common/isPrototype.js.map +1 -0
- package/es/common/isRegExp.d.ts +2 -0
- package/es/common/isRegExp.js +6 -0
- package/es/common/isRegExp.js.map +1 -0
- package/es/common/isShallowEqual.d.ts +1 -0
- package/es/common/isShallowEqual.js +22 -0
- package/es/common/isShallowEqual.js.map +1 -0
- package/es/common/isString.d.ts +2 -0
- package/es/common/isString.js +9 -0
- package/es/common/isString.js.map +1 -0
- package/es/common/isType.d.ts +2 -0
- package/es/common/isType.js +4 -0
- package/es/common/isType.js.map +1 -0
- package/es/common/isUndefined.d.ts +2 -0
- package/es/common/isUndefined.js +4 -0
- package/es/common/isUndefined.js.map +1 -0
- package/es/common/isValid.d.ts +2 -0
- package/es/common/isValid.js +4 -0
- package/es/common/isValid.js.map +1 -0
- package/es/common/isValidNumber.d.ts +2 -0
- package/es/common/isValidNumber.js +6 -0
- package/es/common/isValidNumber.js.map +1 -0
- package/es/common/isValidUrl.d.ts +2 -0
- package/es/common/isValidUrl.js +4 -0
- package/es/common/isValidUrl.js.map +1 -0
- package/es/common/lowerFirst.d.ts +2 -0
- package/es/common/lowerFirst.js +6 -0
- package/es/common/lowerFirst.js.map +1 -0
- package/es/common/median.d.ts +1 -0
- package/es/common/median.js +9 -0
- package/es/common/median.js.map +1 -0
- package/es/common/merge.d.ts +1 -0
- package/es/common/merge.js +54 -0
- package/es/common/merge.js.map +1 -0
- package/es/common/mixin.d.ts +5 -0
- package/es/common/mixin.js +28 -0
- package/es/common/mixin.js.map +1 -0
- package/es/common/number.d.ts +3 -0
- package/es/common/number.js +15 -0
- package/es/common/number.js.map +1 -0
- package/es/common/pad.d.ts +2 -0
- package/es/common/pad.js +11 -0
- package/es/common/pad.js.map +1 -0
- package/es/common/pick.d.ts +1 -0
- package/es/common/pick.js +12 -0
- package/es/common/pick.js.map +1 -0
- package/es/common/pickWithout.d.ts +1 -0
- package/es/common/pickWithout.js +16 -0
- package/es/common/pickWithout.js.map +1 -0
- package/es/common/quantileSorted.d.ts +1 -0
- package/es/common/quantileSorted.js +11 -0
- package/es/common/quantileSorted.js.map +1 -0
- package/es/common/range.d.ts +1 -0
- package/es/common/range.js +10 -0
- package/es/common/range.js.map +1 -0
- package/es/common/throttle.d.ts +5 -0
- package/es/common/throttle.js +17 -0
- package/es/common/throttle.js.map +1 -0
- package/es/common/tickStep.d.ts +1 -0
- package/es/common/tickStep.js +10 -0
- package/es/common/tickStep.js.map +1 -0
- package/es/common/toDate.d.ts +2 -0
- package/es/common/toDate.js +18 -0
- package/es/common/toDate.js.map +1 -0
- package/es/common/toNumber.d.ts +1 -0
- package/es/common/toNumber.js +4 -0
- package/es/common/toNumber.js.map +1 -0
- package/es/common/toValidNumber.d.ts +1 -0
- package/es/common/toValidNumber.js +8 -0
- package/es/common/toValidNumber.js.map +1 -0
- package/es/common/truncate.d.ts +2 -0
- package/es/common/truncate.js +9 -0
- package/es/common/truncate.js.map +1 -0
- package/es/common/upperFirst.d.ts +2 -0
- package/es/common/upperFirst.js +6 -0
- package/es/common/upperFirst.js.map +1 -0
- package/es/common/uuid.d.ts +2 -0
- package/es/common/uuid.js +13 -0
- package/es/common/uuid.js.map +1 -0
- package/es/common/variance.d.ts +1 -0
- package/es/common/variance.js +11 -0
- package/es/common/variance.js.map +1 -0
- package/es/data-structure/bounds.d.ts +81 -0
- package/es/data-structure/bounds.js +127 -0
- package/es/data-structure/bounds.js.map +1 -0
- package/es/data-structure/hashTable.d.ts +35 -0
- package/es/data-structure/hashTable.js +104 -0
- package/es/data-structure/hashTable.js.map +1 -0
- package/es/data-structure/index.d.ts +4 -0
- package/es/data-structure/index.js +8 -0
- package/es/data-structure/index.js.map +1 -0
- package/es/data-structure/matrix.d.ts +80 -0
- package/es/data-structure/matrix.js +106 -0
- package/es/data-structure/matrix.js.map +1 -0
- package/es/data-structure/point.d.ts +62 -0
- package/es/data-structure/point.js +65 -0
- package/es/data-structure/point.js.map +1 -0
- package/es/dom.d.ts +10 -0
- package/es/dom.js +75 -0
- package/es/dom.js.map +1 -0
- package/es/geo/index.d.ts +2 -0
- package/es/geo/index.js +4 -0
- package/es/geo/index.js.map +1 -0
- package/es/geo/interface.d.ts +1 -0
- package/es/geo/interface.js +2 -0
- package/es/geo/interface.js.map +1 -0
- package/es/geo/invariant.d.ts +9 -0
- package/es/geo/invariant.js +40 -0
- package/es/geo/invariant.js.map +1 -0
- package/es/graphics/algorithm/aabb.d.ts +6 -0
- package/es/graphics/algorithm/aabb.js +49 -0
- package/es/graphics/algorithm/aabb.js.map +1 -0
- package/es/graphics/algorithm/index.d.ts +3 -0
- package/es/graphics/algorithm/index.js +6 -0
- package/es/graphics/algorithm/index.js.map +1 -0
- package/es/graphics/algorithm/interface.d.ts +20 -0
- package/es/graphics/algorithm/interface.js +2 -0
- package/es/graphics/algorithm/interface.js.map +1 -0
- package/es/graphics/algorithm/intersect.d.ts +25 -0
- package/es/graphics/algorithm/intersect.js +135 -0
- package/es/graphics/algorithm/intersect.js.map +1 -0
- package/es/graphics/algorithm/obb.d.ts +5 -0
- package/es/graphics/algorithm/obb.js +68 -0
- package/es/graphics/algorithm/obb.js.map +1 -0
- package/es/graphics/graph-util.d.ts +23 -0
- package/es/graphics/graph-util.js +39 -0
- package/es/graphics/graph-util.js.map +1 -0
- package/es/graphics/image.d.ts +2 -0
- package/es/graphics/image.js +12 -0
- package/es/graphics/image.js.map +1 -0
- package/es/graphics/index.d.ts +5 -0
- package/es/graphics/index.js +10 -0
- package/es/graphics/index.js.map +1 -0
- package/es/graphics/polygon.d.ts +5 -0
- package/es/graphics/polygon.js +47 -0
- package/es/graphics/polygon.js.map +1 -0
- package/es/graphics/text/index.d.ts +2 -0
- package/es/graphics/text/index.js +4 -0
- package/es/graphics/text/index.js.map +1 -0
- package/es/graphics/text/measure/index.d.ts +4 -0
- package/es/graphics/text/measure/index.js +8 -0
- package/es/graphics/text/measure/index.js.map +1 -0
- package/es/graphics/text/measure/interface.d.ts +31 -0
- package/es/graphics/text/measure/interface.js +2 -0
- package/es/graphics/text/measure/interface.js.map +1 -0
- package/es/graphics/text/measure/test.d.ts +14 -0
- package/es/graphics/text/measure/test.js +65 -0
- package/es/graphics/text/measure/test.js.map +1 -0
- package/es/graphics/text/measure/textMeasure.d.ts +38 -0
- package/es/graphics/text/measure/textMeasure.js +181 -0
- package/es/graphics/text/measure/textMeasure.js.map +1 -0
- package/es/graphics/text/measure/util.d.ts +2 -0
- package/es/graphics/text/measure/util.js +5 -0
- package/es/graphics/text/measure/util.js.map +1 -0
- package/es/graphics/text/stringWidth.d.ts +2 -0
- package/es/graphics/text/stringWidth.js +43 -0
- package/es/graphics/text/stringWidth.js.map +1 -0
- package/es/index.d.ts +15 -0
- package/es/index.js +30 -0
- package/es/index.js.map +1 -0
- package/es/logger.d.ts +12 -0
- package/es/logger.js +38 -0
- package/es/logger.js.map +1 -0
- package/es/lru.d.ts +25 -0
- package/es/lru.js +36 -0
- package/es/lru.js.map +1 -0
- package/es/math.d.ts +66 -0
- package/es/math.js +76 -0
- package/es/math.js.map +1 -0
- package/es/padding.d.ts +7 -0
- package/es/padding.js +31 -0
- package/es/padding.js.map +1 -0
- package/es/time/formatUtils.d.ts +17 -0
- package/es/time/formatUtils.js +72 -0
- package/es/time/formatUtils.js.map +1 -0
- package/es/time/index.d.ts +2 -0
- package/es/time/index.js +4 -0
- package/es/time/index.js.map +1 -0
- package/es/time/interval.d.ts +77 -0
- package/es/time/interval.js +227 -0
- package/es/time/interval.js.map +1 -0
- package/es/type.d.ts +5 -0
- package/es/type.js +2 -0
- package/es/type.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { IBoundsLike } from '../../data-structure';
|
|
2
|
+
import type { Point } from './interface';
|
|
3
|
+
export declare function getAABBFromPoints(points: Point[]): IBoundsLike;
|
|
4
|
+
export declare function pointInAABB(point: Point, aabb: IBoundsLike): boolean;
|
|
5
|
+
export declare function unionAABB(bounds1: IBoundsLike, bounds2: IBoundsLike, buffer?: number, format?: boolean): [IBoundsLike, IBoundsLike?];
|
|
6
|
+
export declare function mergeAABB(boundsList: IBoundsLike[]): IBoundsLike[];
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.mergeAABB = exports.unionAABB = exports.pointInAABB = exports.getAABBFromPoints = void 0;
|
|
6
|
+
|
|
7
|
+
const intersect_1 = require("./intersect");
|
|
8
|
+
|
|
9
|
+
let x1, y1, x2, y2;
|
|
10
|
+
|
|
11
|
+
function getAABBFromPoints(points) {
|
|
12
|
+
return x1 = 1 / 0, y1 = 1 / 0, x2 = -1 / 0, y2 = -1 / 0, points.forEach((point => {
|
|
13
|
+
x1 > point.x && (x1 = point.x), x2 < point.x && (x2 = point.x), y1 > point.y && (y1 = point.y),
|
|
14
|
+
y2 < point.y && (y2 = point.y);
|
|
15
|
+
})), {
|
|
16
|
+
x1: x1,
|
|
17
|
+
y1: y1,
|
|
18
|
+
x2: x2,
|
|
19
|
+
y2: y2
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function pointInAABB(point, aabb) {
|
|
24
|
+
return (0, intersect_1.pointInRect)(point, aabb, !1);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function unionAABB(bounds1, bounds2, buffer = 3, format = !1) {
|
|
28
|
+
let x11 = bounds1.x1, x12 = bounds1.x2, y11 = bounds1.y1, y12 = bounds1.y2, x21 = bounds2.x1, x22 = bounds2.x2, y21 = bounds2.y1, y22 = bounds2.y2;
|
|
29
|
+
if (format) {
|
|
30
|
+
let temp;
|
|
31
|
+
x11 > x12 && (temp = x11, x11 = x12, x12 = temp), y11 > y12 && (temp = y11, y11 = y12,
|
|
32
|
+
y12 = temp), x21 > x22 && (temp = x21, x21 = x22, x22 = temp), y21 > y22 && (temp = y21,
|
|
33
|
+
y21 = y22, y22 = temp);
|
|
34
|
+
}
|
|
35
|
+
if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) return [ bounds1, bounds2 ];
|
|
36
|
+
const area1 = (x12 - x11 + 2 * buffer) * (y12 - y11 + 2 * buffer), area2 = (x22 - x21 + 2 * buffer) * (y22 - y21 + 2 * buffer), x1 = Math.min(x11, x21), y1 = Math.min(y11, y21), x2 = Math.max(x12, x22), y2 = Math.max(y12, y22);
|
|
37
|
+
return area1 + area2 > (x2 - x1) * (y2 - y1) ? [ {
|
|
38
|
+
x1: x1,
|
|
39
|
+
x2: x2,
|
|
40
|
+
y1: y1,
|
|
41
|
+
y2: y2
|
|
42
|
+
} ] : [ bounds1, bounds2 ];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function mergeAABB(boundsList) {
|
|
46
|
+
const nextList = [];
|
|
47
|
+
return function _merge(baseBound, list) {
|
|
48
|
+
const l = [];
|
|
49
|
+
list.forEach((b => {
|
|
50
|
+
let arr;
|
|
51
|
+
(arr = unionAABB(baseBound, b)).length > 1 ? l.push(b) : baseBound = arr[0];
|
|
52
|
+
})), nextList.push(baseBound), l.length && _merge(l[0], l.slice(1));
|
|
53
|
+
}(boundsList[0], boundsList.slice(1)), nextList;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
exports.getAABBFromPoints = getAABBFromPoints, exports.pointInAABB = pointInAABB,
|
|
57
|
+
exports.unionAABB = unionAABB, exports.mergeAABB = mergeAABB;
|
|
58
|
+
//# sourceMappingURL=aabb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphics/algorithm/aabb.ts"],"names":[],"mappings":"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","file":"aabb.js","sourcesContent":["import type { IBoundsLike } from '../../data-structure';\nimport type { Point } from './interface';\nimport { pointInRect } from './intersect';\n\nlet x1: number;\nlet y1: number;\nlet x2: number;\nlet y2: number;\nexport function getAABBFromPoints(points: Point[]): IBoundsLike {\n (x1 = Infinity), (y1 = Infinity), (x2 = -Infinity), (y2 = -Infinity);\n // todo 有优化空间\n points.forEach(point => {\n if (x1 > point.x) {\n x1 = point.x;\n }\n if (x2 < point.x) {\n x2 = point.x;\n }\n if (y1 > point.y) {\n y1 = point.y;\n }\n if (y2 < point.y) {\n y2 = point.y;\n }\n });\n\n return { x1, y1, x2, y2 };\n}\n\nexport function pointInAABB(point: Point, aabb: IBoundsLike): boolean {\n return pointInRect(point, aabb, false);\n}\n\nexport function unionAABB(\n bounds1: IBoundsLike,\n bounds2: IBoundsLike,\n buffer = 3,\n format = false\n): [IBoundsLike, IBoundsLike?] {\n let x11 = bounds1.x1;\n let x12 = bounds1.x2;\n let y11 = bounds1.y1;\n let y12 = bounds1.y2;\n let x21 = bounds2.x1;\n let x22 = bounds2.x2;\n let y21 = bounds2.y1;\n let y22 = bounds2.y2;\n if (format) {\n let temp;\n if (x11 > x12) {\n temp = x11;\n x11 = x12;\n x12 = temp;\n }\n if (y11 > y12) {\n temp = y11;\n y11 = y12;\n y12 = temp;\n }\n if (x21 > x22) {\n temp = x21;\n x21 = x22;\n x22 = temp;\n }\n if (y21 > y22) {\n temp = y21;\n y21 = y22;\n y22 = temp;\n }\n }\n // 不相交直接跳过\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return [bounds1, bounds2];\n }\n\n const area1 = (x12 - x11 + buffer * 2) * (y12 - y11 + buffer * 2);\n const area2 = (x22 - x21 + buffer * 2) * (y22 - y21 + buffer * 2);\n const x1 = Math.min(x11, x21);\n const y1 = Math.min(y11, y21);\n const x2 = Math.max(x12, x22);\n const y2 = Math.max(y12, y22);\n const unionArea = (x2 - x1) * (y2 - y1);\n if (area1 + area2 > unionArea) {\n return [{ x1, x2, y1, y2 }];\n }\n return [bounds1, bounds2];\n}\n\nexport function mergeAABB(boundsList: IBoundsLike[]) {\n const nextList: IBoundsLike[] = [];\n function _merge(baseBound: IBoundsLike, list: IBoundsLike[]) {\n const l: IBoundsLike[] = [];\n list.forEach(b => {\n let arr: [IBoundsLike, IBoundsLike?];\n // 相交\n if ((arr = unionAABB(baseBound, b)).length > 1) {\n l.push(b);\n return;\n }\n baseBound = arr[0];\n });\n nextList.push(baseBound);\n l.length && _merge(l[0], l.slice(1));\n }\n _merge(boundsList[0], boundsList.slice(1));\n return nextList;\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
+
void 0 === k2 && (k2 = k);
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
+
enumerable: !0,
|
|
8
|
+
get: function() {
|
|
9
|
+
return m[k];
|
|
10
|
+
}
|
|
11
|
+
}), Object.defineProperty(o, k2, desc);
|
|
12
|
+
} : function(o, m, k, k2) {
|
|
13
|
+
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
+
}), __exportStar = this && this.__exportStar || function(m, exports) {
|
|
15
|
+
for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
Object.defineProperty(exports, "__esModule", {
|
|
19
|
+
value: !0
|
|
20
|
+
}), __exportStar(require("./intersect"), exports), __exportStar(require("./aabb"), exports),
|
|
21
|
+
__exportStar(require("./obb"), exports);
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphics/algorithm/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,yCAAuB;AACvB,wCAAsB","file":"index.js","sourcesContent":["export * from './intersect';\nexport * from './aabb';\nexport * from './obb';\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface Bound {
|
|
2
|
+
x1: number;
|
|
3
|
+
y1: number;
|
|
4
|
+
x2: number;
|
|
5
|
+
y2: number;
|
|
6
|
+
}
|
|
7
|
+
export interface OBB {
|
|
8
|
+
point1: Point;
|
|
9
|
+
point2: Point;
|
|
10
|
+
point3: Point;
|
|
11
|
+
point4: Point;
|
|
12
|
+
width: number;
|
|
13
|
+
height: number;
|
|
14
|
+
left: number;
|
|
15
|
+
top: number;
|
|
16
|
+
}
|
|
17
|
+
export interface Point {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphics/algorithm/interface.ts"],"names":[],"mappings":"","file":"interface.js","sourcesContent":["export interface Bound {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface OBB {\n point1: Point;\n point2: Point;\n point3: Point;\n point4: Point;\n width: number;\n height: number;\n left: number;\n top: number;\n}\n\nexport interface Point {\n x: number;\n y: number;\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IBoundsLike } from '../../data-structure';
|
|
2
|
+
import type { vec2 } from '../../math';
|
|
3
|
+
export declare function isIntersect(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean;
|
|
4
|
+
export declare function getIntersectPoint(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean | vec2;
|
|
5
|
+
export declare function getRectIntersect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): IBoundsLike | null;
|
|
6
|
+
export declare enum InnerBBox {
|
|
7
|
+
NONE = 0,
|
|
8
|
+
BBOX1 = 1,
|
|
9
|
+
BBOX2 = 2
|
|
10
|
+
}
|
|
11
|
+
export declare function rectInsideAnotherRect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): InnerBBox;
|
|
12
|
+
export declare function isRectIntersect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): boolean;
|
|
13
|
+
export declare function pointInRect(point: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
}, bbox: IBoundsLike | null, format: boolean): boolean;
|
|
17
|
+
interface RotateBound extends IBoundsLike {
|
|
18
|
+
angle: number;
|
|
19
|
+
rotateCenter?: {
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function isRotateAABBIntersect(box1: RotateBound, box2: RotateBound, isDeg?: boolean, ctx?: CanvasRenderingContext2D): boolean;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.isRotateAABBIntersect = exports.pointInRect = exports.isRectIntersect = exports.rectInsideAnotherRect = exports.InnerBBox = exports.getRectIntersect = exports.getIntersectPoint = exports.isIntersect = void 0;
|
|
6
|
+
|
|
7
|
+
const math_1 = require("../../math");
|
|
8
|
+
|
|
9
|
+
function sub(out, v1, v2) {
|
|
10
|
+
out[0] = v1[0] - v2[0], out[1] = v1[1] - v2[1];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let x11, x12, y11, y12, x21, x22, y21, y22;
|
|
14
|
+
|
|
15
|
+
function isIntersect(left1, right1, left2, right2) {
|
|
16
|
+
let _temp, min1 = left1[0], max1 = right1[0], min2 = left2[0], max2 = right2[0];
|
|
17
|
+
return max1 < min1 && (_temp = max1, max1 = min1, min1 = _temp), max2 < min2 && (_temp = max2,
|
|
18
|
+
max2 = min2, min2 = _temp), !(max1 < min2 || max2 < min1) && (min1 = left1[1], max1 = right1[1],
|
|
19
|
+
min2 = left2[1], max2 = right2[1], max1 < min1 && (_temp = max1, max1 = min1, min1 = _temp),
|
|
20
|
+
max2 < min2 && (_temp = max2, max2 = min2, min2 = _temp), !(max1 < min2 || max2 < min1));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function getIntersectPoint(left1, right1, left2, right2) {
|
|
24
|
+
if (!isIntersect(left1, right1, left2, right2)) return !1;
|
|
25
|
+
const dir1 = [ 0, 0 ], dir2 = [ 0, 0 ], tempVec = [ 0, 0 ];
|
|
26
|
+
if (sub(dir1, right1, left1), sub(dir2, right2, left2), (0, math_1.fuzzyEqualVec)(dir1, dir2)) return !0;
|
|
27
|
+
sub(tempVec, left2, left1);
|
|
28
|
+
const t = (0, math_1.crossProduct)(tempVec, dir2) / (0, math_1.crossProduct)(dir1, dir2);
|
|
29
|
+
return t >= 0 && t <= 1 && [ left1[0] + dir1[0] * t, left1[1] + dir1[1] * t ];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function getRectIntersect(bbox1, bbox2, format) {
|
|
33
|
+
return null === bbox1 ? bbox2 : null === bbox2 ? bbox1 : (x11 = bbox1.x1, x12 = bbox1.x2,
|
|
34
|
+
y11 = bbox1.y1, y12 = bbox1.y2, x21 = bbox2.x1, x22 = bbox2.x2, y21 = bbox2.y1,
|
|
35
|
+
y22 = bbox2.y2, format && (x11 > x12 && ([x11, x12] = [ x12, x11 ]), y11 > y12 && ([y11, y12] = [ y12, y11 ]),
|
|
36
|
+
x21 > x22 && ([x21, x22] = [ x22, x21 ]), y21 > y22 && ([y21, y22] = [ y22, y21 ])),
|
|
37
|
+
x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21 ? {
|
|
38
|
+
x1: 0,
|
|
39
|
+
y1: 0,
|
|
40
|
+
x2: 0,
|
|
41
|
+
y2: 0
|
|
42
|
+
} : {
|
|
43
|
+
x1: Math.max(x11, x21),
|
|
44
|
+
y1: Math.max(y11, y21),
|
|
45
|
+
x2: Math.min(x12, x22),
|
|
46
|
+
y2: Math.min(y12, y22)
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
var InnerBBox;
|
|
51
|
+
|
|
52
|
+
function rectInsideAnotherRect(bbox1, bbox2, format) {
|
|
53
|
+
return bbox1 && bbox2 ? (x11 = bbox1.x1, x12 = bbox1.x2, y11 = bbox1.y1, y12 = bbox1.y2,
|
|
54
|
+
x21 = bbox2.x1, x22 = bbox2.x2, y21 = bbox2.y1, y22 = bbox2.y2, format && (x11 > x12 && ([x11, x12] = [ x12, x11 ]),
|
|
55
|
+
y11 > y12 && ([y11, y12] = [ y12, y11 ]), x21 > x22 && ([x21, x22] = [ x22, x21 ]),
|
|
56
|
+
y21 > y22 && ([y21, y22] = [ y22, y21 ])), x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22 ? InnerBBox.BBOX1 : x21 > x11 && x22 < x12 && y21 > y11 && y22 < y12 ? InnerBBox.BBOX2 : InnerBBox.NONE) : InnerBBox.NONE;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function isRectIntersect(bbox1, bbox2, format) {
|
|
60
|
+
return !bbox1 || !bbox2 || (format ? (x11 = bbox1.x1, x12 = bbox1.x2, y11 = bbox1.y1,
|
|
61
|
+
y12 = bbox1.y2, x21 = bbox2.x1, x22 = bbox2.x2, y21 = bbox2.y1, y22 = bbox2.y2,
|
|
62
|
+
x11 > x12 && ([x11, x12] = [ x12, x11 ]), y11 > y12 && ([y11, y12] = [ y12, y11 ]),
|
|
63
|
+
x21 > x22 && ([x21, x22] = [ x22, x21 ]), y21 > y22 && ([y21, y22] = [ y22, y21 ]),
|
|
64
|
+
!(x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21)) : !(bbox1.x1 > bbox2.x2 || bbox1.x2 < bbox2.x1 || bbox1.y1 > bbox2.y2 || bbox1.y2 < bbox2.y1));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function pointInRect(point, bbox, format) {
|
|
68
|
+
return !bbox || (format ? (x11 = bbox.x1, x12 = bbox.x2, y11 = bbox.y1, y12 = bbox.y2,
|
|
69
|
+
x11 > x12 && ([x11, x12] = [ x12, x11 ]), y11 > y12 && ([y11, y12] = [ y12, y11 ]),
|
|
70
|
+
point.x >= x11 && point.x <= x12 && point.y >= y11 && point.y <= y12) : point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function getProjectionRadius(checkAxis, axis) {
|
|
74
|
+
return Math.abs(axis[0] * checkAxis[0] + axis[1] * checkAxis[1]);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function rotate({x: x, y: y}, deg, origin = {
|
|
78
|
+
x: 0,
|
|
79
|
+
y: 0
|
|
80
|
+
}) {
|
|
81
|
+
return {
|
|
82
|
+
x: (x - origin.x) * Math.cos(deg) + (y - origin.y) * Math.sin(deg) + origin.x,
|
|
83
|
+
y: (x - origin.x) * Math.sin(deg) + (origin.y - y) * Math.cos(deg) + origin.y
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function toDeg(angle) {
|
|
88
|
+
return angle / 180 * Math.PI;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function getCenterPoint(box) {
|
|
92
|
+
return {
|
|
93
|
+
x: (box.x1 + box.x2) / 2,
|
|
94
|
+
y: (box.y1 + box.y2) / 2
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function toRect(box, isDeg) {
|
|
99
|
+
const deg = isDeg ? box.angle : toDeg(box.angle), cp = getCenterPoint(box);
|
|
100
|
+
return [ rotate({
|
|
101
|
+
x: box.x1,
|
|
102
|
+
y: box.y1
|
|
103
|
+
}, deg, cp), rotate({
|
|
104
|
+
x: box.x2,
|
|
105
|
+
y: box.y1
|
|
106
|
+
}, deg, cp), rotate({
|
|
107
|
+
x: box.x2,
|
|
108
|
+
y: box.y2
|
|
109
|
+
}, deg, cp), rotate({
|
|
110
|
+
x: box.x1,
|
|
111
|
+
y: box.y2
|
|
112
|
+
}, deg, cp) ];
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function isRotateAABBIntersect(box1, box2, isDeg = !1, ctx) {
|
|
116
|
+
const rect1 = toRect(box1, isDeg), rect2 = toRect(box2, isDeg), vector = (start, end) => [ end.x - start.x, end.y - start.y ];
|
|
117
|
+
ctx && (ctx.save(), ctx.fillStyle = "red", ctx.globalAlpha = .6, rect1.forEach(((item, index) => {
|
|
118
|
+
0 === index ? ctx.moveTo(item.x, item.y) : ctx.lineTo(item.x, item.y);
|
|
119
|
+
})), ctx.fill(), ctx.restore(), ctx.save(), ctx.fillStyle = "green", ctx.globalAlpha = .6,
|
|
120
|
+
rect2.forEach(((item, index) => {
|
|
121
|
+
0 === index ? ctx.moveTo(item.x, item.y) : ctx.lineTo(item.x, item.y);
|
|
122
|
+
})), ctx.fill(), ctx.restore());
|
|
123
|
+
const p1 = getCenterPoint(box1), p2 = getCenterPoint(box2);
|
|
124
|
+
ctx && ctx.fillRect(p1.x, p1.y, 2, 2), ctx && ctx.fillRect(p2.x, p2.y, 2, 2);
|
|
125
|
+
const vp1p2 = vector(p1, p2), AB = vector(rect1[0], rect1[1]), BC = vector(rect1[1], rect1[2]), A1B1 = vector(rect2[0], rect2[1]), B1C1 = vector(rect2[1], rect2[2]), deg11 = isDeg ? box1.angle : toDeg(box1.angle);
|
|
126
|
+
let deg12 = isDeg ? box1.angle + math_1.halfPi : toDeg(90 - box1.angle);
|
|
127
|
+
const deg21 = isDeg ? box2.angle : toDeg(box2.angle);
|
|
128
|
+
let deg22 = isDeg ? box2.angle + math_1.halfPi : toDeg(90 - box2.angle);
|
|
129
|
+
deg12 > math_1.pi2 && (deg12 -= math_1.pi2), deg22 > math_1.pi2 && (deg22 -= math_1.pi2);
|
|
130
|
+
const isCover = (checkAxisRadius, deg, targetAxis1, targetAxis2) => {
|
|
131
|
+
const checkAxis = [ Math.cos(deg), Math.sin(deg) ];
|
|
132
|
+
return checkAxisRadius + (getProjectionRadius(checkAxis, targetAxis1) + getProjectionRadius(checkAxis, targetAxis2)) / 2 > getProjectionRadius(checkAxis, vp1p2);
|
|
133
|
+
};
|
|
134
|
+
return isCover((box1.x2 - box1.x1) / 2, deg11, A1B1, B1C1) && isCover((box1.y2 - box1.y1) / 2, deg12, A1B1, B1C1) && isCover((box2.x2 - box2.x1) / 2, deg21, AB, BC) && isCover((box2.y2 - box2.y1) / 2, deg22, AB, BC);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
exports.isIntersect = isIntersect, exports.getIntersectPoint = getIntersectPoint,
|
|
138
|
+
exports.getRectIntersect = getRectIntersect, function(InnerBBox) {
|
|
139
|
+
InnerBBox[InnerBBox.NONE = 0] = "NONE", InnerBBox[InnerBBox.BBOX1 = 1] = "BBOX1",
|
|
140
|
+
InnerBBox[InnerBBox.BBOX2 = 2] = "BBOX2";
|
|
141
|
+
}(InnerBBox = exports.InnerBBox || (exports.InnerBBox = {})), exports.rectInsideAnotherRect = rectInsideAnotherRect,
|
|
142
|
+
exports.isRectIntersect = isRectIntersect, exports.pointInRect = pointInRect, exports.isRotateAABBIntersect = isRotateAABBIntersect;
|
|
143
|
+
//# sourceMappingURL=intersect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphics/algorithm/intersect.ts"],"names":[],"mappings":"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","file":"intersect.js","sourcesContent":["/* 用于判断2d相交 */\nimport type { IBoundsLike } from '../../data-structure';\nimport type { vec2 } from '../../math';\nimport { pi2, halfPi, crossProduct, fuzzyEqualVec } from '../../math';\nimport type { Point } from './interface';\n\nfunction sub(out: vec2, v1: vec2, v2: vec2) {\n out[0] = v1[0] - v2[0];\n out[1] = v1[1] - v2[1];\n}\n\n// 临时变量\nlet x11: number;\nlet x12: number;\nlet y11: number;\nlet y12: number;\nlet x21: number;\nlet x22: number;\nlet y21: number;\nlet y22: number;\n\n/**\n * 判断直线是否相交,投影法\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function isIntersect(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean {\n let min1: number = left1[0];\n let max1: number = right1[0];\n let min2: number = left2[0];\n let max2: number = right2[0];\n let _temp: number;\n if (max1 < min1) {\n _temp = max1;\n (max1 = min1), (min1 = _temp);\n }\n if (max2 < min2) {\n _temp = max2;\n (max2 = min2), (min2 = _temp);\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n (min1 = left1[1]), (max1 = right1[1]), (min2 = left2[1]), (max2 = right2[1]);\n if (max1 < min1) {\n _temp = max1;\n (max1 = min1), (min1 = _temp);\n }\n if (max2 < min2) {\n _temp = max2;\n (max2 = min2), (min2 = _temp);\n }\n if (max1 < min2 || max2 < min1) {\n return false;\n }\n\n return true;\n}\n\n/**\n * 获取直线交点\n * 不相交返回false,共线返回true,相交返回交点\n * https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n * @param left1\n * @param right1\n * @param left2\n * @param right2\n */\nexport function getIntersectPoint(left1: vec2, right1: vec2, left2: vec2, right2: vec2): boolean | vec2 {\n if (!isIntersect(left1, right1, left2, right2)) {\n return false;\n }\n const dir1: vec2 = [0, 0];\n const dir2: vec2 = [0, 0];\n const tempVec: vec2 = [0, 0];\n sub(dir1, right1, left1);\n sub(dir2, right2, left2);\n\n // 判断共线\n if (fuzzyEqualVec(dir1, dir2)) {\n return true;\n }\n\n // https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect/565282#565282\n // line1: left1 + dir1 * t\n // line2: left2 + dir2 * u\n // 当 left1 + dir1 * t = left2 + dir2 * u => (left1 + dir1 * t) x dir2 = (left2 + dir2 * u) x dir2\n // => dir1 x dir2 * t = (left2 - left1) x dir2 => t = (left2 - left1) x dir2 / (dir1 x dir2)\n // 直线不平行,dir1 x dir2 ≠ 0,当0 <= t <= 1时,可以求出交点\n sub(tempVec, left2, left1);\n const t = crossProduct(tempVec, dir2) / crossProduct(dir1, dir2);\n if (t >= 0 && t <= 1) {\n return [left1[0] + dir1[0] * t, left1[1] + dir1[1] * t];\n }\n\n return false;\n}\n\n/**\n * 获取两个rect的相交部分\n * 如果有bbox为null,返回null,如果不相交返回{x1: 0, y1: 0, x2: 0, y2: 0}\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function getRectIntersect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): IBoundsLike | null {\n if (bbox1 === null) {\n return bbox2;\n }\n if (bbox2 === null) {\n return bbox1;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n\n if (x11 >= x22 || x12 <= x21 || y11 >= y22 || y12 <= y21) {\n return { x1: 0, y1: 0, x2: 0, y2: 0 };\n }\n return { x1: Math.max(x11, x21), y1: Math.max(y11, y21), x2: Math.min(x12, x22), y2: Math.min(y12, y22) };\n}\n\nexport enum InnerBBox {\n NONE = 0,\n BBOX1 = 1,\n BBOX2 = 2\n}\n/**\n * 矩形是否在另一个矩形内部\n * 返回InnerBBox\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function rectInsideAnotherRect(\n bbox1: IBoundsLike | null,\n bbox2: IBoundsLike | null,\n format: boolean\n): InnerBBox {\n if (!bbox1 || !bbox2) {\n return InnerBBox.NONE;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n\n if (format) {\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n }\n\n // bbox1在bbox2内部\n if (x11 > x21 && x12 < x22 && y11 > y21 && y12 < y22) {\n return InnerBBox.BBOX1;\n }\n // bbox2在bbox1内部\n if (x21 > x11 && x22 < x12 && y21 > y11 && y22 < y12) {\n return InnerBBox.BBOX2;\n }\n\n return InnerBBox.NONE;\n}\n\n/**\n * 两个矩形是否相交\n * 如果有矩形为null,判断为相交\n * @param bbox1\n * @param bbox2\n * @param format\n */\nexport function isRectIntersect(bbox1: IBoundsLike | null, bbox2: IBoundsLike | null, format: boolean): boolean {\n if (bbox1 && bbox2) {\n if (!format) {\n if (bbox1.x1 > bbox2.x2 || bbox1.x2 < bbox2.x1 || bbox1.y1 > bbox2.y2 || bbox1.y2 < bbox2.y1) {\n return false;\n }\n return true;\n }\n\n (x11 = bbox1.x1),\n (x12 = bbox1.x2),\n (y11 = bbox1.y1),\n (y12 = bbox1.y2),\n (x21 = bbox2.x1),\n (x22 = bbox2.x2),\n (y21 = bbox2.y1),\n (y22 = bbox2.y2);\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n if (x21 > x22) {\n [x21, x22] = [x22, x21];\n }\n if (y21 > y22) {\n [y21, y22] = [y22, y21];\n }\n\n if (x11 > x22 || x12 < x21 || y11 > y22 || y12 < y21) {\n return false;\n }\n return true;\n }\n return true;\n}\n\n/**\n * 点在box内部\n * 如果bbox为null返回true\n * @param point\n * @param bbox\n */\nexport function pointInRect(point: { x: number; y: number }, bbox: IBoundsLike | null, format: boolean): boolean {\n if (!bbox) {\n return true;\n }\n if (!format) {\n return point.x >= bbox.x1 && point.x <= bbox.x2 && point.y >= bbox.y1 && point.y <= bbox.y2;\n }\n (x11 = bbox.x1), (x12 = bbox.x2), (y11 = bbox.y1), (y12 = bbox.y2);\n if (x11 > x12) {\n [x11, x12] = [x12, x11];\n }\n if (y11 > y12) {\n [y11, y12] = [y12, y11];\n }\n return point.x >= x11 && point.x <= x12 && point.y >= y11 && point.y <= y12;\n}\n\n// 参考https://github.com/francecil/leetcode/issues/1\n\n/**\n * 计算投影半径\n * @param {Array(Number)} checkAxis 检测轴 [cosθ,sinθ]\n * @param {Array} axis 目标轴 [x,y]\n */\nfunction getProjectionRadius(checkAxis: [number, number], axis: [number, number]) {\n return Math.abs(axis[0] * checkAxis[0] + axis[1] * checkAxis[1]);\n}\n\nfunction rotate({ x, y }: Point, deg: number, origin = { x: 0, y: 0 }) {\n return {\n x: (x - origin.x) * Math.cos(deg) + (y - origin.y) * Math.sin(deg) + origin.x,\n y: (x - origin.x) * Math.sin(deg) + (origin.y - y) * Math.cos(deg) + origin.y\n };\n}\n\nfunction toDeg(angle: number) {\n return (angle / 180) * Math.PI;\n}\n\nfunction getCenterPoint(box: RotateBound): Point {\n return {\n x: (box.x1 + box.x2) / 2,\n y: (box.y1 + box.y2) / 2\n };\n}\n\ninterface RotateBound extends IBoundsLike {\n angle: number;\n rotateCenter?: { x: number; y: number };\n}\n\n/**\n * 转化为顶点坐标数组\n * @param {Object} box\n */\nfunction toRect(box: RotateBound, isDeg: boolean) {\n const deg = isDeg ? box.angle : toDeg(box.angle);\n const cp = getCenterPoint(box);\n return [\n rotate(\n {\n x: box.x1,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y1\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x2,\n y: box.y2\n },\n deg,\n cp\n ),\n rotate(\n {\n x: box.x1,\n y: box.y2\n },\n deg,\n cp\n )\n ];\n}\nexport function isRotateAABBIntersect(\n box1: RotateBound,\n box2: RotateBound,\n isDeg = false,\n ctx?: CanvasRenderingContext2D\n) {\n const rect1 = toRect(box1, isDeg);\n const rect2 = toRect(box2, isDeg);\n const vector = (start: Point, end: Point) => {\n return [end.x - start.x, end.y - start.y] as [number, number];\n };\n\n if (ctx) {\n ctx.save();\n ctx.fillStyle = 'red';\n ctx.globalAlpha = 0.6;\n rect1.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n\n ctx.save();\n ctx.fillStyle = 'green';\n ctx.globalAlpha = 0.6;\n rect2.forEach((item, index) => {\n if (index === 0) {\n ctx.moveTo(item.x, item.y);\n } else {\n ctx.lineTo(item.x, item.y);\n }\n });\n ctx.fill();\n ctx.restore();\n }\n\n // 两个矩形的中心点\n const p1 = getCenterPoint(box1);\n const p2 = getCenterPoint(box2);\n\n ctx && ctx.fillRect(p1.x, p1.y, 2, 2);\n ctx && ctx.fillRect(p2.x, p2.y, 2, 2);\n // 向量 p1p2\n const vp1p2 = vector(p1, p2);\n\n //矩形1的两边向量\n const AB = vector(rect1[0], rect1[1]);\n const BC = vector(rect1[1], rect1[2]);\n //矩形2的两边向量\n const A1B1 = vector(rect2[0], rect2[1]);\n const B1C1 = vector(rect2[1], rect2[2]);\n\n // 矩形1 的两个弧度\n const deg11 = isDeg ? box1.angle : toDeg(box1.angle);\n let deg12 = isDeg ? box1.angle + halfPi : toDeg(90 - box1.angle);\n // 矩形2 的两个弧度\n const deg21 = isDeg ? box2.angle : toDeg(box2.angle);\n let deg22 = isDeg ? box2.angle + halfPi : toDeg(90 - box2.angle);\n if (deg12 > pi2) {\n deg12 -= pi2;\n }\n if (deg22 > pi2) {\n deg22 -= pi2;\n }\n\n // 投影重叠\n const isCover = (\n checkAxisRadius: number,\n deg: number,\n targetAxis1: [number, number],\n targetAxis2: [number, number]\n ) => {\n const checkAxis = [Math.cos(deg), Math.sin(deg)] as [number, number];\n const targetAxisRadius =\n (getProjectionRadius(checkAxis, targetAxis1) + getProjectionRadius(checkAxis, targetAxis2)) / 2;\n const centerPointRadius = getProjectionRadius(checkAxis, vp1p2);\n // console.log('abc', `checkAxis:${checkAxis},三个投影:${checkAxisRadius}, ${targetAxisRadius}, ${centerPointRadius}`)\n return checkAxisRadius + targetAxisRadius > centerPointRadius;\n };\n\n return (\n isCover((box1.x2 - box1.x1) / 2, deg11, A1B1, B1C1) &&\n isCover((box1.y2 - box1.y1) / 2, deg12, A1B1, B1C1) &&\n isCover((box2.x2 - box2.x1) / 2, deg21, AB, BC) &&\n isCover((box2.y2 - box2.y1) / 2, deg22, AB, BC)\n );\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Point, OBB } from './interface';
|
|
2
|
+
export declare function getOBBFromLine(point1: Point, point2: Point, lineWidth: number): OBB;
|
|
3
|
+
export declare function pointInOBB(point: Point, obb: OBB): boolean;
|
|
4
|
+
export declare function pointInLine(point: Point, point1: Point, point2: Point, lineWidth: number): boolean;
|
|
5
|
+
export declare function pointBetweenLine(point: Point, point1: Point, point2: Point): boolean;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.pointBetweenLine = exports.pointInLine = exports.pointInOBB = exports.getOBBFromLine = void 0;
|
|
6
|
+
|
|
7
|
+
const math_1 = require("../../math");
|
|
8
|
+
|
|
9
|
+
let dirX, dirY, normalX, normalY, len, lineWidthDiv2, width, height;
|
|
10
|
+
|
|
11
|
+
function getOBBFromLine(point1, point2, lineWidth) {
|
|
12
|
+
dirX = point2.x - point1.x, dirY = point2.y - point1.y, normalX = dirY, normalY = -dirX,
|
|
13
|
+
width = len = Math.sqrt(normalX * normalX + normalY * normalY), height = lineWidth,
|
|
14
|
+
normalX /= len, normalY /= len, lineWidthDiv2 = lineWidth / 2, dirX = lineWidthDiv2 * normalX,
|
|
15
|
+
dirY = lineWidthDiv2 * normalY;
|
|
16
|
+
return {
|
|
17
|
+
point1: {
|
|
18
|
+
x: point1.x + dirX,
|
|
19
|
+
y: point1.y + dirY
|
|
20
|
+
},
|
|
21
|
+
point2: {
|
|
22
|
+
x: point1.x - dirX,
|
|
23
|
+
y: point1.y - dirY
|
|
24
|
+
},
|
|
25
|
+
point3: {
|
|
26
|
+
x: point2.x + dirX,
|
|
27
|
+
y: point2.y + dirY
|
|
28
|
+
},
|
|
29
|
+
point4: {
|
|
30
|
+
x: point2.x - dirX,
|
|
31
|
+
y: point2.y - dirY
|
|
32
|
+
},
|
|
33
|
+
width: width,
|
|
34
|
+
height: height,
|
|
35
|
+
left: Math.min(point1.x, point2.x) - Math.abs(dirX),
|
|
36
|
+
top: Math.min(point1.y, point2.y) - Math.abs(dirY)
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
exports.getOBBFromLine = getOBBFromLine;
|
|
41
|
+
|
|
42
|
+
const point1 = {
|
|
43
|
+
x: 0,
|
|
44
|
+
y: 0
|
|
45
|
+
}, point2 = {
|
|
46
|
+
x: 0,
|
|
47
|
+
y: 0
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
function pointInOBB(point, obb) {
|
|
51
|
+
return point1.x = (obb.point1.x + obb.point2.x) / 2, point1.y = (obb.point1.y + obb.point2.y) / 2,
|
|
52
|
+
point2.x = (obb.point3.x + obb.point4.x) / 2, point2.y = (obb.point3.y + obb.point4.y) / 2,
|
|
53
|
+
pointInLine(point, point1, point2, obb.height);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function pointInLine(point, point1, point2, lineWidth) {
|
|
57
|
+
return (0, math_1.lengthFromPointToLine)(point, point1, point2) <= lineWidth / 2 && pointBetweenLine(point, point1, point2);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
exports.pointInOBB = pointInOBB, exports.pointInLine = pointInLine;
|
|
61
|
+
|
|
62
|
+
const dir1 = {
|
|
63
|
+
x: 0,
|
|
64
|
+
y: 0
|
|
65
|
+
}, dir2 = {
|
|
66
|
+
x: 0,
|
|
67
|
+
y: 0
|
|
68
|
+
}, normal = {
|
|
69
|
+
x: 0,
|
|
70
|
+
y: 0
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
function pointBetweenLine(point, point1, point2) {
|
|
74
|
+
return dir1.x = point1.x - point.x, dir1.y = point1.y - point.y, dir2.x = point2.x - point.x,
|
|
75
|
+
dir2.y = point2.y - point.y, normal.x = point1.y - point2.y, normal.y = point2.x - point1.x,
|
|
76
|
+
(0, math_1.crossProductPoint)(dir1, normal) * (0, math_1.crossProductPoint)(dir2, normal) < 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
exports.pointBetweenLine = pointBetweenLine;
|
|
80
|
+
//# sourceMappingURL=obb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphics/algorithm/obb.ts"],"names":[],"mappings":"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","file":"obb.js","sourcesContent":["import type { Point, OBB } from './interface';\nimport { lengthFromPointToLine, crossProductPoint } from '../../math';\n\nlet dirX: number;\nlet dirY: number;\nlet normalX: number;\nlet normalY: number;\nlet len: number;\nlet lineWidthDiv2: number;\nlet width: number;\nlet height: number;\nexport function getOBBFromLine(point1: Point, point2: Point, lineWidth: number): OBB {\n dirX = point2.x - point1.x;\n dirY = point2.y - point1.y;\n (normalX = dirY), (normalY = -dirX);\n width = len = Math.sqrt(normalX * normalX + normalY * normalY);\n height = lineWidth;\n normalX /= len;\n normalY /= len;\n lineWidthDiv2 = lineWidth / 2;\n dirX = lineWidthDiv2 * normalX;\n dirY = lineWidthDiv2 * normalY;\n const point11: Point = { x: point1.x + dirX, y: point1.y + dirY };\n const point12: Point = { x: point1.x - dirX, y: point1.y - dirY };\n const point13: Point = { x: point2.x + dirX, y: point2.y + dirY };\n const point14: Point = { x: point2.x - dirX, y: point2.y - dirY };\n\n return {\n point1: point11,\n point2: point12,\n point3: point13,\n point4: point14,\n width,\n height,\n left: Math.min(point1.x, point2.x) - Math.abs(dirX),\n top: Math.min(point1.y, point2.y) - Math.abs(dirY)\n };\n}\n\nconst point1: Point = { x: 0, y: 0 };\nconst point2: Point = { x: 0, y: 0 };\nexport function pointInOBB(point: Point, obb: OBB): boolean {\n point1.x = (obb.point1.x + obb.point2.x) / 2;\n point1.y = (obb.point1.y + obb.point2.y) / 2;\n point2.x = (obb.point3.x + obb.point4.x) / 2;\n point2.y = (obb.point3.y + obb.point4.y) / 2;\n\n return pointInLine(point, point1, point2, obb.height);\n}\n\nexport function pointInLine(point: Point, point1: Point, point2: Point, lineWidth: number): boolean {\n return lengthFromPointToLine(point, point1, point2) <= lineWidth / 2 && pointBetweenLine(point, point1, point2);\n}\n\nconst dir1: Point = { x: 0, y: 0 };\nconst dir2: Point = { x: 0, y: 0 };\nconst normal: Point = { x: 0, y: 0 };\nexport function pointBetweenLine(point: Point, point1: Point, point2: Point) {\n dir1.x = point1.x - point.x;\n dir1.y = point1.y - point.y;\n dir2.x = point2.x - point.x;\n dir2.y = point2.y - point.y;\n normal.x = point1.y - point2.y;\n normal.y = point2.x - point1.x;\n return crossProductPoint(dir1, normal) * crossProductPoint(dir2, normal) < 0;\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface ITextConfig {
|
|
2
|
+
text: string;
|
|
3
|
+
fontSize: number;
|
|
4
|
+
fontStyle?: string;
|
|
5
|
+
fontVariant?: string;
|
|
6
|
+
fontWeight?: number | string;
|
|
7
|
+
fontFamily?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class GraphicUtil {
|
|
10
|
+
canvas?: HTMLCanvasElement;
|
|
11
|
+
ctx?: CanvasRenderingContext2D | null;
|
|
12
|
+
static instance?: GraphicUtil;
|
|
13
|
+
constructor(canvas?: HTMLCanvasElement);
|
|
14
|
+
setCanvas(canvas?: HTMLCanvasElement): void;
|
|
15
|
+
measureText(tc: ITextConfig): {
|
|
16
|
+
width: number;
|
|
17
|
+
height: number;
|
|
18
|
+
};
|
|
19
|
+
private measureTextByCanvas;
|
|
20
|
+
private estimate;
|
|
21
|
+
static getDefaultUtils(canvas?: HTMLCanvasElement): GraphicUtil;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function getContextFont({fontStyle: fontStyle, fontVariant: fontVariant, fontWeight: fontWeight, fontSize: fontSize, fontFamily: fontFamily}) {
|
|
4
|
+
return (fontStyle ? fontStyle + " " : "") + (fontVariant ? fontVariant + " " : "") + (fontWeight ? fontWeight + " " : "") + (fontSize || 12) + "px " + (fontFamily || "sans-serif");
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: !0
|
|
9
|
+
}), exports.GraphicUtil = void 0;
|
|
10
|
+
|
|
11
|
+
class GraphicUtil {
|
|
12
|
+
constructor(canvas) {
|
|
13
|
+
this.canvas = canvas, canvas && (this.ctx = canvas.getContext("2d"));
|
|
14
|
+
}
|
|
15
|
+
setCanvas(canvas) {
|
|
16
|
+
this.canvas = canvas, canvas && (this.ctx = canvas.getContext("2d"));
|
|
17
|
+
}
|
|
18
|
+
measureText(tc) {
|
|
19
|
+
return this.canvas ? this.measureTextByCanvas(tc) : (console.warn("[warn] no canvas, measureText might be not accurate"),
|
|
20
|
+
this.estimate(tc));
|
|
21
|
+
}
|
|
22
|
+
measureTextByCanvas(tc) {
|
|
23
|
+
return this.ctx ? (this.ctx.font = getContextFont(tc), {
|
|
24
|
+
width: this.ctx.measureText(tc.text).width,
|
|
25
|
+
height: tc.fontSize
|
|
26
|
+
}) : (console.error("[error!!!]measureTextByCanvas can not be called without canvas"),
|
|
27
|
+
{
|
|
28
|
+
width: -1,
|
|
29
|
+
height: tc.fontSize
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
estimate({text: text, fontSize: fontSize}) {
|
|
33
|
+
let eCharLen = 0, cCharLen = 0;
|
|
34
|
+
for (let i = 0; i < text.length; i++) text.charCodeAt(i) < 128 ? eCharLen++ : cCharLen++;
|
|
35
|
+
return {
|
|
36
|
+
width: ~~(.8 * eCharLen * fontSize + cCharLen * fontSize),
|
|
37
|
+
height: fontSize
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
static getDefaultUtils(canvas) {
|
|
41
|
+
return GraphicUtil.instance || (GraphicUtil.instance = new GraphicUtil(canvas)),
|
|
42
|
+
GraphicUtil.instance;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
exports.GraphicUtil = GraphicUtil;
|
|
47
|
+
//# sourceMappingURL=graph-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphics/graph-util.ts"],"names":[],"mappings":";;;AASA,SAAS,cAAc,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAe;IAC/F,OAAO,CACL,EAAE;QACF,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,CAAC,QAAQ,IAAI,EAAE,CAAC;QAChB,KAAK;QACL,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CACzC,CAAC;AACJ,CAAC;AAED,MAAa,WAAW;IAMtB,YAAY,MAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACpC;IACH,CAAC;IACD,SAAS,CAAC,MAA0B;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACpC;IACH,CAAC;IAED,WAAW,CAAC,EAAe;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAC1B;QACD,OAAO,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,mBAAmB,CAAC,EAAe;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;YAChF,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;SAC3C;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK;YAC1C,MAAM,EAAE,EAAE,CAAC,QAAQ;SACpB,CAAC;IACJ,CAAC;IAEO,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAe;QAE9C,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;SACpD;QACD,OAAO;YACL,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;YAC1D,MAAM,EAAE,QAAQ;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,MAA0B;QAC/C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;YACzB,WAAW,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;SAChD;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC;IAC9B,CAAC;CACF;AA3DD,kCA2DC","file":"graph-util.js","sourcesContent":["interface ITextConfig {\n text: string;\n fontSize: number;\n fontStyle?: string;\n fontVariant?: string;\n fontWeight?: number | string;\n fontFamily?: string;\n}\n\nfunction getContextFont({ fontStyle, fontVariant, fontWeight, fontSize, fontFamily }: ITextConfig): string {\n return (\n '' +\n (fontStyle ? fontStyle + ' ' : '') +\n (fontVariant ? fontVariant + ' ' : '') +\n (fontWeight ? fontWeight + ' ' : '') +\n (fontSize || 12) +\n 'px ' +\n (fontFamily ? fontFamily : 'sans-serif')\n );\n}\n\nexport class GraphicUtil {\n canvas?: HTMLCanvasElement;\n ctx?: CanvasRenderingContext2D | null;\n\n static instance?: GraphicUtil;\n\n constructor(canvas?: HTMLCanvasElement) {\n this.canvas = canvas;\n if (canvas) {\n this.ctx = canvas.getContext('2d');\n }\n }\n setCanvas(canvas?: HTMLCanvasElement) {\n this.canvas = canvas;\n if (canvas) {\n this.ctx = canvas.getContext('2d');\n }\n }\n\n measureText(tc: ITextConfig) {\n if (!this.canvas) {\n console.warn('[warn] no canvas, measureText might be not accurate');\n return this.estimate(tc);\n }\n return this.measureTextByCanvas(tc);\n }\n\n private measureTextByCanvas(tc: ITextConfig): { width: number; height: number } {\n if (!this.ctx) {\n console.error('[error!!!]measureTextByCanvas can not be called without canvas');\n return { width: -1, height: tc.fontSize };\n }\n this.ctx.font = getContextFont(tc);\n return {\n width: this.ctx.measureText(tc.text).width,\n height: tc.fontSize\n };\n }\n\n private estimate({ text, fontSize }: ITextConfig): { width: number; height: number } {\n // 假设只有英文和中文字符\n let eCharLen = 0; // 英文字符\n let cCharLen = 0; // 中文字符\n // 判断ascii码,如果是\n for (let i = 0; i < text.length; i++) {\n text.charCodeAt(i) < 128 ? eCharLen++ : cCharLen++;\n }\n return {\n width: ~~(0.8 * eCharLen * fontSize + cCharLen * fontSize),\n height: fontSize\n };\n }\n\n static getDefaultUtils(canvas?: HTMLCanvasElement) {\n if (!GraphicUtil.instance) {\n GraphicUtil.instance = new GraphicUtil(canvas);\n }\n return GraphicUtil.instance;\n }\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: !0
|
|
5
|
+
}), exports.parseUint8ToImageData = void 0;
|
|
6
|
+
|
|
7
|
+
const parseUint8ToImageData = (buffer, width, height) => {
|
|
8
|
+
const clampBuffer = new Uint8ClampedArray(buffer), flipClampBuffer = new Uint8ClampedArray(buffer.length);
|
|
9
|
+
for (let i = height - 1; i >= 0; i--) for (let j = 0; j < width; j++) {
|
|
10
|
+
const sourceIdx = i * width * 4 + 4 * j, targetIdx = (height - i) * width * 4 + 4 * j;
|
|
11
|
+
flipClampBuffer[targetIdx] = clampBuffer[sourceIdx], flipClampBuffer[targetIdx + 1] = clampBuffer[sourceIdx + 1],
|
|
12
|
+
flipClampBuffer[targetIdx + 2] = clampBuffer[sourceIdx + 2], flipClampBuffer[targetIdx + 3] = clampBuffer[sourceIdx + 3];
|
|
13
|
+
}
|
|
14
|
+
return new ImageData(flipClampBuffer, width, height);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
exports.parseUint8ToImageData = parseUint8ToImageData;
|
|
18
|
+
//# sourceMappingURL=image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphics/image.ts"],"names":[],"mappings":";;;AAAA,MAAM,qBAAqB,GAAG,CAAC,MAAkB,EAAE,KAAa,EAAE,MAAc,EAAa,EAAE;IAC7F,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,eAAe,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,SAAS,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnD,eAAe,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;YACpD,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAC5D,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YAC5D,eAAe,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;SAC7D;KACF;IACD,OAAO,IAAI,SAAS,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC,CAAC;AAEO,sDAAqB","file":"image.js","sourcesContent":["const parseUint8ToImageData = (buffer: Uint8Array, width: number, height: number): ImageData => {\n const clampBuffer = new Uint8ClampedArray(buffer);\n const flipClampBuffer = new Uint8ClampedArray(buffer.length);\n for (let i = height - 1; i >= 0; i--) {\n for (let j = 0; j < width; j++) {\n const sourceIdx = i * width * 4 + j * 4;\n const targetIdx = (height - i) * width * 4 + j * 4;\n flipClampBuffer[targetIdx] = clampBuffer[sourceIdx];\n flipClampBuffer[targetIdx + 1] = clampBuffer[sourceIdx + 1];\n flipClampBuffer[targetIdx + 2] = clampBuffer[sourceIdx + 2];\n flipClampBuffer[targetIdx + 3] = clampBuffer[sourceIdx + 3];\n }\n }\n return new ImageData(flipClampBuffer, width, height);\n};\n\nexport { parseUint8ToImageData };\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __createBinding = this && this.__createBinding || (Object.create ? function(o, m, k, k2) {
|
|
4
|
+
void 0 === k2 && (k2 = k);
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
desc && !("get" in desc ? !m.__esModule : desc.writable || desc.configurable) || (desc = {
|
|
7
|
+
enumerable: !0,
|
|
8
|
+
get: function() {
|
|
9
|
+
return m[k];
|
|
10
|
+
}
|
|
11
|
+
}), Object.defineProperty(o, k2, desc);
|
|
12
|
+
} : function(o, m, k, k2) {
|
|
13
|
+
void 0 === k2 && (k2 = k), o[k2] = m[k];
|
|
14
|
+
}), __exportStar = this && this.__exportStar || function(m, exports) {
|
|
15
|
+
for (var p in m) "default" === p || Object.prototype.hasOwnProperty.call(exports, p) || __createBinding(exports, m, p);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
Object.defineProperty(exports, "__esModule", {
|
|
19
|
+
value: !0
|
|
20
|
+
}), __exportStar(require("./image"), exports), __exportStar(require("./algorithm"), exports),
|
|
21
|
+
__exportStar(require("./graph-util"), exports), __exportStar(require("./polygon"), exports),
|
|
22
|
+
__exportStar(require("./text"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/graphics/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,0CAAwB;AAGxB,8CAA4B;AAE5B,+CAA6B;AAE7B,4CAA0B;AAE1B,yCAAuB","file":"index.js","sourcesContent":["// image\nexport * from './image';\n\n// computer geometry algorithm, cgs.js\nexport * from './algorithm';\n\nexport * from './graph-util';\n\nexport * from './polygon';\n\nexport * from './text';\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IPointLike } from '../data-structure';
|
|
2
|
+
export declare function lineIntersectPolygon(a1x: number, a1y: number, a2x: number, a2y: number, points: IPointLike[]): boolean;
|
|
3
|
+
export declare function polygonContainPoint(points: IPointLike[], x: number, y: number): boolean;
|
|
4
|
+
export declare function isPointInLine(x0: number, y0: number, x1: number, y1: number, x: number, y: number): number;
|
|
5
|
+
export declare function polygonIntersectPolygon(pointsA: IPointLike[], pointsB: IPointLike[]): boolean;
|