lunes, 30 de abril de 2012

Icono de la aplicación

En la entrada pasada hicimos un programa al que llamé practica, para acceder a el desde el emulador de Android automáticamente se les pone un icono de Android, lo que quiero hacer es cambiar esto por alguna imágen relativa a la aplicación.

La imágen que elegí es la siguiente, aunque quizá después la cambie:



En Eclipse podemos ver en la carpeta res que ya conocimos en la entrada pasada, que hay 3 carpetas en cada una de ellas se guarda el icono con diferentes tamaños, drawable-hdpi(72*72 pixeles), drawable-ldpi (36*36 pixeles) y drawable-mdpi (48*48 pixeles).


Lo que haré primero es redimensionar la imágen para obtener esas medidas, usando imagemagick:


Podemos ver que después de redimensionarla, nos fuimos a la carpeta del proyecto y movi la imágen a su respectiva carpeta, con el nombre de ic_launcher.png y así sustituirá a la imágen pasada.


Corremos el emulador y podemos ver que se cambió la imágen al cubo :). 

Así es de fácil cambiar una imágen.




Cena de filosofos

Para esta semana de Laboratorio implemente exitosamente y por fin, el problema de la cena de filosofos, este es el código:



Y muestra de su ejecución:



domingo, 29 de abril de 2012

Semana 12

Aplicación de Sistemas Distribuidos y Paralelos

Para esta semana investigue sobre aplicaciones que tiene la computación paralela y distribuida en la química.

Las técnicas computacionales están siendo utilizados cada vez más como una alternativa al experimento en química. En lo que se llama ab initio la química cuántica, los programas de ordenador se utilizan para calcular las propiedades fundamentales de los átomos y las moléculas, como la fuerza de adhesión y las energías de reacción, a partir de primeros principios, mediante la resolución de una serie de aproximaciones a la ecuación de Schrödinger que describe sus estructuras básicas.

                                     

Este enfoque permite el químico para explorar vías de reacción que sería peligroso o costoso para explorar experimentalmente. Una aplicación de estas técnicas es en la investigación de procesos biológicos.

Y para laboratorio implementé un código de la cena de filosofos en python.

Nominaciones:
Ramón
Ave
Gaby
Roberto

Interfaz 1

Empezaremos a aprender a crear una interfaz para Android en un XML, bien yo comencé por leer los tutoriales de la página oficial de Android y trataré de no simplemente arrastrar botones o componentes, si no crearlo todo apartir del XML.
La meta al finalizar esta entrada es obtener una pantalla como estas:



Me centro en estas dos porque la primerea muestra el menú, y la segunda es la interfaz para que el usuario pueda dibujar algo en el cubo y ver en 3D en el mismo celular lo que esta haciendo, esto es lo que me concentraré en sacar primero las demás funcionalidades las considero extras al proyecto.

Bien, comenzemos ....

Botones del menu

Lo primero que hay que hacer es crear un proyecto, al mio le llamé practica, como ya sabemos automáticamente se crean ciertas carpetas.


En la carpeta src se crea automáticamente el archivo ParcticaActivity.java, es ahí donde se crea la actividad que se muestra en la pantalla al iniciar la aplicación.



Si corremos el programa en el emulador de Android tal cual veremos que se crea un Hola Mundo, automático, esta es la base para comenzar con nuestra aplicación Android.

Como lo dije arriba lo que yo quiero es crear una interfaz parecida a lo que se ve arriba, que tenga 5 botones principales, con una ubicación agradable a el usuario.

La interfaz en android se puede configurar moviendo una archivo xml que se encuentra en la carpeta res>layout llamado main.xml.


Al seleccionar este archivo se puede ver al lado derecho un archivo xml de texto, pero también podemos ver gráficamente la pantalla con componentes que se pueden agregar fácilmente. Yo use la forma gráfica.



Yo comencé agregando botones sin embargo automáticamente los botones se acomodan uno bajo el otro, lo que hay que hacer ahí es crear un RelativeLayout:


Elegí RelativeLayout porque con esto podemos acomodar los botones como yo quiero, si uso linearLayout los botones solamente estarán o en horizontal o en vertical, es poreso que es más adecuado para mí usar RelativeLayout que permite ubicar elementos en posición relativa a otros. Coloco Relative layout en toda la pantalla.

Lo siguiente será acomodar los botones, como queremos que los botones tengan imágenes, lo que yo hice fue descargar un paquete de iconos gratis para Android de Internet, o puedes poner la imágen que tu quieras en png, una vez que ya tengas la imagen deberás ponerla en la carpeta, res>drawable-mdpi, ahí se ponen los iconos pequeños en las carpetas drawable-ldpi y hdpi van iconos más grandes.

