private double getBinCountInRange(double minSample, double maxSample) { if (!isHistogramAvailable()) { return -1.0; } final double minHistogramSample = model.getMinSample(); final double maxHistogramSample = model.getMaxSample(); if (minSample >= maxHistogramSample || maxSample <= minHistogramSample) { return 0.0; } minSample = Math.max(minSample, minHistogramSample); maxSample = Math.min(maxSample, maxHistogramSample); final double a = scaleInverse(maxSample) - scaleInverse(minSample); final double b = scaleInverse(maxHistogramSample) - scaleInverse(minHistogramSample); return (a / b) * model.getHistogramBins().length; }
private double getNormalizedHistogramViewSampleValue(double sample) { final double minVisibleSample = scaleInverse(getModel().getMinHistogramViewSample()); final double maxVisibleSample = scaleInverse(getModel().getMaxHistogramViewSample()); sample = scaleInverse(sample); double delta = maxVisibleSample - minVisibleSample; if (delta == 0 || Double.isNaN(delta)) { delta = 1; } return (sample - minVisibleSample) / delta; }
private double getMinHistogramViewBinIndex() { if (!isHistogramAvailable()) { return -1.0; } final double minHistogramSample = model.getMinSample(); final double minHistogramViewSample = model.getMinHistogramViewSample(); if (minHistogramSample != minHistogramViewSample) { final double a = scaleInverse(minHistogramViewSample) - scaleInverse(minHistogramSample); final double b = scaleInverse(model.getMaxSample()) - scaleInverse(minHistogramSample); return (a / b) * model.getHistogramBins().length; } return 0.0; }
private void computeFactors() { factors = new double[getSliderCount()]; final double firstPS = scaleInverse(getFirstSliderSample()); final double lastPS = scaleInverse(getLastSliderSample()); double dsn = lastPS - firstPS; if (dsn == 0 || Double.isNaN(dsn)) { dsn = Double.MIN_VALUE; } for (int i = 0; i < getSliderCount(); i++) { final double sample = scaleInverse(getSliderSample(i)); final double dsi = sample - firstPS; factors[i] = dsi / dsn; } }
private void partitionSliders(boolean adjusting) { final double pos1 = scaleInverse(getFirstSliderSample()); final double pos2 = scaleInverse(getLastSliderSample()); final double delta = pos2 - pos1; for (int i = 0; i < (getSliderCount() - 1); i++) { final double value = scale(pos1 + factors[i] * delta); setSliderSample(i, value, adjusting); } }
public void distributeSlidersEvenly() { final double pos1 = scaleInverse(getFirstSliderSample()); final double pos2 = scaleInverse(getLastSliderSample()); final double delta = pos2 - pos1; final double evenSpace = delta / (getSliderCount() - 2 + 1); for (int i = 0; i < getSliderCount(); i++) { final double value = scale(pos1 + evenSpace * i); setSliderSample(i, value, false); } }
private double computeSliderValueForX(int sliderIndex, int x) { final double minVS = scaleInverse(getModel().getMinHistogramViewSample()); final double maxVS = scaleInverse(getModel().getMaxHistogramViewSample()); final double value = scale(minVS + (x - sliderBaseLineRect.x) * (maxVS - minVS) / sliderBaseLineRect.width); if (isFirstSliderIndex(sliderIndex)) { return Math.min(value, getLastSliderSample()); } if (isLastSliderIndex(sliderIndex)) { return Math.max(value, getFirstSliderSample()); } return computeAdjustedSliderValue(sliderIndex, value); }
public void computeZoomInToSliderLimits() { final double firstSliderValue = scaleInverse(getFirstSliderSample()); final double lastSliderValue = scaleInverse(getLastSliderSample()); final double percentOffset = 0.0; final double minViewSample = scale(firstSliderValue - percentOffset); final double maxViewSample = scale(lastSliderValue + percentOffset); getModel().setMinHistogramViewSample(minViewSample); getModel().setMaxHistogramViewSample(maxViewSample); repaint(); }
public void compute95Percent() { final Histogram histogram = new Histogram(getModel().getHistogramBins(), scaleInverse(getModel().getMinSample()), scaleInverse(getModel().getMaxSample())); final Range autoStretchRange = histogram.findRangeFor95Percent(); computeFactors(); setFirstSliderSample(scale(autoStretchRange.getMin())); setLastSliderSample(scale(autoStretchRange.getMax())); partitionSliders(false); computeZoomInToSliderLimits(); }