UNPKG

@qn-pandora/pandora-visualization

Version:

Pandora 通用可视化库

63 lines (62 loc) 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getColor = void 0; var lodash_1 = require("lodash"); var color_1 = require("../transforms/color"); /** * 渐变色 方程式 (x-x1)/(x2-x1)=(y-y1)/(y2-y1) * @param min 最小值 * @param max 最大值 * @param current 当前值 * @param colors 颜色 * @param defualtColor 默认颜色 * @returns */ function getColor(min, max, current, colors, defualtColor) { if (defualtColor === void 0) { defualtColor = '#2c6dd2'; } var colorsLen = colors.length; if (colorsLen === 0) { return defualtColor; } if (colorsLen === 1) { return colors[0]; } if (current <= min) { return lodash_1.first(colors); } if (current >= max) { return lodash_1.last(colors); } // 分段 var splitNum = colorsLen - 1; var step = Math.floor((max - min) / splitNum) || 1; var i = 0; var currentSplitNum = 0; while (i < splitNum) { if (min + (i + 1) * step >= current) { currentSplitNum = i; break; } i++; } var currentStart = min + currentSplitNum * step; var currentEnd = min + (currentSplitNum + 1) * step; var startColor = lodash_1.get(colors, currentSplitNum); var endColor = lodash_1.get(colors, currentSplitNum + 1); if (!startColor || !endColor) { return defualtColor; } var startRgb = color_1.hexToRgb(startColor); var endRgb = color_1.hexToRgb(endColor); var r = ((current - currentStart) / (currentEnd - currentStart)) * (endRgb.r - startRgb.r) + startRgb.r; var g = ((current - currentStart) / (currentEnd - currentStart)) * (endRgb.g - startRgb.g) + startRgb.g; var b = ((current - currentStart) / (currentEnd - currentStart)) * (endRgb.b - startRgb.b) + startRgb.b; return "rgb(" + r + "," + g + "," + b + ")"; } exports.getColor = getColor;