⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logarithmicaxis.java

📁 这是一个segy数据显示程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
                if (currentTickValue > upperBoundVal) {                    return ticks;   //if past highest data value then exit method                }                if (currentTickValue >= lowerBoundVal - SMALL_LOG_VALUE) {                    //tick value not below lowest data value                    TextAnchor anchor = null;                    TextAnchor rotationAnchor = null;                    double angle = 0.0;                    if (isVerticalTickLabels()) {                        anchor = TextAnchor.CENTER_RIGHT;                        rotationAnchor = TextAnchor.CENTER_RIGHT;                        if (edge == RectangleEdge.TOP) {                            angle = Math.PI / 2.0;                        }                        else {                            angle = -Math.PI / 2.0;                        }                    }                    else {                        if (edge == RectangleEdge.TOP) {                            anchor = TextAnchor.BOTTOM_CENTER;                            rotationAnchor = TextAnchor.BOTTOM_CENTER;                        }                        else {                            anchor = TextAnchor.TOP_CENTER;                            rotationAnchor = TextAnchor.TOP_CENTER;                        }                    }                    Tick tick = new NumberTick(                        new Double(currentTickValue), tickLabel, anchor, rotationAnchor, angle                    );                    ticks.add(tick);                }            }        }        return ticks;    }    /**     * Calculates the positions of the tick labels for the axis, storing the     * results in the tick label list (ready for drawing).     *     * @param g2  the graphics device.     * @param cursor  the cursor position.     * @param plotArea  the area in which the plot and the axes should be drawn.     * @param dataArea  the area in which the plot should be drawn.     * @param edge  the axis location.     *      * @return A list of ticks.     */    public List refreshTicksVertical(Graphics2D g2, double cursor,                                     Rectangle2D plotArea, Rectangle2D dataArea,                                     RectangleEdge edge) {        List ticks = new java.util.ArrayList();        //FontMetrics fm = g2.getFontMetrics(getTickLabelFont());        //get lower bound value:        double lowerBoundVal = getRange().getLowerBound();        //if small log values and lower bound value too small        // then set to a small value (don't allow <= 0):        if (this.smallLogFlag && lowerBoundVal < SMALL_LOG_VALUE) {            lowerBoundVal = SMALL_LOG_VALUE;        }        //get upper bound value        final double upperBoundVal = getRange().getUpperBound();        //get log10 version of lower bound and round to integer:        int iBegCount = (int) Math.rint(switchedLog10(lowerBoundVal));        //get log10 version of upper bound and round to integer:        final int iEndCount = (int) Math.rint(switchedLog10(upperBoundVal));        if (iBegCount == iEndCount && iBegCount > 0 && Math.pow(10, iBegCount) > lowerBoundVal) {              //only 1 power of 10 value, it's > 0 and its resulting              // tick value will be larger than lower bound of data          --iBegCount;       //decrement to generate more ticks        }        double tickVal;        String tickLabel;        boolean zeroTickFlag = false;        for (int i = iBegCount; i <= iEndCount; i++) {            //for each tick with a label to be displayed            int jEndCount = 10;            if (i == iEndCount) {                jEndCount = 1;            }            for (int j = 0; j < jEndCount; j++) {                //for each tick to be displayed                if (this.smallLogFlag) {                    //small log values in use                    tickVal = Math.pow(10, i) + (Math.pow(10, i) * j);                    if (j == 0) {                        //first tick of group; create label text                        if (this.log10TickLabelsFlag) {                            //if flag then                            tickLabel = "10^" + i;      //create "log10"-type label                        }                        else {    //not "log10"-type label                            if (this.expTickLabelsFlag) {                                //if flag then                                tickLabel = "1e" + i;   //create "1e#"-type label                            }                            else {    //not "1e#"-type label                                if (i >= 0) {   //if positive exponent then make integer                                    NumberFormat format = getNumberFormatOverride();                                    if (format != null) {                                        tickLabel = format.format(tickVal);                                       }                                    else {                                        tickLabel =  Long.toString((long) Math.rint(tickVal));                                       }                                }                                else {                                    //negative exponent; create fractional value                                    //set exact number of fractional digits to be shown:                                    this.numberFormatterObj.setMaximumFractionDigits(-i);                                    //create tick label:                                    tickLabel = this.numberFormatterObj.format(tickVal);                                }                            }                        }                    }                    else {   //not first tick to be displayed                        tickLabel = "";     //no tick label                    }                }                else { //not small log values in use; allow for values <= 0                    if (zeroTickFlag) {      //if did zero tick last iter then                        --j;                    }               //decrement to do 1.0 tick now                    tickVal = (i >= 0) ? Math.pow(10, i) + (Math.pow(10, i) * j)                                       : -(Math.pow(10, -i) - (Math.pow(10, -i - 1) * j));                    if (j == 0) {  //first tick of group                        if (!zeroTickFlag) {     //did not do zero tick last iteration                            if (i > iBegCount && i < iEndCount                                              && Math.abs(tickVal - 1.0) < 0.0001) {                                //not first or last tick on graph and value is 1.0                                tickVal = 0.0;        //change value to 0.0                                zeroTickFlag = true;  //indicate zero tick                                tickLabel = "0";      //create label for tick                            }                            else {                                //first or last tick on graph or value is 1.0                                //create label for tick:                                if (this.log10TickLabelsFlag) {                                       //create "log10"-type label                                    tickLabel = (((i < 0) ? "-" : "") + "10^" + Math.abs(i));                                }                                else {                                    if (this.expTickLabelsFlag) {                                           //create "1e#"-type label                                        tickLabel = (((i < 0) ? "-" : "") + "1e" + Math.abs(i));                                    }                                    else {                                        NumberFormat format = getNumberFormatOverride();                                        if (format != null) {                                            tickLabel = format.format(tickVal);                                           }                                        else {                                            tickLabel =  Long.toString((long) Math.rint(tickVal));                                        }                                    }                                }                            }                        }                        else {     // did zero tick last iteration                            tickLabel = "";         //no label                            zeroTickFlag = false;   //clear flag                        }                    }                    else {       // not first tick of group                        tickLabel = "";           //no label                        zeroTickFlag = false;     //make sure flag cleared                    }                }                if (tickVal > upperBoundVal) {                    return ticks;     //if past highest data value then exit method                }                if (tickVal >= lowerBoundVal - SMALL_LOG_VALUE) {                    //tick value not below lowest data value                    TextAnchor anchor = null;                    TextAnchor rotationAnchor = null;                    double angle = 0.0;                    if (isVerticalTickLabels()) {                        if (edge == RectangleEdge.LEFT) {                            anchor = TextAnchor.BOTTOM_CENTER;                            rotationAnchor = TextAnchor.BOTTOM_CENTER;                            angle = -Math.PI / 2.0;                        }                        else {                            anchor = TextAnchor.BOTTOM_CENTER;                            rotationAnchor = TextAnchor.BOTTOM_CENTER;                            angle = Math.PI / 2.0;                        }                    }                    else {                        if (edge == RectangleEdge.LEFT) {                            anchor = TextAnchor.CENTER_RIGHT;                            rotationAnchor = TextAnchor.CENTER_RIGHT;                        }                        else {                            anchor = TextAnchor.CENTER_LEFT;                            rotationAnchor = TextAnchor.CENTER_LEFT;                        }                    }                    //create tick object and add to list:                    ticks.add(                        new NumberTick(                            new Double(tickVal), tickLabel, anchor, rotationAnchor, angle                        )                    );                }            }        }        return ticks;    }    /**     * Converts the given value to a tick label string.     *     * @param val the value to convert.     * @param forceFmtFlag true to force the number-formatter object     * to be used.     *     * @return The tick label string.     */    protected String makeTickLabel(double val, boolean forceFmtFlag) {        if (this.expTickLabelsFlag || forceFmtFlag) {            //using exponents or force-formatter flag is set            // (convert 'E' to lower-case 'e'):            return this.numberFormatterObj.format(val).toLowerCase();        }        return getTickUnit().valueToString(val);    }    /**     * Converts the given value to a tick label string.     * @param val the value to convert.     *     * @return The tick label string.     */    protected String makeTickLabel(double val) {        return makeTickLabel(val, false);    }        //// DEPRECATED CODE //////////////////////////////////////////////////////////////////////////        /**     * Converts a data value to a coordinate in Java2D space, assuming that     * the axis runs along one edge of the specified plotArea.     * Note that it is possible for the coordinate to fall outside the     * plotArea.     *     * @param value  the data value.     * @param plotArea  the area for plotting the data.     * @param edge  the axis location.     *     * @return the Java2D coordinate.     *      * @deprecated Use valueToJava2D().     */    public double translateValueToJava2D(double value, Rectangle2D plotArea,                                         RectangleEdge edge) {        Range range = getRange();        double axisMin = switchedLog10(range.getLowerBound());        double axisMax = switchedLog10(range.getUpperBound());        double min = 0.0;        double max = 0.0;        if (RectangleEdge.isTopOrBottom(edge)) {            min = plotArea.getMinX();            max = plotArea.getMaxX();        }        else if (RectangleEdge.isLeftOrRight(edge)) {            min = plotArea.getMaxY();            max = plotArea.getMinY();        }        value = switchedLog10(value);        if (isInverted()) {            return max - (((value - axisMin) / (axisMax - axisMin)) * (max - min));        }        else {            return min + (((value - axisMin) / (axisMax - axisMin)) * (max - min));        }    }    /**     * Converts a coordinate in Java2D space to the corresponding data     * value, assuming that the axis runs along one edge of the specified plotArea.     *     * @param java2DValue  the coordinate in Java2D space.     * @param plotArea  the area in which the data is plotted.     * @param edge  the axis location.     *     * @return the data value.     *      * @deprecated Use java2DToValue().     */    public double translateJava2DToValue(double java2DValue, Rectangle2D plotArea,                                         RectangleEdge edge) {        Range range = getRange();        double axisMin = switchedLog10(range.getLowerBound());        double axisMax = switchedLog10(range.getUpperBound());        double plotMin = 0.0;        double plotMax = 0.0;        if (RectangleEdge.isTopOrBottom(edge)) {            plotMin = plotArea.getX();            plotMax = plotArea.getMaxX();        }        else if (RectangleEdge.isLeftOrRight(edge)) {            plotMin = plotArea.getMaxY();            plotMax = plotArea.getMinY();        }        if (isInverted()) {            return Math.pow(                10, axisMax - ((java2DValue - plotMin) / (plotMax - plotMin)) * (axisMax - axisMin)            );        }        else {            return Math.pow(                10, axisMin + ((java2DValue - plotMin) / (plotMax - plotMin)) * (axisMax - axisMin)            );        }    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -