private double transStart(double value, Rectangle2D area, 
                              RectangleEdge edge,
                              double length1, double length2) {
        double min = 0.0;
        double max = 0.0;
        if (RectangleEdge.isTopOrBottom(edge)) {
            min = area.getX();
            max = area.getX() + area.getWidth() * length1 / (length1 + length2);
        }
        else if (RectangleEdge.isLeftOrRight(edge)) {
            min = area.getMaxY();
            max = area.getMaxY() - area.getHeight() * length1 
                  / (length1 + length2);
        }
        if (isInverted()) {
            return max - ((value - this.displayStart) 
                / (this.fixedRange.getUpperBound() - this.displayStart)) 
                * (max - min);
        }
        else {
            return min + ((value - this.displayStart) 
                / (this.fixedRange.getUpperBound() - this.displayStart)) 
                * (max - min);