Simplemente me dio un poco de hambre.
Esta demostración utiliza la capacidad del sistema de partículas de LiF para dibujar más de una línea a la vez. La clase PosicionAleatoria es utilizada para envolver la posición del ratón y generar una posición al azar siempre a cierta cercanía del ratón. Junto con la interface Mutable, es posible del mismo objeto obtener las cinco posiciones distintas necesarias para dibujar las cinco líneas que componen el rastro.
Los archivos, como de costumbre, se dejan a continuación.
Como un proyecto personal, que espero esté terminado y corriendo durante este año, quiero crear una comunidad en internet sobre un tema especifico que creo no se ha tocado mucho aquí en México. No doy más detalles debido a que antes de decir cualquier cosa deseo estar mejor informado al respecto. La base de dicha comunidad será un sistema de foros: phpBB3.
Cuando comencé a planear el uso de este programa encontré que existían un par de traducciones al español, desgraciadamente una utiliza la conjugación de verbos correspondiente a España, y otra la de Argentina (además de esta última está plagada de palabras mal traducidas). Para la población mexicana leer o recibir algo que utilice una conjugación extranjera (especialmente la española) es bastante molesto, por lo sería bastante desventajoso utilizar cualquiera de las dos traducciones disponibles para una comunidad que estaría enfocada a ser utilizada específicamente en México. Así que dada la situación comencé alrededor de octubre del año pasado la traducción de phpBB3 a un español digerible en México.
Cuando se comenzó el trabajo de traducción, phpBB estaba en planes dejar atrás la versión estable más reciente (en aquel momento la 2.0.22) a favor del la nueva versión tres (que en aquellos momentos estaba en su Release Candidate 5), por lo que la traducción se inició en versiones consideradas no-estables. Recientemente salió la versión final de phpBB3, y aprovechando que le di una revisada a los archivos de traducción que tenia, pude armar un paquete compatible con esta versión final y publicarlo en la página principal. Aunque aún faltan partes por traducir (específicamente partes del Panel de control Administrativo) todo el contenido con el que interactúa el usuario común está ya completamente traducido.
Ya se encuentra en línea una nueva versión de LiF, la 0.3. Nada realmente novedoso ya que se centra en corregir algunos errores encontrados al estar programando el calamar de tres pies y en agregar documentación donde antes no la había.
Al estar documentando las clases del paquete rastrosLineares, comencé a ver varias partes donde se podría abstraer la única característica de los rastros que aun se encuentra codificada internamente: el dibujado y trazado de estos. El código que dibuja entre líneas rectas y curvas de Bézier esta fijo en inamovible actualmente, de forma que existen solo esas dos opciones. Otras características modificables para los rastros son los colores, la posición, y el movimiento, de las cuales todas recaen en entidades externas al sistema y por lo tanto pueden ser modificadas o reimplementadas a placer. Con lo que he estado viendo espero que las interfaces que ya tengo definidas para el sistema de RastroLinear no varíen extremadamente pudiendo dejar, también como una entidad externa, el dibujado mismo del rastro.
Eso significa que en versiones futuras, quizás la 0.5 o 0.6, el sistema de partículas actual termine modificándose y por consiguiente dejando obsoleto (e incompatible) el código actual. Triste el caso, pero así es. Finalmente para eso sirven las versiones, para regresar al ayer, cuando las cosas eran mejores.
Actualmente trabajo en la implementación de una página de una empresa que organiza eventos. Quise experimentar un poco con el logotipo y en base a este generar el gráfico que se muestra mientras se carga la página u otras secciones internas del sitio.
logotipo gracias al cual nació el calamar tripode
El logotipo tiene unas colitas que intenté animar dinámicamente, de forma que fueran creciendo conforme se cargaba la información. Sin embargo el resultado no fue completamente de mi agrado, y aunque es mejorable no puedo dedicarle tanto tiempo a un gráfico que solo se va a ver por unos breves segundos entre sección y sección. Aun así, el efecto de las colitas moviéndose me agradó lo suficiente para terminar haciendo una pequeña demostración del mismo. El animalito este me recuerda un calamar o un pulpo, siempre está siguiendo el puntero del ratón y casi es una pequeña mascota. Hasta me siento encariñado con él.
Durante la implementación de esto me encontré con algunos errores en LiF versión 0.2. Aunque subo los archivos fuente, estos no funcionarán correctamente utilizando la versión de LiF que está actualmente en línea (versión 0.2). Aun así los dejo disponibles junto con el espacio temporal para la librería, de forma que en cuanto esté lista dicha versión actualizaré el artículo y el enlace.
Actualización (Enero 2, 2008): ya teniendo en línea la versión 0.3 de LiF, se colocó el enlace en la lista de archivos.
El sistema de rastros que está implementado dentro de LiF inicialmente trabajaba solamente trazando líneas rectas. En cada ejecución se recibe un punto a donde se dibuja una línea recta desde el punto anterior hasta el punto recién recibido. Con la nueva implementación se agregó el uso de curvas de Bézier de forma que el trazado fuera mucho más suave. En la siguiente demostración se puede ver una comparación del trazado de rastros utilizando curvas de Bézier o líneas rectas.
Un pequeño problema al hacer la implementación de las curvas de Bézier fue como trazar dichas curvas a partir de una serie de puntos. La solución, que después escribiré de ella, no es extremadamente compleja pero al parecer cumple su objetivo. En términos simples, para cada conjunto de tres puntos se traza una curva de Bézier que va desde el punto medio entre los primeros dos puntos, hasta el punto medio entre los dos puntos finales, teniendo como anclaje el segundo punto.
Al estar haciendo una ilustración para esto me percaté de que el algoritmo que utilizo (ilustrado como Bézier 1) tiene resultados muy angulares (es decir, las curvas generados se adhieren demasiado a la recta provocando que las curvas sean cortas y afiladas). Al investigar un poco más sobre el funcionamiento de las curvas de Bézier me percaté que probablemente el algoritmo que utilizo no genere los resultados que deseaba. Intenté hacer una aproximación de cómo yo pensé funcionaría correctamente el algoritmo pero el resultado (ilustrado como Bézier 2) tampoco se asemeja a lo que esperaba. Y peor aún, ninguno de los dos se asemeja a lo que veo en la actual implementación.
curvas de Bézier a partir de un conjunto de puntos
Así qué básicamente me espera desarmar un poco esto para ver si algo está efectivamente mal planteado, o si quizás accidentalmente ya di con la solución correcta.
Para la demostración mostrada arriba se utilizó LiF versión 0.2. Como siempre, los archivos están a continuación: