Se que es posible graficar funciones trigonométricas en Java, pero la verdad no se por donde comenzar, ni como crear el plano para comenzar.
¿Será que Java tiene funciones predeterminadas para hacer esto?.
|
|
#1 (permalink) |
![]() Fecha de Ingreso: enero-2005
Mensajes: 22
|
Se que es posible graficar funciones trigonométricas en Java, pero la verdad no se por donde comenzar, ni como crear el plano para comenzar. ¿Será que Java tiene funciones predeterminadas para hacer esto?. |
|
|
|
|
|
#2 (permalink) |
![]() Fecha de Ingreso: enero-2005
Mensajes: 22
|
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); } } |
|
|
|
|
|
#4 (permalink) |
![]() Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 1.995
|
Ok, quieres hacer una grafica de la funcion SIN(x) ?? si eso es lo que deseas hacer pues este codigo te puede ayudar, es un applet que grafica una funcion sin(x), igual puedes modificarle la ecuacion y ponerle la funcion que tu quieras!!
Código:
/*
* Author: Crysfel Villa
* Created: Monday, April 18, 2005 7:45:59 PM
* Modified: Monday, April 18, 2005 7:45:59 PM
*/
import java.applet.*;
import java.net.*;
import java.awt.*;
import java.math.*;
public class Graficos extends Applet
{
Button btnGraficar;
TextField txtNum1,txtNum2;
int num1,num2;
public void init(){
setLayout(null);
btnGraficar = new Button("Graficar");
txtNum1 = new TextField("-5");
txtNum2 = new TextField("5");
txtNum1.reshape(10,10,90,20);
txtNum2.reshape(110,10,90,20);
btnGraficar.reshape(310,10,60,20);
add(txtNum1);
add(txtNum2);
add(btnGraficar);
show();
}
public void paint (Graphics p)
{
p.drawString ("Ejemplo de Graficas en Applets", 110,50);
p.drawString ("-- By Crysfel Villa", 130, 80);
hacerGrafica();
}
public void hacerGrafica(){
Graphics p = getGraphics();
double punto,y;
p.setColor(new Color(255,255,255));
p.fillRect(51,100,299,200); //Fondo para que borre a las anteriores
p.setColor(new Color(0,0,0));
p.drawLine(50,300,300,300); //eje horizontal
p.drawLine(150,100,150,350); //eje vertical
p.setColor(new Color(255,0,0));
for(double x=num1;x < num2;x+=0.01){
punto = 150 + x*30;
y = 300 - Math.sin(x)*30;
p.drawLine((int)punto,(int)y,(int)punto + 1,(int)y + 1);
}
}
public boolean getDatos(){
boolean temp = true;
try
{
num1 = Integer.parseInt(txtNum1.getText());
num2 = Integer.parseInt(txtNum2.getText());
}
catch(Exception exc)
{
System.out.println("Error :)" + exc);
temp = false;
}
return temp;
}
public boolean action(Event e, Object o){
if (e.target == btnGraficar){
if(getDatos())
hacerGrafica();
}
return true;
}
}
__________________
Don't hate the languaje, hate the runtime environment Crysfel's Blog :: Blog de programación, JAVA,PHP, AJAX, JavaScript, CSS y otras hierbas |
|
|
|