📄 curve.java~43~
字号:
package curve;import java.awt.*;import java.awt.event.*;import java.applet.*;import java.util.Vector;import java.lang.Math;public class curve { Graphics myGC; Font graphFont; int axisH; int axisW; int xOrigin; int yOrigin; int xSpacing; int ySpacing; public curve(Graphics g) { myGC=g; graphFont=new Font("宋体",Font.PLAIN,12); myGC.setFont(graphFont); myGC.setColor(new Color(255,255,255)); } public void fillImage(int W,int H){ myGC.fillRect(0,0,W,H); } // ******** 画坐标轴 ******** public void drawAxes(int W,int H){ axisW=W-100; axisH=H-100; xOrigin=(W-axisW)/2; yOrigin=(H-axisH)/2+axisH; // 绘制具有3D效果的坐标轴 myGC.setColor(Color.black); myGC.drawLine(xOrigin,yOrigin,xOrigin+axisW,yOrigin); myGC.drawLine(xOrigin,yOrigin,xOrigin,yOrigin-axisH); //myGC.setColor(Color.black); //myGC.drawLine(xOrigin,yOrigin,xOrigin+axisW,yOrigin); //myGC.drawLine(xOrigin-1,yOrigin-1,xOrigin-1,yOrigin-axisH); // 绘制 X 轴坐标箭头 int x1=xOrigin+axisW; int triXx[]={x1-4,x1,x1-4,x1-4}; int triXy[]={yOrigin+2,yOrigin,yOrigin-2,yOrigin+2}; Polygon triangleX=new Polygon(triXx,triXy,4); myGC.drawPolygon(triangleX); myGC.fillPolygon(triangleX); myGC.drawString("X",xOrigin+axisW+5,yOrigin+4); } // ******** 绘制刻度 ******** public void makeHashMarks(int nXHash,float yTop){ xSpacing=axisW/(nXHash); ySpacing=axisH/10; // 绘制 X 轴刻度 myGC.setColor(Color.black); int x=xOrigin+xSpacing; myGC.drawString(Integer.toString(0),xOrigin,yOrigin+20); // 原点 for(int t=0;t<nXHash-1;t++){ //myGC.drawLine(x,yOrigin,x,yOrigin-3); myGC.setColor(Color.black); myGC.drawString(Integer.toString(t+1),x,yOrigin+20); myGC.setColor(Color.lightGray); myGC.drawLine(x,yOrigin-1,x,yOrigin-axisH); // 竖直网格 x+=xSpacing; } /*myGC.setColor(Color.lightGray); x=xOrigin+(xSpacing/2); y=yOrigin+1; for(int t=0;t<nXHash;t++){ myGC.drawLine(x+1,y,x+1,y+5); x+=xSpacing; }*/ // 绘制 Y 轴刻度 int y=yOrigin-ySpacing; float scaleY=yTop/10; float sum=0; for(int t=0;t<10;t++){ //myGC.drawLine(xOrigin,y,xOrigin-3,y); //myGC.drawLine(xOrigin,y,xOrigin+(nXHash-1)*xSpacing,y); // 水平网格 int xx=xOrigin+(nXHash-1)*xSpacing; int x0=xOrigin+1; // 水平网格(虚线) 每段虚线长6,空白4 while(x0<xOrigin+(nXHash-1)*xSpacing){ myGC.setColor(Color.lightGray); //myGC.setColor(Color.white); myGC.drawLine(x0,y,x0+6,y); x0+=10; } // 最顶端为实线 myGC.drawLine(xOrigin,yOrigin-axisH,xOrigin+(nXHash-1)*xSpacing,yOrigin-axisH); // 清除虚线在坐标轴以外的部分 myGC.setColor(new Color(255,255,255)); myGC.fillRect(xx+1,yOrigin-axisH,6,axisH); // 写 Y 轴刻度值 sum+=scaleY; myGC.setColor(Color.black); String str=Float.toString(sum); //System.out.println(str.substring(0,str.indexOf(".")+2)); //str.substring(0,str.indexOf(".")+1); myGC.drawString(str.substring(0,str.indexOf(".")+2),xOrigin-25,y+4); y-=ySpacing; } } // ******** 清除 X 轴刻度 ******** public void clearXHashMarks(){ myGC.setColor(new Color(255,255,255)); myGC.fillRect(xOrigin,yOrigin+1,xOrigin+axisW,yOrigin+5); } // ******** 清除 Y 轴刻度值 ******** public void clearYHashMarks(){ myGC.setColor(new Color(255,255,255)); myGC.fillRect(xOrigin-30,yOrigin-axisH-10,30,axisH+10); } // 清除整个绘图区域 public void clearScreen(){ myGC.setColor(new Color(255,255,255)); myGC.fillRect(xOrigin,(yOrigin-axisH)-20,axisW+30,axisH+20); } // ******** 在曲线的顶端绘制标题 s代表标题 ******** public void makeTitle(String s){ //String temp=s; int yTemp=(yOrigin-axisH)/2; int xTemp=xOrigin; // 清除以前的文本 myGC.setColor(new Color(100,150,150)); myGC.fillRect(xTemp,yTemp-15,axisW,20); myGC.setColor(Color.blue); myGC.drawString(s,xTemp,yTemp); } // ******** 确定矢量中的最大的 Y 值 ******** public float getMaxY(Vector v){ float max=-65535; for(int i=0;i<v.size();i++){ //String str=(String)v.elementAt(i); float temp=((Float)v.elementAt(i)).floatValue(); if(temp>max) max=temp; } return(max); } // ******** 取坐标轴的最大长度 ******** /*public float getTopY(Vector v){ float yTop=0; float y_max=getMaxY(v); if(y_max>=10){ yTop=((int)(getMaxY(v)/10)+1)*10; //yTop=Math.round(getMaxY(v))+1; }else { yTop=((y_max%10)+0.1)*10.0; } return yTop; }*/ // ******** 给定包含数据的矢量对象,该方法将在图像上显示数据,v 代表初始化的矢量对象。 public void showData(Vector v){ int xPoint; int yPoint; // 确定第一个数据点的 X 坐标 xPoint=xOrigin; int oldX=0; int oldY=0; float max=getMaxY(v); // 在数据点上绘制小圆 for(int j=0;j<v.size();j++){ yPoint=yOrigin-(int)((axisH/max)*((Float)v.elementAt(j)).floatValue()); myGC.setColor(Color.blue); myGC.fillRect(xPoint-1,yPoint,3,3); // 在数据点间绘制线--红色 myGC.setColor(Color.red); if ((oldX!=0)&&(oldY!=0)){ myGC.drawLine(oldX-xSpacing,oldY,xPoint,yPoint); } // 在数据点旁边写数据点值--蓝色 myGC.setColor(Color.blue); String coordString=Float.toString(((Float)v.elementAt(j)).floatValue()); myGC.drawString(coordString,xPoint+5,yPoint-5); xPoint+=xSpacing; oldX=xPoint; oldY=yPoint; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -