CAPITULO 5. Conclusiones
Al término del presente Trabajo de Titulación denominado “Aplicación Gráfica mediante JAVA3D para Aprendizaje y Comunicación con Sordos y Mudos” se puede concluir lo siguiente:
Así como el hombre va evolucionando, con ello también sufren un constante cambio las tecnologías informáticas, las que están siendo cada vez más ocupadas en nuestra vida diaria, es así como se ha llegado a imitar perfectamente la realidad a través de gráficas tridimensionales, ingresando con esto a la nueva era de mundos o universos virtuales
La implementación de las gráficas puede ser desarrollada en múltiples áreas, siendo la educación una de ellas, para tal efecto se implementó esta herramienta de aprendizaje dactilológico de sordos y mudos, queriendo con esto realizar un pequeño aporte a la labor de Integración de la Nueva Reforma Educacional con las aplicaciones informáticas.
La educación en Chile y sobre todo en la regiones, es aún muy deficiente para sordos y mudos, pues existen muy pocos profesionales que se dediquen a la enseñanza y divulgación del lenguaje, por ejemplo en Copiapó solo se dedica a ésta labor el señor Alexis Vergara, no alcanzando éste a cubrir todas las necesidades de la comunidad. En relación a este punto es donde la aplicación desarrollada aparece como un aporte importante y muy útil para ayudar a satisfacer dicha necesidad de aprendizaje del lenguaje dactilológico chileno.
Se implemento la aplicación utilizando las gráficas tridimensionales de JAVA especialmente las API’s DE JAVA3D, este lenguaje es medianamente parecido al lenguaje de programación C, lo que resultó ser una ventaja pues se tenía un conocimiento básico de éste.
CAPITULO 5 CONCLUSIONES 70
Uno de los inconvenientes que presentó este lenguaje es la poca información en las bibliotecas 3D al ser totalmente nueva, por lo tanto no se posee la suficiente documentación, siendo los sitios de Internet repetitivos en sus contenidos.
La aplicación realizada cuenta con todos los objetivos propuestos al empezar, pero cabe mencionar que las manos sólo se observan en dos dimensiones, aunque poseen las coordenadas ( X, Y ,Z ) siendo la coordenada Z constante para cada punto, esto se debe a que no se contó con la tecnología suficiente para obtener esta coordenada, una solución posible a este problema sería la de utilizar un capturador de coordenadas tridimensionales. Se hace referencia a uno de ellos en el capitulo 4.
Aunque el software realizado es muy básico es capaz de crear diferentes objetos sólo con proporcionarle las coordenadas correspondientes, la complejidad y alto nivel de programación esta en la creación del objeto 3D y su interrelación.
La publicación de la aplicación en Internet, deja ésta al alcance de cualquier persona que desee aprender el lenguaje dactilológico chileno, y a la vez aporta conocimientos a las personas que deseen trabajar con JAVA 3D, ya que los software desarrollados y publicados en Chile que utilizan este lenguaje de programación son pocos (solo se encontró una aplicación básica de texto tridimensional realizada en la Universidad de Chile), por lo que el código de la aplicación puede contribuir en el desarrollo de nuevas aplicaciones en JAVA 3D.
Es preciso destacar que ha sido muy beneficioso trabajar en el desarrollo de esta aplicación, se aprendió a manejar algunas de las API de JAVA3D con las cuales se puede generar innumerables aplicaciones donde se necesite crear y manejar escenas tridimensionales, permitiendo con esto que los software se asemejen cada vez más a la realidad y puedan estar en todas las áreas del conocimiento humano.
CAPITULO 5 CONCLUSIONES 71
El desarrollo de la aplicación para sordos y mudos deja abierta la posibilidad de seguir implementando otros software de aplicaciones gráficas como por ejemplo la de implementar el lenguaje mímico desarrollando la parte de animación en JAVA, y también pudiendo abarcar otros temas de igual importancia.
Cabe destacar que trabajar con este lenguaje fue una experiencia que sin duda enriqueció mis conocimientos y que ayudará en el desarrollo profesional.
REFERENCIAS BIBLIOGRÁFICAS 72
Referencias Bibliográficas
Libros
[Alvarez, 1995] Juan Alvarez Mendizábal,
Diccionario MOSBY de Medicina de la Salud, 2ª Edición, Editorial Mosby-Doyma libros S.A, España 1995.
[Gonzales, 1999] Antonio Gonzales Velazquez., Jose Solbas Shang, Aprendiendo JAVA en 21 días, 1ª Edición, Editorial Prentice Hall, México, 1999
[Inserso, 1994] Federación Española de
asociaciones de padres y amigos de los sordos, Simposio Internacional sobre la eliminación de Barreras de Comunicación, 1ª edición Editorial ministerio de Asuntos sociales, INSERSO España 1994)
[Alcala, 1992] Alfonso Alcala, Manuel Fonseca, Programación Orientada al objeto,1ª Edición Editorial Anaya Multimedia, España 1992.
REFERENCIAS BIBLIOGRÁFICAS 73
Sitios web
[Internet1, 2001] Universidad de Chile, aula 21, www.aula.cl, 2001
[Internet2, 2001] Mineduc, Programa Computacional Ayuda a Niños y Adultos con Problemas de Comunicación, www.mineduc.cl, 2001 [Internet3, 2002] Dactilológia, http://personal2.redestb.es/martingv /ls/educ_dac.htm Tutorial
[Palos, 2002] Juan Antonio Palos, Java 3D, www.programacion.com/java/3d, 2002.
ANEXOS 74
ANEXOS Anexo A. Programación Orientada al Objeto.
A través del tiempo los programas se han vuelto más complejos, el mantenimiento del código se vuelve cada vez mas complicado, aunque estén realizados con una correcta estructura (funciones y procedimientos), es fácil perderse con la gran cantidad de funciones y procedimientos, mucho más aún si han sido varios los programadores que han participado en el proceso de construcción produciéndose con esto muchos errores al pasar parámetros incorrectos o modificar en forma errónea, para solucionar estos problemas es que nace la programación orientada al objeto.
La programación orientada al objeto conocida con la sigla PPO, aunque algunas veces se encuentra como OPP (Object Oriented Programming) se puede definir como la evolución de los lenguajes estructurados hacia una simplificación del mantenimiento del código y una mayor posibilidad de reutilización de éste, es decir, se pueden crear programas que sobrevivan a los cambios inevitables que acompañan al crecimiento y envejecimiento de cualquier sistema, ya que se entiende la función de cada objeto y se poseen interfaces limpias y fiables entre los objetos, se puede extraer partes de un programa antiguo con facilidad.
A.1 Fundamento de la Programación Orientada al Objeto.
A.1.1 ObjetoEs la pieza básica en la programación orientada al objeto, son sistemas en el cual las unidades trabajan en conjunto para crear un sistema más grande, un ejemplo muy utilizado para comprender mejor lo que es un objeto son los bloques LEGO donde un cuerpo puede estar formado por diferentes piezas (bloques, llantas y poleas).
Los objetos son entes abstractos que nos permite separar los distintos componentes de un programa facilitando con esto la construcción limpieza y que posteriormente se pueda producir mejoras en los programas, cada parte del
ANEXOS 75
programa que se realiza es tratado como objeto siendo así cada parte independiente una de otra y cada una de ellas realizando tareas especificas.
A.1.1.1 Los objetos se componen de tres partes fundamentales:
a) Métodos (methods): son las operaciones que pueden realizarse sobre el objeto, que normalmente estarán incorporados en forma de programas (código), el objeto ejecuta estas funciones las cuales entregan algún tipo de servicio en el transcurso del programa.
Determina a su vez como va actuar el objeto cuando reciba un mensaje. Por ejemplo tomando como objeto un computador los métodos serían:
Escuchar música cuando se enciende los parlantes.
Se prende la pantalla cuando se presiona el botón de encendido
Que aparezca la letra z en la pantalla cuando toco la misma en el teclado.
b) Eventos: son aquellas acciones mediante las cuales el objeto reconoce que sé esta interactuando con él, de esta forma el objeto se activa y responde al evento según lo programado en su código.
Siendo el objeto un computador los eventos serian: Introducir CD.
Apagar el computador. Encender el computador.
Conectar el computador con la impresora.
c) Atributos (attributes): característica que aplican al objeto solo en el caso que le sea visible en la pantalla por el usuario, es decir, el
ANEXOS 76
aspecto que refleja, tanto en el color, el tamaño la posición, sí esta o no habilitado etc.
Con el ejemplo del computador como objeto los atributos serían: Color, lector de CD, memoria, disco, teclado, mouse etc. A.1.1.2 Ciclo de vida de un objeto.
Los objetos son datos mucho más complejos que los datos simples, un dato simple como un entero puede ser almacenado en múltiples sitos como: en la pila de un procesador, en la memoria global etc. Tampoco es necesario una iniciación complicada, solo basta con poner ceros en los espacios que ocupa y el equivalente al concepto es “vacío”, para un entero el resultado será que el entero valdrá 0, para un booleano, el resultado será false, para una cadena el resultado será vacía, etc. En definitiva, el compilador puede determinar de forma automática como y donde almacenar la variable, como inicializarla y cuanto ocupa.
Esto no es tan sencillo cuando se construye un objeto Los objetos deben ser creados de forma explicita por el programador y destruidos igualmente de forma explícita. Para obtener un objeto a partir de una clase (acción que se denomina instanciar la clase, es decir, crear una instancia de la misma), es necesario pedirle que construya un objeto tipo, es decir, que cree un objeto con sus propiedades en un estado predeterminado (posteriormente puede ser modificado). Por ejemplo, la clase Televisor puede construir objetos televisor, con el siguiente estado predefinido (Encendido, Volumen = 15, Programa = Noticias, Brillo = 20). Podemos imaginarnos que la clase es una especie de personas obreras que nos entrega un servicio especial denominado “Construir” que construye un objeto y nos lo entrega para ser manipulado. Este servicio especial se denomina constructor del objeto.
ANEXOS 77
Figura A.1: Constructor del Objeto
[Construcción Propia]
El constructor del objeto es una función de la clase que crea una instancia de esa clase inicializada con unos valores predeterminados.
Una clase puede tener varios servicios de construcción. En el caso de los televisores se pueden construir a partir de material reciclable, de algún tipo de madera en especial etc. Los diferentes constructores crean el mismo tipo de instancia (un televisor TV), pero también es posible que se construyan de diferente modelo, o que se configuren de distintas formas.
Los objetos ocupan por igual memoria como recurso del sistema ( en el caso de Windows estos recursos son cursores, bitmaps, ventanas, etc.) y una vez que se han ocupado se deben destruir, esta tarea no es muy sencilla pues si los
SOLICITA CONSTRUCCIÓN DE OBJETO CLASE TELEVISOR CONSTRUCTOR DE OBJETOS (SERVICIO DE CLASE) OBJETOS CONSTRUIDOS INSTANCIAS
ANEXOS 78
objetos han realizado acciones cuando sé inicializaron o durante su construcción se debe invertir con la destrucción (se pueden haber creado otros objetos, inicializar dispositivos físicos, etc.). Así como hay un servicio de construcción del objeto también existe un servicio de destrucción del mismo. El destructor de objeto es un procedimiento del objeto que lo destruye y libera la memoria ocupada.
Figura A.2: Destrucción del Objeto
[Construcción Propia]
A.1.2 Instancia
Son todos los objetos que derivan de algún otro, es decir son objetos con excepción de la clase objeto que es la madre de todas.
Una instancia de una clase son todos los objetos reales, si una clase es la representación genérica de un objeto, una instancia es su representación concreta.
A.1.3 Clases
Se definen como plantillas para crear múltiples objetos con características similares, constan de una serie de métodos y datos que resumen las características de un objeto.
Destructor de objetos (servicio)
ANEXOS 79
Cuando se realiza un programa, en realidad se diseñan y construye un conjunto de clases, no se definen un objeto individual sino una clase de objetos, definir clases permite trabajar con código reutilizable, pues desde una clase se puede crear una instancia y así reutilizar el código escrito.
Dentro de una clase los objetos poseen las mismas características, pero sus valores o estados concretos son diferentes para cada objeto de una misma clase.
Por ejemplo un conjunto de televisores de una misma marca y modelo se denomina clase, los objetos individuales que pertenecen a esta clase se denominan instancias de la clase, el botón de encendido, tamaño de la pantalla y peso son comunes a la clase y sus instancias mientras que otro como encendido, apagado, color de la carcasa y volumen actual son exclusivo de cada instancia.
A.1.4 Polimorfismo
Polimorfismo es un concepto biológico que significa muchas formas, es decir, variación en formas y funciones que se encuentra entre los miembros de una misma especie en común.
Es la posibilidad de construir varios métodos con el mismo nombre, pero con relación a la clase a la que pertenece cada uno, con comportamientos diferentes. Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes. Estos objetos responden a los mensajes que se le envían, un mismo mensaje puede ser interpretado o dar paso a distintas acciones según que objeto es el destinatario (aunque el programador ha de saber en todo momento cuales son las consecuencias del mensaje).
Por ejemplo, un mensaje "+" a un objeto ENTERO significaría suma, mientras que para un objeto STRING significaría concatenación ("pegar" strings uno seguido al otro).
ANEXOS 80
A.1.5 Encapsulado
Un objeto es una estructura compleja la cual posee código y datos que están relacionados entre sí, como si estuvieran en una cápsula, esta es una de las características del diseño orientado al objeto.
Se puede decir que el encapsulado es un envoltorio protector alrededor del código y de los datos que se manipulan, este tiene como objetivo evitar que otro código acceda a ellos de manera arbitraria.
A.1.6 Mensaje
Para que los objetos puedan trabajar en conjunto y construir aplicaciones de deben comunicar entre sí, esto se realiza a través de Paso de Mensaje.
Cuando un objeto quiere comunicarse con otro lo que hace es enviar un mensaje con los datos que desea transmitir, para enviar un mensaje se necesitan tres elementos: el objeto al que se le va a enviar el mensaje, el nombre del método que se debe ejecutar y los parámetros necesarios para el método en cuestión.
La fortaleza de este sistema radica en que el objeto emisor no necesita saber la forma en que el objeto receptor va a realizar la acción, simplemente esta la ejecuta y el emisor se desentienden del como, solo tiene conocimiento de que se esta realizando.
El conjunto de mensajes a los que un objeto puede responder se conoce con el nombre protocolo de objeto.
A.1.7 Herencia
La herencia interactúa con el encapsulado. Si una clase dada encapsula algunos atributos, entonces cualquier subclase tendrá los mismos atributos más cualquiera que añada como parte de su especialización.
Es un mecanismo para compartir automáticamente métodos y datos entre clases, subclases y objetos. A la clase que hereda de otra clase se le denomina subclase. A la clase que proporciona la herencia se le denomina superclase.
ANEXOS 81
Existen 2 tipos de Herencia
Herencia simple: es decir que una subclase puede heredar datos, métodos de una clase simple, así como añadir o sustraer ciertos comportamientos Ej. : JAVA
Herencia múltiple: es la posibilidad de adquirir métodos y datos de varias clases simultaneas Ej. : C++
ANEXOS 82
Anexo B. Java 2D
B1. Código del abecedario dactilológico en 2D.
Se muestran las cuatros primeras letras del abecedario las restantes se encuentran en el CD.
B1.1 Letra A.
import java.awt.*;
public class LetraA extends java.applet.Applet {
public void init() {
resize(400,400); }
public void paint(Graphics g) { int x[] = { 264,233,236,275,274,257,253,247,246,248,257,253,247,242,237,235,238,2 41,241,234,231,226,220,216,218,224,228,226,220,216,214,215,216,219,22 5,232,234,232,225,219,216,215,214,213,210,210,205,209,211,219,227,235 ,227,219,211,209,205,200,193,182,174,169,178,180,189,191,196,201,207, 207,207,209,210,210,207,203,191,189,180,183,186,184,181,176,172,167,1 67,174,179,182,184,181,176,172,167,163,158,155,144,137,137,144,158,16 9,158,144,137,137,144,155,158,161,161,159,157,149,144,144,148,155,161 ,159,157,149,144,125,144,149,157,159,161,161,158,155,144,137,123,115, 114,132,163}; int y[] = { 381,289,273,114,106,87,70,57,67,74,87,70,57,56,59,64,68,74,83,145,140,1 35,136,139,142,141,137,135,136,139,146,152,156,159,159,154,145,154,15 9,159,156,152,146,141,117,83,68,61,54,51,53,64,53,51,54,61,68,59,54,55, 63,75,116,142,159,169,171,170,166,159,149,131,117,131,149,154,156,159
ANEXOS 83 ,143,152,162,177,182,185,184,181,173,169,166,171,177,182,185,184,181, 175,156,139,114,112,100,81,71,75,71,81,100,112,114,139,156,172,181,19 2,196,197,192,184,181,180,181,192,196,197,192,153,192,197,196,192,181 ,172,156,139,114,112,120,143,201,279,383 }; int pts = x.length;
Polygon poly = new Polygon(x, y, pts); g.drawPolygon(poly);
g.setColor(Color.gray);
g.drawLine(116,152,128,164);//linea del lado iz. de la mano g.drawLine(114,170,134,176);
g.drawLine(212,160,208,164); g.drawLine(208,164,200,170);
g.drawLine(200,170,194,178);//linea lado central bajo las uñas g.drawLine(194,178,184,194);
g.drawLine(184,194,184,204);
g.drawLine(174,228,180,240); g.drawLine(180,240,188,254);
g.drawLine(188,254,204,266);//linea parte central inferior g.drawLine(204,266,224,272); g.drawLine(224,272,236,272); g.drawLine(138,304,156,304); g.drawLine(156,304,186,294); g.drawLine(186,294,212,288);//lineas de la muñeca g.drawLine(154,314,170,312); g.drawLine(170,312,188,304); g.drawLine(188,304,218,300);
ANEXOS 84
g.drawLine(200,160,194,160); g.drawLine(194,160,204,158);
g.drawLine(204,158,206,152);//linea de las uñas g.drawLine(168,172,176,172);
g.drawLine(176,172,180,166); g.drawLine(146,185,158,183); }
ANEXOS 85
B1.2 Letra B
import java.awt.*;
public class LetraB extends java.applet.Applet {
public void init() {
resize(400,400); }
public void paint(Graphics g) { int x[] = { 253,246,244,253,262,268,267,260,258,253,250,238,231,222,223,234,238,2 31,222,218,216,217,220,223,230,237,244,249,244,237,230,233,235,238,24 2,238,235,233,230,223,220,217,216,218,222,231,238,250,250,249,248,245 ,240,237,235,230,225,223,220,220,219,219,222,222,223,222,222,219,219, 220,218,216,213,207,202,199,197,197,199,201,202,199,202,201,199,197,1 94,190,183,179,179,179,179,179,178,179,173,179,178,179,177,174,172,16 6,161,160,160,155,154,163,167,170,176 }; int y[] = { 384,339,312,295,264,236,222,181,172,167,165,163,156,151,160,172,163,1 56,151,155,162,172,180,189,195,197,196,191,196,197,195,197,204,215,22 3,215,204,197,195,189,180,172,162,155,151,156,163,165,157,136,124,105 ,70,45,37,30,29,30,33,37,42,51,70,108,144,108,70,51,42,37,26,13,7,5,6,11, 16,23,39,76,134,139,134,76,39,23,22,19,21,28,38,48,61,80,115,149,160,14 9,115,80,76,72,72,72,79,90,104,176,243,295,319,343,384}; int pts = x.length;
Polygon poly = new Polygon(x, y, pts); g.drawPolygon(poly);
g.drawLine(178,202,190,196);
g.drawLine(190,196,200,190);//linea central superior g.drawLine(200,190,208,182);
ANEXOS 86
g.drawLine(208,182,214,170);
g.drawLine(184,220,200,210); g.drawLine(200,210,208,200);
g.drawLine(208,200,216,196);//linea central inferior g.drawLine(216,196,224,188); g.drawLine(226,194,220,212); g.setColor(Color.gray); g.drawLine(220,212,220,216); g.drawLine(220,216,214,232); g.drawLine(214,232,208,248); g.drawLine(208,248,208,262); g.drawLine(202,214,202,230); g.drawLine(202,230,198,248); g.drawLine(198,248,196,268); g.drawLine(196,268,200,286); g.drawLine(200,286,208,296); g.drawLine(208,296,214,300); g.drawLine(214,300,220,304); g.drawLine(220,304,228,306); g.drawLine(170,328,180,330);
g.drawLine(184,330,202,324);//linea superior de la muñeca g.drawLine(202,324,214,326);
g.drawLine(178,336,194,338);
g.drawLine(194,338,218,334);//linea inferior de la muñeca
g.drawLine(226,70,238,70); g.drawLine(226,108,242,108); g.drawLine(204,48,216,48);
g.drawLine(204,100,218,100);//lineas de los dedos g.drawLine(180,61,196,60);
ANEXOS 87 g.drawLine(182,110,196,110); g.drawLine(162,108,174,108); g.drawLine(160,138,174,132); } }
ANEXOS 88
B1.3 Letra C
import java.awt.*;
public class LetraC extends java.applet.Applet { public void init()
{
resize(400,400);
}
public void paint(Graphics g) { int x[] = { 167,159,162,229,229,232,230,225,224,224,228,232,230,225,218,206,200,1 94,189,181,177,181,183,170,183,191,197,199,199,188,178,185,190,199,18 7,179,174,166,153,163,166,170,167,159,148,146,143,135,130,122,124,130 ,137,144,153,144,137,130,124,122,115,106,96,87,96,106,112,110,117,123, 126,125,126,133,140,142,144,146,146,146,144,142,135,126,125,121,119,1 14,106,99,93,93,93,99,106,106,113,121,125,126,123,117,112,106,96,87,78 ,69,69,71,82,87 }; int y[] = { 385,313,303,214,195,173,162,175,194,197,196,173,162,158,159,175,190,2 00,201,189,120,90,79,70,79,76,71,61,57,48,50,57,58,57,48,46,45,50,70,92, 108,142,151,159,163,160,144,108,102,102,93,81,70,69,70,69,70,81,93,102 ,108,120,140,155,150,149,152,142,160,180,197,203,209,207,200,192,181, 168,160,168,180,192,194,197,203,210,217,223,223,207,190,186,190,207,2 23,216,213,210,203,197,180,160,152,149,150,155,168,190,228,262,321,38 5 }; Int pts = x.length;
Polygon poly = new Polygon(x, y, pts);
g.drawPolygon(poly);
g.setColor(Color.gray);
g.drawLine(200,192,200,202);
g.drawLine(200,202,202,210);//linea dedo pulgar g.drawLine(202,210,208,218); g.drawLine(178,194,182,208); g.drawLine(182,208,184,230);//linea vertical g.drawLine(184,230,188,256); g.drawLine(130,258,128,266); g.drawLine(128,266,130,278); g.drawLine(130,278,138,286); g.drawLine(138,286,148,294); g.drawLine(84,316,94,326); g.drawLine(94,326,110,328); g.drawLine(110,328,126,322);
ANEXOS 89
g.drawLine(126,322,132,318);//linea superior de la muñeca g.drawLine(132,318,146,312);
g.drawLine(146,312,160,312); g.drawLine(100,334,108,336);
g.drawLine(108,336,120,332);//linea inferior de la muñeca g.drawLine(120,332,128,330);
g.drawLine(84,198,96,198); g.drawLine(160,84,170,88); g.drawLine(170,88,178,90);
g.drawLine(162,88,166,92);//linea del indice g.drawLine(166,92,180,92);
} }
ANEXOS 90
B1.4 Letra D
import java.awt.*;
public class LetraD extends java.applet.Applet {
public void init() {
resize(400,400); }
public void paint(Graphics g) { int x[] = { 206,199,194,194,205,214,225,229,232,241,240,236,235,241,240,240,238,2 35,234,233,229,222,218,213,203,198,193,193,198,198,193,190,192,196,19 9,198,199,206,218,222,229,233,234,235,223,219,220,227,233,234,235,223 ,217,203,190,186,186,181,178,170,168,168,173,190,173,168,165,173,183, 193,183,173,165,159,145,152,162,169,166,169,178,183,183,186,192,187,1 81,180,183,186,181,173,167,165,170,161,153,152,153,161,165,167,173,18 1,186,183,183,178,169,162,152,145,135,133,133,133,133,129,128,128 }; int y[] = { 384,365,345,335,314,280,222,219,201,187,182,188,197,187,183,178,174,1 72,175,179,184,186,184,182,168,168,167,172,179,197,201,206,221,219,21 6,197,216,199,184,186,184,179,175,172,158,162,170,179,179,175,173,158 ,146,136,133,111,95,85,79,77,80,132,130,133,130,132,138,142,153,167,15 3,142,138,141,170,170,174,179,166,179,184,194,207,220,221,220,227,214 ,207,220,227,224,217,209,204,207,199,194,199,207,209,217,224,227,220, 207,194,184,179,175,170,170,207,218,228,242,262,313,367,384 }; int pts = x.length;
Polygon poly = new Polygon(x, y, pts);
g.drawPolygon(poly);
g.setColor(Color.gray);
g.drawLine(198,222,196,230); g.drawLine(196,230,196,239);
ANEXOS 91
g.drawLine(196,239,200,246);//linea dedo pulgar g.drawLine(200,246,210,258);
g.drawLine(210,258,216,270);
g.drawLine(140,220,142,222); g.drawLine(142,222,148,224); g.drawLine(136,230,140,234);
g.drawLine(140,234,144,236);//lineas del dedo meñique g.drawLine(144,236,150,234); g.drawLine(176,228,170,238); g.drawLine(170,238,158,250); g.drawLine(158,250,148,250); g.drawLine(174,262,176,284); g.drawLine(176,284,178,294); g.drawLine(178,294,180,304); g.drawLine(180,304,182,322);//linea central g.drawLine(182,322,182,338); g.drawLine(182,338,172,348); g.drawLine(172,348,160,354); g.drawLine(184,292,184,298); g.drawLine(184,298,188,302); g.drawLine(188,302,192,308);//linea semicirculo g.drawLine(192,308,196,310); g.drawLine(196,310,200,312); g.drawLine(132,334,136,336); g.drawLine(136,336,144,338); g.drawLine(144,338,150,334); } }
ANEXOS 92
Anexo C. Fotografias
Estas fotografías permitieron la captura de coordenadas X,Y,Z
LETRA G LETRA H LETRA I
LETRA A LETRA B LETRA C
ANEXOS 93
LETRA J LETRA K LETRA L
LETRA M LETRA N LETRA Ñ
LETRA O LETRA P LETRA Q
ANEXOS 94
LETRA U LETRA V LETRA W
ANEXOS 95
Anexo D. Java 3D
Código Fuente de la Aplicación Final.
************************************************************************* **BIBLIOTECA DE JAVA import java.awt.*; import java.lang.*; import java.util.*; import java.awt.*; import java.awt.Graphics.*; import java.awt.Event.*; import java.awt.Color.*; import java.awt.Point.*; import java.awt.Event.*; import java.lang.String.*; import java.awt.Frame; import java.applet.Applet; import java.awt.BorderLayout; import java.awt.event.*; import java.awt.GraphicsConfiguration; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.universe.SimpleUniverse.*; import com.sun.j3d.utils.geometry.*; import javax.media.j3d.*; import javax.vecmath.*; import java.io.*; import javax.swing.*; import java.lang.Object.*; import javax.media.j3d.Locale.*; //*********************************************************************** **********INICIO DE APLICACION DE SORDOS/MUDOS
public class interfaz extends java.applet.Applet { public final static int CINCO_SEGUNDOS = 2000;
int numero=20; int ll=0;
private TransformGroup objSpin; private Date reloj1,reloj2; BranchGroup contentRoot;
String archivo="a.txt";
Button boton=new Button("Interpretar"); JTextField texto=new JTextField(20);
JLabel etiq=new JLabel("Ingrese Texto:",JLabel.LEFT); private SimpleUniverse simpleU = null;
Canvas3D canvas3D;
GraphicsConfiguration config; Shape3D part;
BranchGroup scene; int puntos_archivo=0;
ANEXOS 96 //**********METODO DE INICIO OBLIGADO DE LA APLICACIÓN
public void init() { resize(600,600); //objeto 3D setLayout(new BorderLayout()); config =SimpleUniverse.getPreferredConfiguration(); canvas3D=new Canvas3D(config); add("Center", canvas3D); JPanel panel=new JPanel(); panel.add(etiq);
panel.add(texto); panel.add(boton); add("South", panel); //crea un universo simple
simpleU = new SimpleUniverse(canvas3D);
//este crea el elemento visor (ViewPlatform )
simpleU.getViewingPlatform().setNominalViewingTransform(); }
//****************METODO PARA DETECTAR ACCIONES EN LA APLICACIÓN public boolean action(Event evt,Object arg)
{ if (evt.target instanceof Button){ if (arg =="Interpretar") { String palabras=""; palabras=texto.getText(); int i,largo=palabras.length(); char letra; for (i=0;i<largo;i++) { letra=palabras.charAt(i); switch (letra) { case 'a': archivo="a.txt"; break; case 'b': archivo="b.txt"; break; case 'c': archivo="c.txt"; break; case 'd': archivo="d.txt"; break; case 'e': archivo="e.txt"; break; case 'f':
ANEXOS 97 archivo="f.txt"; break; case 'g': archivo="g.txt"; break; case 'h': archivo="h.txt"; break; case 'i': archivo="i.txt"; break; case 'j': archivo="j.txt"; break; case 'k': archivo="k.txt"; break; case 'l': archivo="l.txt"; break; case 'm': archivo="m.txt"; break; case 'n': archivo="n.txt";