- El Pensadero de Canek - https://aztlan.fciencias.unam.mx/~canek/pensadero -

El programa de geometría

Para mi tesis eventualmente voy a necesitar hacer dibujos de entes geométricos que son endemoniadamente engorrosos de hacer a pie en PStricks (por ejemplo, hacer la triangulación de Delaunay [1] de un conjunto de puntos).

Por supuesto tales dibujos terminaré haciéndolos programáticamente; pero sería padre poderlos hacer con un programa interactivo; i.e., en una ventana poner los puntos como se me pegue la gana (con la posibilidad de cambiarles la posición con el ratón, por supuesto), y con un fabuloso click generar la triangulación. O el diagrama de Voronoi [2]. O el casco convexo [3]. O lo que se nos pegue la regalada gana. Y no sólo eso; que también tenga construcciones geométricas obvias, como círculos y polígonos.

Por supuesto, tal programa ya existe (en gran medida); se llama The Geometer’s Sketchpad [4]; pero tiene dos grandes “fallas”: una, sólo corre en Windows (módulo Wine y cosas así). Y dos, es un programa propietario.

A mucha gente esas dos cosas les puede importar un comino; a mí no.

En Linux ha habido varios intentos de hacer un equivalente (en software libre, por supuesto); el más famoso tal vez sea DrGeo [5]. Muchísimo menos famoso es un programa en el que Juan y Omar llevan (literalmente) años trabajando, que más o menos buscaba (o busca) resolver lo que a mí me interesa.

Me dieron ganas de entrarle al problema, y les pregunté que qué onda con su código. Omar me dijo que de plano convenía empezar de cero, porque su primera versión estaba escrita con Gtk+ 1 (y por tanto usa el original GnomeCanvas, que como todo mundo sabe consummatum est), y la segunda versión (en C#, hasta donde yo supe) estaba en pañales.

Lo que ellos querían era mucho más ambicioso a lo que yo busco: tenían contemplado usar Lua [6] como lenguaje de extensión, por ejemplo. A mí me interesa generar código en PStricks para mi tesis; me queda muy claro que ese es mi principal objetivo, así que un lenguaje de extensión ni siquiera me pasa por la mente ahorita. No se descarta nada, pero tengo una lista de prioridades bien definida.

También quiero (o quería; más adelante ahondo) usar Java como lenguaje de programación, y usar Java GNOME [7] (porque ni de loco lo hago en Swing). La decisión de usar Java tiene varias justificaciones: en primer lugar lo conozco mucho mejor que C# (aunque a la hora de la verdad dudo mucho que eso realmente importe). Pero más importante (para al menos), es una decisión política. Con la liberación de Java por parte de Sun, espero ver un montón de aplicaciones escritas en Java proliferando en GNOME, y quiero saltar al vagón. Además de que sinceramente creo que el lenguaje es el adecuado… como sin duda también lo sería C#.

Como sea, mis alegres intenciones se caen ante un problema enorme: no hay bindings de GNOME para Java. Mejor dicho; sí hay, pero las estables apestan (como bien lo han dicho sus propios creadores), y las nuevas (mucho más chidas) están en pañales.

Y no me refiero a que estén verdes: en gran medida no están. Básicamente están implementadas ventanas y una clase de botón. Y ni hablemos de Pango, Cairo (fundamental en lo que yo quiero), y similares.

Además, yo pensaba lanzarme a hacer un lienzo (canvas) sencillito (y lento) que hiciera lo que yo quiero, y después cambiarme al nuevo lienzo que eventualmente aparecerá en Gtk. El problema es que el nuevo lienzo ya está [8]… en pañales también, y sin ser integrado en GNOME. Además de que es versión 0.0.1… ni soñar de bindings para Java (aunque, curiosamente, sí hay para Python y C#).

Así que tengo básicamente dos opciones: hacer el programa en C (como los hombres y mujeres de verdad de antaño), o ayudar extensivamente en los bindings, y hacerlo en Java. No quiero hacerlo en C# por razones políticas, como ya expliqué.

Si tuviera tiempo, tomaría la segunda opción; pero quiero titularme para junio. Así que me lanzaré a hacerlo en C. La idea de usar Java no está para nada descartada; sólo esta primera iteración estará escrita en C. Varios programadores dicen que un proyecto debe ser reescrito al menos una vez; usaré esta iteración para entender bien cómo quiero este programa, cometer errores (inevitables al primer intento) en el diseño, y (lo principal) sacar mi tesis. La generación de código en PStricks es ortogonal a casi todo, según yo; incluso podría exportar a un formato XML, y la generación de código PStricks hacerla de una vez en Java.

En forma paralela (y conforme vaya acostumbrándome a las distintas APIs de CCC y Cairo) ayudaré con los bindings correspondientes, para que la segunda iteración sea posible en primer lugar.

O al menos ese es plan: igual y termino sin hacer mucho por la presión de la tesis. Pero suena interesante, y ni siquiera terriblemente complicado

3 Comments (Open | Close)

3 Comments To "El programa de geometría"

#1 Comment By Pablo On febrero 26, 2007 @ 4:41 PM

Deberias visitar
[9]
Muchas de las cosas o dibujos (y graficas) que deseas, se definen en forma implicita, para esto este software es el mejor (sobre todo si corres linux), otra opcion decente es el Kig, qeu biene incluido dentro del paquete de KDE-EDU, y tambien podrias intentar con GeomProf, este corre sobre Win32, pero, exporta con formato para eucleides, el software de tu amigo GEOM , es bueneo, pero lo ideal seria tener un sofware con ese entorno grafico, pero con la potencia de eucleides

#2 Comment By Canek On febrero 26, 2007 @ 5:51 PM

No uso KDE. Igual que mi decisión de no usar C# sino Java, es política y no tiene que ver con los méritos técnicos: quiero un programa para Gtk+ y/o GNOME.

Menos aún uso Windows, así que eso está descartado completamente.

Y además, aunque sí me interesa (y mucho) el generar código PStricks (que no EPS; quiero poder modificar ese código fácilmente), lo más importante es que quiero un programa interactivo.

Y por último, no es de ningún amigo; el programa es mío y puedes verlo en [10].

#3 Comment By Aitor On diciembre 1, 2008 @ 3:23 AM

Hola estoy buscando algun programa que me permita obtener el gradiente
de una funcion en una serie de puntos, el porblema es que no concoemos la
funcion analitica solo el valor de ésta en los nodos( puntos) trabajamos en 3d
gracias a todos