@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
63 lines (62 loc) • 1.97 kB
JavaScript
;
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;