57 lines
1.7 KiB
JavaScript
57 lines
1.7 KiB
JavaScript
import { GUTTER, PLOT_PIE_RADIUS_FACTOR, MILISECONDS_IN_DAY, SIMPLIFIER_MIN_POINTS } from './constants.js';
|
|
|
|
export function xScaleLevelToStep(scaleLevel) {
|
|
return Math.pow(2, scaleLevel);
|
|
}
|
|
|
|
export function xStepToScaleLevel(step) {
|
|
return Math.ceil(Math.log2(step || 1));
|
|
}
|
|
|
|
const SCALE_LEVELS = [
|
|
1, 2, 8, 18, 50, 100, 250, 500, 1000, 2500, 5000, 10000, 25000, 50000, 100000,
|
|
250000, 500000, 1000000, 2500000, 5000000, 10000000, 25000000, 50000000, 100000000,
|
|
];
|
|
|
|
export function yScaleLevelToStep(scaleLevel) {
|
|
return SCALE_LEVELS[scaleLevel] || SCALE_LEVELS[SCALE_LEVELS.length - 1];
|
|
}
|
|
|
|
export function yStepToScaleLevel(neededStep) {
|
|
return SCALE_LEVELS.findIndex((step) => step >= neededStep) || SCALE_LEVELS.length - 1;
|
|
}
|
|
|
|
export function applyYEdgeOpacity(opacity, xPx, plotWidth) {
|
|
const edgeOffset = Math.min(xPx + GUTTER, plotWidth - xPx);
|
|
if (edgeOffset <= GUTTER * 4) {
|
|
opacity = Math.min(1, opacity, edgeOffset / (GUTTER * 4));
|
|
}
|
|
return opacity;
|
|
}
|
|
|
|
export function applyXEdgeOpacity(opacity, yPx) {
|
|
return (yPx - GUTTER <= GUTTER * 2)
|
|
? Math.min(1, opacity, (yPx - GUTTER) / (GUTTER * 2))
|
|
: opacity;
|
|
}
|
|
|
|
export function getPieRadius(projection) {
|
|
return Math.min(...projection.getSize()) * PLOT_PIE_RADIUS_FACTOR;
|
|
}
|
|
|
|
export function getPieTextSize(percent, radius) {
|
|
return (radius + percent * 200) / 10;
|
|
}
|
|
|
|
export function getPieTextShift(percent, radius, shift) {
|
|
return percent >= 0.99 ? 0 : Math.min(1 - Math.log(percent * 30) / 5, 4 / 5) * radius;
|
|
}
|
|
|
|
export function isDataRange(labelFrom, labelTo) {
|
|
return Math.abs(labelTo.value - labelFrom.value) > MILISECONDS_IN_DAY;
|
|
}
|
|
|
|
export function getSimplificationDelta(pointsLength) {
|
|
return pointsLength >= SIMPLIFIER_MIN_POINTS ? Math.min((pointsLength / 1000), 1) : 0;
|
|
}
|