software matematico manual
TRANSCRIPT
-
7/23/2019 Software Matematico Manual
1/27
Crea tu Software
Matematico conJAVA
Introduccin
Dentro de este manual, usted aprender a desarrollar un software matemtico con el lenguaje de
programacin Java. Esta manual lo desarrollo con la intencin de que los estudiantes o cualquier
otro interesado, pueda desarrollar este tipo de software ya que muchas veces los profesores solo
dicen que lo hagamos, pero no sabemos por dnde comenzar, o si lo sabemos no imaginamos como
generalizar un programa para cualquier ecuacin. Este manual enseara como crear un software
matemtico para resolver integrales por mtodos numricos, graficar ecuaciones en 2D y 3D.
Espero este manual sea de utilidad a muchas personas, recuerden no robarse solamente el cdigo,
siempre es mejor comprender y hacerlo por uno mismo, o por lo menos citen la fuente, no es
vergonzoso utilizar cdigo de otros, lo malo es no darles el crdito.
By: John Michel Rivera De Len.
E-mail: [email protected]
Viv tu vida, como te gustara
que tus hijos vivieran la suya
-
7/23/2019 Software Matematico Manual
2/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
1
InformacionEl presente documento
pretende ser una gua
para comprender como
elaborar un software
matemtico. Dado que
muchos profesores no
tienen ni idea y
solamente dejan este
tipo de proyectos sin
orientar al estudiante.
RequerimientosSoftware necesarioPara agilizar la creacin del software utilizare el IDE de Netbeans, en
este caso utilice la versin 6.9.1 pero esto no afecta en nada al
desarrollo. Lo que si vamos a necesitar es el siguiente software:
1.-El paquete de libreras para 3D de java:
java3d-1_5_1-windows-i586.exe
2.-El JDK para compilar los archivos fuentes de java, puede ser
cualquier versin de la 1.6 en adelante:
jdk-7u1-windows-i586.exe
Libreras 3DEl paquete de libreras 3D nos permitir movernos dentro de las
grficas como en un video juego, este archivo lo adjunto con esta
gua, pero pueden descargarlo desde la pgina de Oracle.
JDKAlgunos pensaran que es obvio el JDK para desarrollar, pero este se
utilizara para compilar los genricos de cualquier ecuacin dada.
Este es el problema al que muchos no pueden dar solucin ya que
crean el algoritmo para resolver una ecuacin especfica, pero no
saben cmo hacer crear un algoritmo que solucione cualquier
ecuacin que el usuario introduzca. Ms adelante profundizaremos
en cmo hacer esto.
-
7/23/2019 Software Matematico Manual
3/27
2
[Escribaelno
mbredelacompaa]
Preparando el Ambiente de DesarrolloBien, empecemos, primero debemos instalar las libreras de 3D, aqu una nota muy
importante: Si disponemos de ms de un JDK como en mi caso, que tengo el 1.6 y el 1.7 al
instalar las libreras 3D debemos estar atentos donde se instalaran, ya que se instalan siempre
en el JDK ms actualizado. Deberemos escoger este a la hora de desarrollar el proyecto, si solo
tiene un JDK no es necesaria esta advertencia xD.
Ya que tenemos instaladas las libreras 3D, abrimos nuestro IDE y para agilizar el desarrollo
crearemos un nuevo proyecto Java y seleccionamos Desktop application.
Creamos el proyecto con el nombre que querramos y finalizamos.
Esto nos creara nuestro proyecto con varios paquetes, nos dirigimos a source packages y
abrimos el principal que tiene el nombre de la aplicacin, ah esta nuestro frame principal que
sera nuestro menu, este tiene el nombre del proyecto View:
-
7/23/2019 Software Matematico Manual
4/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
3
Aqu arrastramos los botones del lado derecho y s queremos adjuntamos imgenes.
Primero creamos nuestra boton de configuracion para que corra sobre cualquier maquina.
Ahora vamos nuevamente alpaquete principal en este caso llamado tobi_soft_reloaded.
Ah damos click derecho y creamos un nuevo JFrame Form, le asignamos el nombre de Config
y finalizamos. Esto genera un nuevo frame donde igual quel anterior asignaremos botones y
campos de texto para configurar el software.
A este nuevo frame de config le crearemoslos botones y campo de texto como se muestra en
la siguiente imagen:
-
7/23/2019 Software Matematico Manual
5/27
4
[Escribaelno
mbredelacompaa]
Esto nos permitira almacenar la informacion de donde se encuantra el JDK para compilar
nuestros archivos de ecuaciones. Los botnes del JDK y librerias es por si queremos que corra
en cualquier otra PC que no tiene las librerias ni el JDK. Mas adelante el codigo de cada boton.
Ya que creamos el frame de condiguracion debemos vincularlo con el frame del menu
principal para que al dar click en configurar aparesca este frame.
Esto es dando click derecho al boton configuracion del menu principal, luego eventos y action,
action performed, esto nos enviara al codigo del boton.
-
7/23/2019 Software Matematico Manual
6/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
5
Dentro del codigo del boton intrudicimos este codigo:
Config xd= new Config();
xd.show(true);
Esto es para instanciar y mostrar el frame.
Ahora podemos configurar los botones del frame de configuracion, para esto
Programamos primero el botn de instalar el JDK y tambin el de las libreras 3D. Vamos al
botn del JDK o libreras e introducimos el cdigo:
try{ String ap="cmd /c jdk-7u1-windows-i586.exe";
Process proceso=Runtime.getRuntime().exec(ap);}catch(Exception g){ }
Esto ejecuta en lnea de comandos los archivos exe para correr en la mquina que no
disponga de JDK o libreras 3D, para ambos es el mismo cdigo, solo cambia el nombre del
ejecutable.
Ahora programamos el botn de guardar la direccin del jdk para no tener que introducirla
cada vez, el cdigo es:
File xd = new File("dir.txt");
xd.delete();
RandomAccessFile fil;
try {
fil = new RandomAccessFile("dir.txt", "rw");
fil.seek(fil.length());
String dir=jTextField1.getText();
fil.writeBytes(dir);
fil.close();
JOptionPane.showMessageDialog(this, "Su Archivo Fue Guardado Con Exito!");
}catch(Exception e){};
Con esto creamos un archivo donde almacenamos la cadena que se introdujo en el JTextfieldque creamos, verifiquen que el nombre sea el mismo.
-
7/23/2019 Software Matematico Manual
7/27
6
[Escribaelno
mbredelacompaa]
Para el botn de cerrar, solo introducimos el cdigo this.dispose(); , de esta manera solo se
cierra ese frame sin afectar a la aplicacin, el botn del acceso directo no importa, de todas
formas se adjunta el cdigo fuente al final por si quieren hacerlo.
Creacion de los algoritmos matematicosOk ya paso lo fcil, ahora crearemos un mtodo numrico para resolver Integrales, crearemos
el mtodo de Simpson 3/8. En este se observa cmo crear el mtodo para resolver cualquierecuacin matemtica.
Metodo de Simpson 3/8Este se cre a la antigita, todo a manita, nada de ayudantes para arrastrar botones.
Bien se supone que al realizar un software como este el estudiante ya es diestro en el manejo
de los frames, as que explicare a rasgos generales solo poniendo nfasis en cmo hacer que
funcione cualquier ecuacin y como compilarla.
Primero creamos nuestro archivo java y declaramos que es JFrame y establecemos sus
medidas y creamos los botones y JTextField
-
7/23/2019 Software Matematico Manual
8/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
7
Creamos una interfaz como la siguiente, si gustan pueden hacerla como el asistonto.
Yo lo hice a manita, as que vean bien el cdigo al final por si tienen dudas. Suponiendo que ya
crearon un Frame como el de la figura, ahora programaremos el botn de Resolver que es el
que hace todo.
Dentro de la accin del botn asignamos valores a las variables globales
double xa,xb,tolerancia;
int contador, contador2;
String funcion,error;
b1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
xa=Double.parseDouble(t1.getText().toString());
xb=Double.parseDouble(t2.getText().toString());
funcion=t5.getText().toString();
-
7/23/2019 Software Matematico Manual
9/27
8
[Escribaelno
mbredelacompaa]
try{
try{
File xp= new File("test1.class");
File xd2= new File("test1.java");
File xd3= new File("launch.bat");
xd3.delete();
xd2.delete();
xp.delete();}catch(Exception o){}
Asignamos valores a las variables de lmites, la tolerancia para que sea ms exacta, el
incremento y la segmentacin, despus se crean los archivos para el cdigo fuente que es el
.java, el ejecutable .class y el archivo bat que contiene la instruccin para ejecutar el .class.
Archivo BATEste contiene la instruccin para ejecutar el archivo fuente .java, este archivo bat lo creamos
en el block de notas y le asignamos el cdigo: java test1. Esto para que ejecute el class.
Este archivo lo guardamos en la carpeta del proyecto, tanto en la principal como en la carpeta
dist. Recuerden que cada vez que limpian y compilan el proyecto se borran los archivos de la
carpeta dist, as que recuerden copiar el bat cada vez que recompilaron.
Muy bien continuando con el cdigo del botn resolver.
Ahora creamos un textfield para asignarle la funcin matematica, en este caso hacemos usode la opcin de seleccin de texto para cortar la ecuacin:
JTextField temp= el.TextFields(0, 0);
t5.select(5, funcion.length());
String ecuacionxD= t5.getSelectedText().toString();
Aqu ya le asignamos el valor de la ecuacin a la variable ecuacionxD. Ejemplo:
f(x)=(Math.pow(xn,4))
suponiendo que esa es la ecuacin al ejecutar el select, seleccionamos desde el espacio 5 enadelante, es decir : 0f1(2x3)4=5 (Math.pow(xn,4)). Omitimos el f(x)=.
-
7/23/2019 Software Matematico Manual
10/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
9
Ahora utilizamos archivos de acceso aleatorio y abrimos nuestros archivos que contendrn el
cdigo para compilar las ecuaciones. Tambin declaramos los caracteres ascii numero 34 que
son las comillas dobles , y el 92 que es la diagonal \. Estos los utilizaremos para compilar los
programas.
RandomAccessFile miArch = new RandomAccessFile("test1.java", "rw");
RandomAccessFile miArch2 = new RandomAccessFile("launch.bat", "rw");
miArch2.seek(miArch2.length());
char ii=34;
char di=92;
miArch.seek(miArch.length());
Archivo Dinamico para cualquier ecuacionAqu viene lo interesante, crear tus archivos dinmicos para cada ecuacin, aqu escribimos
en el .java que esta como RandomAccessFile ,este va a ser nuestro Template o Plantilla,puesto que se resuleve siempre igual, lo nico que cambia es la ecuacin.
Este cdigo escribe sobre el fichero del archivo .java cadenas de texto, pero despus lo
compilaremos, este es el mtodo numrico de Simpson 3/8 para resolver integrales, pueden
crear el suyo propio, este es el que yo realice.
miArch.writeBytes("import java.math.*;"+"\n");
miArch.writeBytes("import java.io.*;"+"\n");
miArch.writeBytes("import java.text.DecimalFormat;"+"\n");
miArch.writeBytes("import javax.swing.JOptionPane;"+"\n");
miArch.writeBytes("public class test1 { "+"\n");
miArch.writeBytes(" double li,ls,dx,fx,tot;"+"\n");
miArch.writeBytes("public test1() throws IOException{ "+"\n");
miArch.writeBytes("li="+t1.getText()+";\n");
En la lnea anterior asignamos el valor a la variable li el valor del campo de texto 1.
-
7/23/2019 Software Matematico Manual
11/27
10
[Escribaelno
mbredelacompaa]
miArch.writeBytes("ls="+t2.getText()+"; tot=0;}\n");
miArch.writeBytes("public void tabliu() throws FileNotFoundException, IOException{
"+"\n");
miArch.writeBytes( "\n File del= new File("+ii+"tabliu.txt"+ii+"); ");
En la lnea anterior utilizamos los caracteres ascii 34 que son las comillas, puesto que en la
cadena de String no podemos introducir comillas por que no est permitido, pero con elcarcter ascii rompemos la regla.
miArch.writeBytes("del.delete();");
miArch.writeBytes("RandomAccessFile miArch = new
RandomAccessFile("+ii+"tabliu.txt"+ii+","+ii+"rw"+ii+");"+"\n");
miArch.writeBytes(" miArch.seek(miArch.length());"+"\n");
miArch.writeBytes(" "+"\n");
miArch.writeBytes("miArch.writeBytes("+ii+"i xi fx ki ki*fx"+ii+");
"+"\n");
double delta=Double.parseDouble(""+t4.getText().toString());
System.out.println("delta="+delta);
double ini=Double.parseDouble(t1.getText().toString());
////
double ext=0.000000000000001;
int contador=0;
int fin=Integer.parseInt(t3.getText().toString());
ini=Double.parseDouble(t1.getText().toString());
while(ini
-
7/23/2019 Software Matematico Manual
12/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
11
if(contador==0 || contador==fin){
miArch.writeBytes("tot=tot+("+sub+");\n");
miArch.writeBytes("fx="+sub+";\n");
miArch.writeBytes("miArch.writeBytes("+ii+"\\n"+contador+" "+ini+" "+ii+"+fx+"+ii+"
"+" 1"+" "+ii+"+(1*fx)); "+"\n");
}else{if(contador%3==0){
miArch.writeBytes("tot=tot+(2*("+sub+"));\n");
miArch.writeBytes("fx="+sub+";\n");
miArch.writeBytes("miArch.writeBytes("+ii+"\\n"+contador+" "+ini+" "+ii+"+fx+"+ii+"
"+" 2"+" "+ii+"+(2*fx)); "+"\n");
}
else{
miArch.writeBytes("tot=tot+(3*("+sub+"));\n");
miArch.writeBytes("fx="+sub+";\n");
miArch.writeBytes("miArch.writeBytes("+ii+"\\n"+contador+" "+ini+" "+ii+"+fx+"+ii+"
"+" 3"+" "+ii+"+(3*fx)); "+"\n");
} }
System.out.println("ini="+ini);
ini=ini+delta;
contador=contador+1;
}
miArch.writeBytes("miArch.writeBytes("+ii+"\\n-----------------
\\nTotal(ki*f(x))="+ii+"+tot);");
miArch.writeBytes("miArch.writeBytes("+ii+"\\nR.Integral = (3/8)*"+ii+"+tot+"+ii+" =
"+ii+"+((3*tot*"+delta+")/8));");
-
7/23/2019 Software Matematico Manual
13/27
12
[Escribaelno
mbredelacompaa]
miArch.writeBytes("miArch.close();");
miArch.writeBytes(" String ap2="+ii+"C:\\"+di+"Archivos de programa\\"+di+"Windows
NT\\"+di+"Accesorios\\"+di+"wordpad.exe tabliu.txt"+ii+"; ");
miArch.writeBytes("Process proceso2=Runtime.getRuntime().exec(ap2);}");
miArch.writeBytes(" public static void main(String[]args) throws IOException{test1 xd=
new test1();"+"\n");
miArch.writeBytes(" xd.tabliu();}}"+"\n");
En el cdigo anterior establecimos que cuando se ejecute el programa se muestre el resultadoguardado en un archivo de texto por el notepad de windows, este lo traen por default todos
los windows, o almenos hasta windows 7. Y la direccin no cambia, por eso elegi esa, aun que
puedes establecer la direccin del Word o cualquier otro programa de texto.
Ya que terminamos el archivo con los valores y la funcin, los cerramos:
miArch2.writeBytes("java test1"+"\n");
miArch2.close();
miArch.close();
try{
RandomAccessFile fil2= new RandomAccessFile("dir.txt", "rw");
String inic=fil2.readLine();
String ap=""+inic+" test1.java";
Process proceso=Runtime.getRuntime().exec(ap);
fil2.close();
}catch(Exception g){ JOptionPane.showMessageDialog(rootPane, g);
}
En el cdigo anterior obtenemos del archivo dir la direccin del compilador de java que fue
lo primero que se programo, despus con el Process hacemos que ejecute desde lnea de
comandos el compilador y compile el archivos fuente .java para generar el .class que seejecutara.
-
7/23/2019 Software Matematico Manual
14/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
13
/////////////////////////////Borro los files antes el exec xD
Thread.sleep(3000);
JOptionPane.showMessageDialog(null, "Listo! De click para Continuar");
try{
String ap2="cmd /c launch.bat";
Process proceso2=Runtime.getRuntime().exec(ap2);
}catch(Exception g){
}
En el cdigo anterior, desde consola hacemos que utilize el archivo bat que preparamos
anteriormente para ejecutar el archivo.class que se compilo con antelacin.
JOptionPane.showMessageDialog(null, "Se lanzo proceso");
// System.exit(0);
}catch(Exception f){ JOptionPane.showMessageDialog(rootPane, f);
System.out.println(f);
}
}
-
7/23/2019 Software Matematico Manual
15/27
14
[Escribaelno
mbredelacompaa]
});
Lo mismo se hace con los otros mtodos numricos, solo cambia el algoritmo pero el
procedimiento es el mismo. Crear el template y asignarle la ecuacin y los valores.
Resolviendo una IntegralProbemos que funciona el programa, supongamos que tenemos que resolver la integral
4x+8 dx con limite superior= 6 y limite inferior =4
entonces escribimos en la interfaz lo siguiente:
Ahora lo corremos y nos muestra el resultado.
Y si la resolvemos a manita, saldr algo aproximado, que en realidad es 56. Recuerden que
como es mtodo numrico solo da una aproximacin, que es casi exacta, en este caso vario
por muy muy poco.
-
7/23/2019 Software Matematico Manual
16/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
15
Creacion de Graficas 3DPara graficar cualquier funcin primero debemos crear un nuevo frame a manita o con el
asistente, como gusten, debe quedar similar al siguiente:
La funcin aleatoria queda omitida, pues lo que interesa es la de graficar cualquiera que
queramos.
Ya que creamos el frame, especificamos la funcin del action performed. Con el siguiente
cdigo.
public void actionPerformed(ActionEvent e) {
xm=Double.parseDouble(t1.getText().toString());
xmm=Double.parseDouble(t2.getText().toString());
ym=Double.parseDouble(t3.getText().toString());
ymm=Double.parseDouble(t4.getText().toString());
funcion=t5.getText().toString();
double increment=Double.parseDouble(textra.getText().toString());
try{
-
7/23/2019 Software Matematico Manual
17/27
16
[Escribaelno
mbredelacompaa]
JTextField temp= el.TextFields(0, 0);
t5.select(2, funcion.length());
String ecuacionxD= t5.getSelectedText();
System.out.print("ECUACION XD:"+ecuacionxD);
En el cdigo anterior asignamos valores a los limites de X y Y superiores e inferiores. Ademsobtenemos la ecucacion como hicimos en Simpson 3/8.
RandomAccessFile miArch = new RandomAccessFile("xD.java", "rw");
String a="\n"+"import com.sun.j3d.utils.applet.MainFrame;";
char ii=34;
miArch.seek(miArch.length());
miArch.writeBytes(a+"\n");
Creamos nuevamente el carcter de comillas . Y nuevamente escribimos el cdigo para
graficar, este algoritmo siguiente verifica 3 casos.
1 Cuando la ecuacin z se forma de X y Y, i.e; z=2x + y
2 Cuando la ecuacin z se forma solo de x, i.e; z=x
3 Cuando la ecuacin se forma solo de y, i.e; z=y
Aqu el cdigo, los mtodos que se utilizan son propios de la API de java 3D, pueden encontrar
el manual en google para ver que es cada mtodo, no tiene caso incluirlo aqu puesto que el
API es muy amplia. A grandes rasgos, les comento que lo que hace es graficar lnea por lneadeacuerdo a la ecuacin y deacuerdo al incremento. Esto lo grabamos como un Template en
un archivo de texto que se almacena como cdigo fuente .java.
miArch.writeBytes("import
com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior;"+"\n");
miArch.writeBytes("import com.sun.j3d.utils.universe.*;"+"\n");
miArch.writeBytes("import java.applet.*;"+"\n");
miArch.writeBytes("import java.math.*;"+"\n");
miArch.writeBytes("import java.awt.*;"+"\n");
-
7/23/2019 Software Matematico Manual
18/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
17
miArch.writeBytes("import javax.media.j3d.*;"+"\n");
miArch.writeBytes("import javax.vecmath.*;"+"\n");
miArch.writeBytes("public class xD extends Applet{"+"\n");
miArch.writeBytes("double
x="+t1.getText()+",y="+t3.getText()+",xmm="+t2.getText()+",ymm="+t4.getText()+";"+"\n");
miArch.writeBytes("int contador, contador2,more,global;"+"\n");
miArch.writeBytes("String funcion="+ii+funcion+ii+";"+"\n");
miArch.writeBytes("Shape3D [] algo2= new Shape3D[10];"+"\n");
miArch.writeBytes("public xD(){"+"\n");
miArch.writeBytes("setLayout(new BorderLayout());"+"\n");
miArch.writeBytes("GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();"+"\n");
miArch.writeBytes("Canvas3D canvas3D = new Canvas3D(config);"+"\n");
miArch.writeBytes("add("+ii+"Center"+ii+", canvas3D);"+"\n");
miArch.writeBytes("SimpleUniverse simpleU = new SimpleUniverse(canvas3D);"+"\n");
miArch.writeBytes("simpleU.getViewingPlatform().setNominalViewingTransform();"+"\n");
miArch.writeBytes("BranchGroup scene = createSceneGraph( simpleU);"+"\n");
miArch.writeBytes("simpleU.addBranchGraph(scene); }"+"\n");
miArch.writeBytes("Shape3D createLandEjes(){"+"\n");
miArch.writeBytes("LineArray landGeom = new LineArray(12,
GeometryArray.COORDINATES | GeometryArray.COLOR_3);"+"\n");
miArch.writeBytes("Color3f c1 = new Color3f(0.1f, 0.8f, 0.1f);"+"\n");
miArch.writeBytes("for(int i = 0; i < 12; i++) landGeom.setColor( i, c1);"+"\n");
miArch.writeBytes("landGeom.setCoordinate(0, new Point3d(0,0,0));"+"\n");
miArch.writeBytes("landGeom.setCoordinate(1, new Point3d(100,0,0));"+"\n");
miArch.writeBytes("landGeom.setCoordinate(2, new Point3d(0,0,0));"+"\n");
-
7/23/2019 Software Matematico Manual
19/27
18
[Escribaelno
mbredelacompaa]
miArch.writeBytes("landGeom.setCoordinate(3, new Point3d(-100,0,0));"+"\n");
miArch.writeBytes("landGeom.setCoordinate(4, new Point3d(0,0,0));"+"\n");
miArch.writeBytes("landGeom.setCoordinate(5, new Point3d(0,100,0));"+"\n");
miArch.writeBytes(" landGeom.setCoordinate(6, new Point3d(0,0,0));"+"\n");
miArch.writeBytes("landGeom.setCoordinate(7, new Point3d(0,-100,0));"+"\n");
miArch.writeBytes(" landGeom.setCoordinate(8, new Point3d(0,0,0));"+"\n");
miArch.writeBytes("landGeom.setCoordinate(9, new Point3d(0,0,100)); "+"\n");
miArch.writeBytes("landGeom.setCoordinate(10, new Point3d(0,0,0)); "+"\n");
miArch.writeBytes("landGeom.setCoordinate(11, new Point3d(0,0,-100)); "+"\n");
miArch.writeBytes("global=0;"+"\n");
miArch.writeBytes("do{algo2[global]=createLand(); global++;"+"\n");
miArch.writeBytes("}while(more!=0);"+"\n");
miArch.writeBytes("return new Shape3D(landGeom);}"+"\n");
miArch.writeBytes("Shape3D createLand(){"+"\n");
miArch.writeBytes("LineArray landGeom = new LineArray(1000000,
GeometryArray.COORDINATES | GeometryArray.COLOR_3);"+"\n");
miArch.writeBytes("Color3f c1 = new Color3f(0.1f, 0.8f, 0.1f);"+"\n");
miArch.writeBytes("for(int i = 0; i < 12; i++) landGeom.setColor( i, c1);"+"\n");
miArch.writeBytes("char Funcion[]=funcion.toCharArray();"+"\n");
miArch.writeBytes("if(Funcion[0]=='z' && Funcion[1]=='='){"+"\n");///
miArch.writeBytes(" boolean equis=funcion.contains("+ii+"x"+ii+");"+"\n");
miArch.writeBytes("boolean lle=funcion.contains("+ii+"y"+ii+"); "+"\n");
miArch.writeBytes("if(equis==true&&lle==true){ "+"\n");
// miArch.writeBytes("double e = (xmm+ymm)-(x+y); "+"\n");
// miArch.writeBytes("double ejex[]=new double[99999]; "+"\n");
// miArch.writeBytes("double ejey[]=new double[99999]; "+"\n");
-
7/23/2019 Software Matematico Manual
20/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
19
// miArch.writeBytes(" double ejez[]=new double[99999];"+"\n");
miArch.writeBytes(" int d=0; do{"+"\n");
miArch.writeBytes(" if(x=xmm){ x="+t1.getText()+"; "+"\n");
miArch.writeBytes("y=y+"+textra.getText()+";} "+"\n");
miArch.writeBytes("if(y>=ymm){y+=99999; more=0;} "+"\n");
miArch.writeBytes(" contador=d+2;\nd=d+2; if(contador==999998){ contador=0;
more=1; x=x-0.002; y+=99999; } }while(y
-
7/23/2019 Software Matematico Manual
21/27
20
[Escribaelno
mbredelacompaa]
// miArch.writeBytes("double ejex[]=new double[99999]; "+"\n");
miArch.writeBytes("int d=0; do{ "+"\n");
miArch.writeBytes(" if(x=xmm){ x="+t1.getText()+"; "+"\n");
miArch.writeBytes("y=y+"+textra.getText()+";} "+"\n");
miArch.writeBytes("if(y>=ymm){y+=99999; more=0;} "+"\n");
miArch.writeBytes("contador=d+2; }"+"\n");
// miArch.writeBytes(" int dd=12;"+"\n");
// miArch.writeBytes("int ini=(int)y; "+"\n");
// miArch.writeBytes("int fin=(int)ymm; "+"\n");
// miArch.writeBytes("for(int jk=ini;jk
-
7/23/2019 Software Matematico Manual
22/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
21
miArch.writeBytes("equis=false; d=d+2; if(contador==999998){ contador=0; more=1;
x=x-0.002; y+=99999; } }while(y=ymm){ y="+t1.getText()+"; "+"\n");
miArch.writeBytes("x=x+"+textra.getText()+";} "+"\n");
miArch.writeBytes("if(x>=xmm){y+=99999; more=0;} "+"\n");
miArch.writeBytes("contador=d+2; }"+"\n");
/* miArch.writeBytes("int dd=12;"+"\n");
miArch.writeBytes(" int ini=(int)x; "+"\n");
miArch.writeBytes(" int fin=(int)xmm; "+"\n");
miArch.writeBytes("for(int jk=ini;jk
-
7/23/2019 Software Matematico Manual
23/27
22
[Escribaelno
mbredelacompaa]
miArch.writeBytes(" contador2=d; }"+"\n");
miArch.writeBytes("contador=contador2+2; "+"\n");
miArch.writeBytes("dd=12;} "+"\n");*/
miArch.writeBytes("lle=false; d=d+2; if(contador==999998){ contador=0; more=1; x=x-
0.002; y+=99999; } }while(y
-
7/23/2019 Software Matematico Manual
24/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
23
miArch.writeBytes("keyNavBeh.setSchedulingBoundingLeaf(boundingLeaf);"+"\n");
miArch.writeBytes("x.addChild(keyNavBeh);"+"\n");
miArch.writeBytes("Font3D font3d = new Font3D(new Font("+ii+"Helvetica"+ii+",
Font.PLAIN, 1), new FontExtrusion());"+"\n");
miArch.writeBytes(" Text3D textGeom = new Text3D(font3d, new String("+ii+"Y"+ii+"),
new Point3f(0, 2f, 0));"+"\n");
miArch.writeBytes("Shape3D textShape = new Shape3D(textGeom);"+"\n");
miArch.writeBytes("x.addChild(textShape);"+"\n");
miArch.writeBytes(" Text3D textx = new Text3D(font3d, new String("+ii+"X"+ii+"),new
Point3f(2f, 0, 0));"+"\n");
miArch.writeBytes("Shape3D textxe = new Shape3D(textx);"+"\n");
miArch.writeBytes("x.addChild(textxe);"+"\n");
miArch.writeBytes(" Text3D textz = new Text3D(font3d, new String("+ii+"Z"+ii+"),new
Point3f(0, 0, 2f));"+"\n");
miArch.writeBytes("Shape3D textze = new Shape3D(textz);"+"\n");
miArch.writeBytes("x.addChild(textze);"+"\n");
miArch.writeBytes(" return x;}"+"\n");
miArch.writeBytes("public static void main(String[] args) {"+"\n");
miArch.writeBytes("Frame frame = new MainFrame(new xD(), 256, 256);}}"+"\n");
miArch.close();
-
7/23/2019 Software Matematico Manual
25/27
24
[Escribaelno
mbredelacompaa]
Ya que terminamos el archivo fuente .java, hacemos que se compile con la dir del compilador
almacenada en el archivo de texto dir.txt. :
try{
RandomAccessFile fil2= new RandomAccessFile("dir.txt", "rw");
String ini=fil2.readLine();
String ap=""+ini+" xD.java";
Process proceso=Runtime.getRuntime().exec(ap);
fil2.close();
}catch(Exception g){
JOptionPane.showMessageDialog(rootPane, g);
}
/////////////////////////////Borro los files antes el exec xD
Thread.sleep(3000);
JOptionPane.showMessageDialog(rootPane, "El grfico esta listo de click para continuar
^_^");
Mostramos el cuadro de dialogo donde dice que ya se genero.
Ahora al dar click en aceptar en dicho cuadro se ejecuta el programa:
try{
-
7/23/2019 Software Matematico Manual
26/27
By: John Michel Rivera De Len
CreatuSoftwa
reMatemticoconJAVA
25
String ap2="cmd /k java xD";
Process proceso2=Runtime.getRuntime().exec(ap2);}catch(Exception g){
}
}catch(Exception f){
JOptionPane.showMessageDialog(rootPane, f);
System.out.println(f);
}
Finalmente borramos los archivos para que no se sobreescriban:
try{
Thread.sleep(7000);
File xp= new File("xD.class");
File xd2= new File("xD.java");
xd2.delete();
xp.delete();}catch(Exception o){ JOptionPane.showMessageDialog(rootPane, o);}
}
});
Al final, se mostrara en automatico una nueva ventana con la grafica en 3D. con la posibilidad
de movernos dentro de ella como en un juego con las flechitas del teclado, arriba, abajo, izq,
der.
Se puede hacer ms lento el movimiento con las teclas del signo menos - y el movimiento es
mas rpido con la tecla +.
-
7/23/2019 Software Matematico Manual
27/27
26
[Escribaelno
mbredelacompaa]
Solo presinenla una vez, y despus ya muvanse, porque si la dejan presionada el
movimiento ser muy muy rpido y solo vern todo en negro por que avanzaron demasiado.
Aqu finaliza el tutorial, puesto que para graficas 2D es el mismo procedimiento, y para los
dems mtodos numricos es lo mismo que en el primer ejemplo. Lo importante era saber
cmo graficar y como compilar un archivo fuente con cualquier ecuacin.
La otra parte de operaciones de matrices no es tan interesante y es muy fcil, por eso lo
omito puesto que lo ms difcil era lo anterior.
Espero haberme explicado bien para que puedan hacerlo por ustedes mismos. El cdigo
fuente no lo anexo porque es demasiado, lo adjunto en un paquete junto con este tutorial y la
aplicacin java.
Fuentes:-Mi tatema
-API Java 3D
-Mis apuntes de Mtodos numricos.