| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- import { deepClone } from '@jiaminghi/c-render/lib/plugin/util'
- export function filterNonNumber (array) {
- return array.filter(n => typeof n === 'number')
- }
- export function deepMerge (target, merged) {
- for (var key in merged) {
- if (target[key] && typeof target[key] === 'object') {
- deepMerge(target[key], merged[key])
- continue
- }
- if (typeof merged[key] === 'object') {
- target[key] = deepClone(merged[key], true)
- continue
- }
- target[key] = merged[key]
- }
- return target
- }
- export function mulAdd (nums) {
- nums = filterNonNumber(nums)
- return nums.reduce((all, num) => all + num, 0)
- }
- export function mergeSameStackData (item, series) {
- const stack = item.stack
- if (!stack) return [...item.data]
- const stacks = series.filter(({ stack: s }) => s === stack)
- const index = stacks.findIndex(({ data: d }) => d === item.data)
- const datas = stacks.splice(0, index + 1).map(({ data }) => data)
- const dataLength = datas[0].length
- return new Array(dataLength)
- .fill(0)
- .map((foo, i) => mulAdd(datas.map(d => d[i])))
- }
- export function getTwoPointDistance (pointOne, pointTwo) {
- const minusX = Math.abs(pointOne[0] - pointTwo[0])
- const minusY = Math.abs(pointOne[1] - pointTwo[1])
- return Math.sqrt(minusX * minusX + minusY * minusY)
- }
- export function getLinearGradientColor (ctx, begin, end, color) {
- if (!ctx || !begin || !end || !color.length) return
- let colors = color
- typeof colors === 'string' && (colors = [color, color])
- const linearGradientColor = ctx.createLinearGradient(...begin, ...end)
- const colorGap = 1 / (colors.length - 1)
- colors.forEach((c, i) => linearGradientColor.addColorStop(colorGap * i, c))
- return linearGradientColor
- }
- export function getPolylineLength (points) {
- const lineSegments = new Array(points.length - 1)
- .fill(0)
- .map((foo, i) => [points[i], points[i + 1]])
- const lengths = lineSegments.map(item => getTwoPointDistance(...item))
- return mulAdd(lengths)
- }
- export function getPointToLineDistance (point, linePointOne, linePointTwo) {
- const a = getTwoPointDistance(point, linePointOne)
- const b = getTwoPointDistance(point, linePointTwo)
- const c = getTwoPointDistance(linePointOne, linePointTwo)
- return 0.5 * Math.sqrt((a + b + c) * (a + b - c) * (a + c - b) * (b + c - a)) / c
- }
- export function initNeedSeries (series, config, type) {
- series = series.filter(({ type: st }) => st === type)
- series = series.map(item => deepMerge(deepClone(config, true), item))
- return series.filter(({ show }) => show)
- }
- export function radianToAngle (radian) {
- return radian / Math.PI * 180
- }
|