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

📄 paintscale.java

📁 Libgist is an implementation of the Generalized Search Tree, a template index structure that makes i
💻 JAVA
字号:
// PaintScale.java// Copyright (c) 1998, Regents of the University of California// $Id: PaintScale.java,v 1.1 1999/06/21 00:34:25 marcel Exp $import java.awt.*;public class PaintScale {private static float truncate(float d, int digits){    float p = (float) Math.pow(10.0, (double) digits);    return ((float) ((int) (d * p))/p);}public static int vertical(Graphics g, int xmin, int ymin,    int ymax, float min, float max, int numTicks, int rightalign) {    // its actually faster if you give us the fontmetrics ... but if it    // isn't possible ... or too hard to change for now ... call this method.    return vertical(g, g.getFontMetrics(), xmin, ymin, ymax, min, max,	numTicks, rightalign);	}public static int vertical(Graphics g, FontMetrics fm, int xmin, int ymin,     int ymax, float min, float max, int numTicks, int rightalign) {    int h = ymax - ymin;        float range = max - min;    int i;    float d  = (float) h / (float) numTicks;    float dv = (float) range / (float) numTicks;    float value;    // float mintrunc = truncate(min,3);    int pos;    int strh;    int strw = 0;    int maxstrw = 0;        strh = fm.getHeight() - fm.getDescent() - 1;    g.setColor(Color.black);    // Find maximum string width ...    for (i = 0; i <= numTicks; i++) {	value = truncate(( ((float) i) * dv ) + min , 3);		strw = fm.stringWidth(Float.toString(value));	if (strw > maxstrw)	    maxstrw = strw;    }    String valstr;    for (i = 0; i <= numTicks; i++) {	pos = h - (int) Math.floor(i*d); // make it go backwarks ...	value = truncate(( ((float) i) * dv ) + min , 3 );	valstr = Float.toString(value);	strw = fm.stringWidth(valstr);	if (rightalign == 0) {	    g.drawString(valstr, xmin + 6, ymin + pos + strh / 2);	    g.drawLine( xmin, ymin + pos, xmin + 4, ymin + pos);	} else {	    	    // if (value > 100)	    // 		System.out.println(valstr + " " + xmin + " " + strw + " " +	    // 		    maxstrw + " " + (xmin - strw + maxstrw));	    g.drawString(valstr, xmin + maxstrw - strw, ymin + pos + strh / 2);	    g.drawLine( xmin + maxstrw + 2, ymin + pos, xmin + maxstrw + 6,		ymin + pos );	}	// g.drawString(valstr, xmin + 6, ymin + pos + strh / 2);		// g.drawLine( xmin, ymin + pos, xmin + 4, ymin + pos);    }    //     pos = ymin; // make it go backwards ...    //     g.drawLine( xmin, pos, xmin + 4, pos);//     max = (float) (Math.rint(i*dv*100) / 100.0) + min;    //     strw = fm.stringWidth(Float.toString(max));//     if (strw > maxstrw)// 	maxstrw = strw;//     g.drawString(Float.toString(max),// 	xmin + 6, pos + strh / 2);    return maxstrw + 6;}// returns width excess to the right ...public static int horizontal(Graphics g, int ymin, int xmin,    int xmax, float min, float max, int numTicks) {    // its actually faster if you give us the fontmetrics ... but if it    // isn't possible ... or too hard to change for now ... call this method.    return horizontal(g, g.getFontMetrics(), ymin, xmin, xmax, min, max,	numTicks);	}public static int horizontal(Graphics g, FontMetrics fm, int ymin, int xmin,     int xmax, float min, float max, int numTicks) {    float value =  truncate(max, 3);    // ((float) ((int)Math.rint(max*(float)1000)) / (float) 1000);    int strw = fm.stringWidth(Float.toString(value));        strw -= strw / 2;        int w = xmax - strw - xmin;    if ( w < 0 )	return w;        float range = max - min;    // float mintrunc = (float)((int)Math.rint(min*(float)1000))/(float)1000;    int i;    float d  = (float) w / (float) numTicks;    float dv = (float) range / (float) numTicks;    int pos;    int strh;        strh = fm.getHeight() - fm.getDescent();    g.setColor(Color.black);    // Find maximum string width ... .. what for over here? ...//     for (i = 0; i < numTicks; i++) {// 	value = (float) (Math.rint(i*dv*1000) / 1000.0) + min;	// 	strw = fm.stringWidth(Float.toString(value));// 	if (strw > maxstrw)// 	    maxstrw = strw;//     }    String valstr;    for (i = 0; i <= numTicks; i++) {		pos = (int) Math.floor(i*d); // goes forewords ... 	// value = (float)((int) Math.rint((float)i*dv*(float)1000) /(float)1000) + 	// mintrunc;	value = truncate(( ((float) i) * dv ) + min, 3);	valstr = Float.toString(value);	strw = fm.stringWidth(valstr);		g.drawLine(xmin + pos, ymin, xmin + pos, ymin + 4);	g.drawString(valstr, xmin + pos - strw / 2, ymin + 4 + strh);    }    // return strw - (strw / 2);    return w;}}

⌨️ 快捷键说明

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