Ahora si podemos insertar nuestras imágenes botones, para esto te vas al apartado Images & Media, de ahí eliges ImageButton, y se empiezan a poner las imágenes que seleccione de las que acabo de mover a la carpeta drawable-mdpi en la posición que quiero.



También agrego texto debajo de cada imagen para eso uso un textView, lo mismo simplemente lo posiciono en donde quiero que este.Para modificar el texto que muestran los textView me voy directamente al xml de ahí modifico android:text = "esto" del textView correspondiente.

Usar RelativeLayout es cómodo ya que tu sabes cuando estas poniendo los componentes simétricamente, ya que siempre se busca poner los componentes relativamente a otros, nunca puedes poner algún botón en alguna posición totalmente Random, tienes que ponerlo con cierto patrón o simetría.

Este es mi resultado final:






En el simulador:




También se puede jugar un poco con los colores, como muchos ya saben esta aplicación es creada con el fin de manejar un Cubo de leds, ProyectoCuboLeds, pero eso lo checaré después lo importante ahora es que ya este usable y podamos programar las funcionalidades.

Encontré algunos iconos más adecuados:



Pantalla Dibujar

Para esto tenemos que crear mas Activitys y hacer que el boton Dibujar del menú principal reaccione al evento onClick.
Primero creo el otro XML, en el quedaron los botones acomodados así:


Y de una vez, también creo vista previa con otro XML:




Pasos:
































Meta alcanzada :), en la próxima entrada sobre interfaz veremos como dibujar las bolitas, y que cambien de color al tocarlas.

viernes, 20 de abril de 2012

jueves, 19 de abril de 2012

Clase 19 abril

Ecuaciones diferenciales


GRAFICAS PENDIENTES PARA EL PROX JUEVES :)

Sistemas caóticos - Crecimiento de plantas

Los sistemas caóticos son sistemas impredecibles,se refiere a la complejidad que es causada por la relación entre eventos sin que se vea una traza lineal que relacione la causa con el efecto, si no más bien un complejo calculo.

Es imposible saber las variaciones y es por eso que no podemos conocer con exactitud los acontecimientos futuros. Como no se puede saber los valores de las variables que afectan, se dice que es un sistema caótico en donde cualquier evento por insignificante que sea tiene el poder de cambiar el sistema por completo.
En matemáticas podemos decir que el caos es un comportamiento determinismo aperiodico sensible a las condiciones iniciales.

Crecimiento de plantas caótico


La estructura de muchas plantas es caótica, ya que cada rama se genera con una cierta probabilidad, y tiene cierta probabilidad de que muera o viva, o de que se sustituya por una hoja o flor.
Las funciones pueden llegar a contar con muchos tipos de distribuciones y los parametros pueden tomar valores en espacios discretos o continuos. Entonces con esto podemos ver que ya con pocas cosas mencionadas estamos armando todo un 'caos'.

La naturaleza es caótica (no ordenada y tampoco desordenada), por ejemplo, modelar un problema real mediante un sistema ordenado sería como representar iguales a todos los árboles que hay en un bosque. Pero en la vida real esto no sucede así, cada árbol, cada hoja de un árbol es diferente y hermosos, y eso es CAOS!!.

La generación de plantas de manera ordenada es romper la esencia de la realidad, es por eso que tenemos que modelar sistemas caóticos, y aprender a que las variables pueden tomar valores en forma aleatoria y esos valores son válidos.

Como ya lo mencioné antes el crecimiento de plantas se puede modelar computacionalmente usando variables aleatorias, que en la naturaleza la pueden llegar a determinar el clima, la cantidad de nutrientes,  viento, calidad de suelo, plagas, etc. Computacionalmente se hace eligiendo un valor pseudoaleatorio y de este valor partimos para elegir algún crecimiento en la planta, ya sea la inclinación, tamaño de las hojas, altura, ancho, forma, etc., que cada uno de esos factores serán representado por ecuaciones, en resumen se escogerá un valor al azar y con el se podrá elegir alguna ecuación que decida la estructura de la planta a construir, esta ecuación nos dará valores de salida "x" y "y" y de ellos dependeremos para el siguiente paso, sin embargo el siguiente paso será nuevamente determinado por una variable aleatoria y se podrá elegir de nuevo una ecuación que defina la estructura de la planta, y así sucesivamente.

Para modelar este sistema yo usé algo a que se llama algoritmo de iteración aleatoria que también es llamado juego del caos  concretamente el llamado Barnsley fern en donde un puntos que van dibujandose aparentemente aleatorios van formando progresivamente la figura del atractor. Con esto se elige el punto x0 del espacio y se forma una sucesión en donde cada paso se escoge aleatoriamente con alguna probabilidad.


