package grafica; import java.awt.*; public class MiCanvas extends Canvas { //anchura y altura del canvas int anchoCanvas, altoCanvas; //origenes int orgY, orgX; //escalas double escalaX, escalaY; //masas de las moléculas en u.m.a final int masa[]={2, 32, 28, 4, 10, 18}; double cociente; //número de partículas final int N=10000; //colores de las funciones int nGrafica=-1; static final Color color[]={new Color(255,0,0), new Color(0, 255,0), new Color(0, 0, 255), new Color(0, 255, 255), new Color(255, 0, 255), new Color(255, 255, 0), new Color(128, 0, 0), new Color(255, 128, 0), new Color(0, 64, 64), new Color(128, 128, 255), new Color(128, 0, 64), new Color(255, 0, 128), new Color(192, 192, 192), new Color(128, 128, 0)}; public MiCanvas() { setBackground(Color.white); } void setNuevo(double temperatura, int indice){ cociente=(1.67e-27*masa[indice])/(2*temperatura*1.38e-23); nGrafica++; if(nGrafica>13){ nGrafica=0; } dibujaFuncion(); } void origen(Graphics g){ anchoCanvas=getSize().width; altoCanvas=getSize().height; FontMetrics fm=g.getFontMetrics(); int charAlto=fm.getHeight(); int charAncho=fm.stringWidth("0"); //orígenes orgX=5*charAncho; orgY=altoCanvas-2*charAlto; //escalas escalaX=(double)(anchoCanvas-orgX-3*charAncho)/3000; escalaY=(double)(altoCanvas-3*charAlto)/20; } void dibujaEjes(Graphics g){ FontMetrics fm=g.getFontMetrics(); int descent=fm.getDescent(); int charAlto=fm.getHeight(); int charAncho=fm.stringWidth("0"); //borra el canvas g.setColor(getBackground()); g.fillRect(0,0, anchoCanvas, altoCanvas); g.setColor(Color.black); //eje horizontal g.drawLine(orgX-charAncho, orgY, anchoCanvas, orgY); g.drawString("v(m/s)", anchoCanvas-4*charAncho, orgY); int x1, y1; for(int i=0; i<=3; i++){ x1=orgX+(int)(1000*i*escalaX); g.drawLine(x1, orgY+charAncho/2, x1, orgY-charAncho/2); String str=String.valueOf(i*1000); g.drawString(str, x1-fm.stringWidth(str)/2, orgY+charAlto); if(i==3) break; for(int j=1; j<5; j++){ x1=orgX+(int)((1000*i+(double)(1000*j)/5)*escalaX); g.drawLine(x1, orgY+charAncho/4, x1, orgY-charAncho/4); } } //eje vertical g.drawLine(orgX, 0, orgX, altoCanvas-charAlto); g.drawString("dn/dv", orgX+charAncho, charAlto); for(int i=0; i<=20; i+=5){ y1=orgY-(int)(i*escalaY); g.drawLine(orgX+charAncho/2, y1, orgX-charAncho/2, y1); String str=String.valueOf(i); g.drawString(str, orgX-fm.stringWidth(str)-charAncho/2, y1+charAlto/2-descent); if(i==20) break; for(int j=1; j<5; j++){ y1=orgY-(int)((i+(double)(j))*escalaY); g.drawLine(orgX+charAncho/4, y1, orgX-charAncho/4, y1); } } } double f(double v){ double y=4*N*Math.PI*Math.pow(cociente/Math.PI, 1.5)*Math.exp(-cociente*v*v)*v*v; return y; } void dibujaFuncion(){ Graphics g=getGraphics(); int x1=orgX, y1=orgY, x2, y2; g.setColor(color[nGrafica]); for(double v=0; v<3000; v+=10){ y2=orgY-(int)(f(v)*escalaY); x2=orgX+(int)(v*escalaX); g.drawLine(x1, y1, x2, y2); x1=x2; y1=y2; } g.dispose(); } public void paint(Graphics g){ origen(g); dibujaEjes(g); } }