Foros del Web » Programación para mayores de 30 ;) » Java »

Ayuda para Graficar Funciones trigonométricas.

Estas en el tema de Ayuda para Graficar Funciones trigonométricas. en el foro de Java en Foros del Web. Deseo graficar la función Seno y la Coseno. Se que es posible graficar funciones trigonométricas en Java, pero la verdad no se por donde comenzar, ...
  #1 (permalink)  
Antiguo 15/03/2005, 21:47
 
Fecha de Ingreso: enero-2005
Mensajes: 22
Antigüedad: 19 años, 3 meses
Puntos: 0
Pregunta Ayuda para Graficar Funciones trigonométricas.

Deseo graficar la función Seno y la Coseno.

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)  
Antiguo 26/03/2005, 00:31
 
Fecha de Ingreso: enero-2005
Mensajes: 22
Antigüedad: 19 años, 3 meses
Puntos: 0
De acuerdo 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);
}
}
  #3 (permalink)  
Antiguo 17/04/2005, 19:26
 
Fecha de Ingreso: septiembre-2004
Mensajes: 66
Antigüedad: 19 años, 7 meses
Puntos: 0
talvez te sirva chartdirector busca en google
  #4 (permalink)  
Antiguo 18/04/2005, 19:16
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
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;
	}
		

}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:51.