Ese algoritmo asigna diferentes probabilidades a cada Fi. Con estas probabilidades se puede obtener diferentes TEXTURAS y DENSIDADES, muy útiles para modelar escenas naturales.

Black Spleenwort

El helecho de Barnsley utiliza cuatro transformaciones afines. La fórmula para una transformación es la siguiente:


Los valores de la tabla de abajo muestran valores, para producir la planta Black Spleenwort. En la tabla a y b corresponden a valores de coeficientes para x y y, del mismo x y y nuevo, f es el coeficiente y la p es la probabilidad de usar esa ecuación.

Imagen de Wikipedia
Poniéndolos en la matriz, vemos algo como esto:

Imagen de Wikipedia

Esto quiere decir que la probabilidad de usar F1 es de 1%, la de usar F2 es de 85%, la de usar F3 es la de 7% y F4 también 7%.


Imagen de wikipedia

La F1 se encarga de sólo mapear cualquier punto a un punto en el primer segmento de línea en la base del tallo.
La F2 mapea cualquier punto dentro del prospecto representado por el triángulo de color rojo, más pequeño representado por el triángulo azul en la figura.
La F3 dibuja de cualquier punto dentro de la hoja (o pabellón auricular), representado por el triángulo azul.
Y la F4 dibuja cualquier punto dentro de la hoja, representado por el triángulo azul a un punto dentro del triángulo alterna a través de el tallo.

En resumen a transformación de coordenadas primero señala a el tallo. La segunda genera copias sucesivas del tallo y hojas de fondo para hacer la completa helecho. La tercera señala a la fronda de abajo a la izquierda. La cuarta señala a la fronda de abajo a la derecha. La naturaleza recursiva de la IFS garantiza que el todo es una réplica más grande de cada fronda. El helecho está dentro del rango -2,1818 = x = 2,6556 y 0 = y = 9,95851.

El código lo he generado en python con los valores de coeficientes ya mencionados, y las variables correspondientes a cada ecuación para generar :




Ahora lo corro, y creo un archivo que guarde las salidas, que son los valroes de x y y para después graficarlos con Gnuplot.



Abro GNUPLOT y :



Y obtengo una salida como esta:

Con 10000 iteraciones:


Con 100000 iteraciones:



Con 1000000 iteraciones







Resultados cambiando coeficientes:

Cambiando la parte de coeficientes así:



Esta es la imágen que se obtiene:





Otro:



Y se obtiene:




Y con los coeficientes:


Resultado:





Y así podemos cambiar los coeficientes de las ecuaciones y aunque sean pequeños los cambios podremos ver cambios en las figuras que forman como las siguientes:

Este forma un helecho bastante curvo:


Acá se muestra una figura muy parecida a un caracol:






Con esto podemos ver el porque la formación de plantas es caótica, diversos factores influyen en las plantas como el clima, agua, sombra, sol, viento que por pequeños que sean esos factores influyen fuertemente en sus estructuras finales.


L-system

Pensaba terminar con el tema ya con eso mostrado pero me encontré con otra manera de simular el crecimiento de plantas que es diferente al pasado, lo que se hace con este es crear cadenas

Un sistema de Lindenmayer es una gramática formal (un conjunto de reglas y símbolos) que se usan principalmente para modelar el proceso de crecimiento de las plantas; y tambien modela la morfología de una variedad de organismos. Los sistemas-L se utilizan además para generar fractales autosimilares como los sistemas de función iterada. Los sistemas-L se desarrollaron en 1968 por el biólogo y botánico teórico húngaro Aristid Lindenmayer de la Universidad de Utrecht (1925-1989).
Yo use el generador con las siguientes reglas:


Con eso podemos formar la estructura de una planta, tomando en cuenta que cada caracter de la cadena significa algún movimiento.



Yo desarrolle el siguiente código:


Resultado:


Ahora grafiqué esto de alguna manera, la primera forma que pensé fue hacerlo tipo "tortuga" que moviera ángulos o cosas así pero como tengo poco tiempo, lo hice de otras maneras la primera fué que cada letra tenía un valor y se graficaban todos sus valores, entonces modifiqué el código así:





Resultado:


Y la otra forma que hice fue hacer una variable a la que se le sume o reste cierto número según el carácter de la cadena:



Resultado:


Y podemos ver como la figura entera esta compuesta de pequeñas formas con la misma figura, esto es la naturaleza fractal de las plantas que representan este modelo.


Fuentes

Fractales
Teoría del caos
Juego del caos