AYUDA con esto de las gráficas Encontré este código excelente, que grafica velocidades moléculas, la verdad estoy intentando guiarme de el para crear algo parecido que me grafique las funciones del seno y coseno, pero la verdad, creo que es muy avanzado para mis conocimientos, ya que solo deseo hacer dos graficas, solo que quiero una presentación igual, ósea graficar los ejes de coordenadas X, coordenadas Y, y la escala que la quiero con dichos valores.
Espero alguien me pueda ayudar.
Colocare el código de programa: esta en 2 clases bueno aquí van:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class GraficaApplet extends Applet {
MiCanvas canvas;
boolean isStandalone = false;
Panel panel1 = new Panel();
Panel panel2 = new Panel();
Panel panel3 = new Panel();
Panel panel4 = new Panel();
FlowLayout flowLayout1 = new FlowLayout();
FlowLayout flowLayout2 = new FlowLayout();
FlowLayout flowLayout3 = new FlowLayout();
BorderLayout borderLayout1 = new BorderLayout();
BorderLayout borderLayout2 = new BorderLayout();
Label label1 = new Label();
Choice chGases = new Choice();
Label label2 = new Label();
TextField tTemperatura = new TextField();
Button btnGrafica = new Button();
Button btnBorrar = new Button();
//Construct the applet
public GraficaApplet() {
}
//Initialize the applet
public void init() {
try { jbInit(); } catch (Exception e) { e.printStackTrace(); }
}
//Component initialization
public void jbInit() throws Exception{
int ancho = Integer.parseInt(this.getParameter("WIDTH"));
int alto = Integer.parseInt(this.getParameter("HEIGHT"));
this.setSize(new Dimension(ancho, alto));
canvas=new MiCanvas();
panel1.setBackground(Color.lightGray);
panel4.setBackground(Color.gray);
panel1.setLayout(borderLayout1);
panel4.setLayout(flowLayout3);
panel3.setLayout(flowLayout2);
panel2.setLayout(flowLayout1);
flowLayout1.setVgap(1);
flowLayout2.setVgap(1);
flowLayout3.setVgap(1);
this.setLayout(borderLayout2);
String str[]={"Hidrógeno (H2)", "Oxígeno (O2)", "Nitrógeno (N2)", "Helio (He)", "Neón (Ne)", "Argón (Ar)"};
for(int i=0; i<str.length; i++){
chGases.addItem(str[i]);
}
label1.setText("Gas");
label2.setText("Temperatura (ºK)");
tTemperatura.setColumns(5);
tTemperatura.setText("500");
ValidaDouble valDouble=new ValidaDouble();
tTemperatura.addFocusListener(valDouble);
btnGrafica.setFont(new Font("Dialog", 1, 12));
btnGrafica.setLabel("Gráfica");
btnGrafica.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
btnGrafica_actionPerformed(e);
}
});
btnBorrar.setLabel("Borrar");
btnBorrar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
btnBorrar_actionPerformed(e);
}
});
this.add(panel1, BorderLayout.SOUTH);
this.add(canvas, BorderLayout.CENTER);
panel1.add(panel2, BorderLayout.WEST);
panel2.add(label1, null);
panel2.add(chGases, null);
panel1.add(panel3, BorderLayout.CENTER);
panel3.add(label2, null);
panel3.add(tTemperatura, null);
panel1.add(panel4, BorderLayout.EAST);
panel4.add(btnGrafica, null);
panel4.add(btnBorrar, null);
}
void btnGrafica_actionPerformed(ActionEvent e) {
double temperatura=Double.valueOf(tTemperatura.getText()) .doubleValue();
int indice=chGases.getSelectedIndex();
canvas.setNuevo(temperatura, indice);
}
void btnBorrar_actionPerformed(ActionEvent e) {
canvas.repaint();
}
}
class ValidaDouble extends FocusAdapter{
public void focusLost(FocusEvent ev){
TextField tEntrada=(TextField)(ev.getSource());
try{
Double.valueOf(tEntrada.getText()).doubleValue();
}catch(NumberFormatException e){
tEntrada.requestFocus();
tEntrada.selectAll();
}
}
}
y la otra clase es:
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);
}
} |