Software Matematico Manual

Embed Size (px)

Citation preview

  • 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.