Porque escrevemos o Cinderella? Não há já programas suficientes para fazer matemática e, em particular, produzir gráficos? Bom, há muito programas, mas o Cinderella é especial em muitos aspectos.
Queremos apontar as melhores características deste programa. Cinderella...
As áreas de aplicação do Cinderella estendem-se desde a geometria pura (euclidiana e não-euclidiana) até à Cinemática Computacional e CAD, passando pela Física (óptica, por exemplo). As aplicações seguintes apresentam alguns cenários onde se pode ganhar com a utilização do Cinderella.
Suponha que está a escrever um artigo científico para o qual necessita de uma ou mais figuras. Quando elas são um pouco mais elaboradas é usualmente quase impossível obter um bom resultado à primeira tentativa.
A linha de Euler de um triângulo |
Aparecerão muitos elementos juntos uns dos outros, ou parte da figura não caberá na página.
Com Cinderella comece por um rascunho da construção pretendida. Este esboço pode não ter o aspecto pretendido, mas compreende todas as relações que são decisivas para a figura. Mais tarde, movendo um ou mais elementos, escolhe segundo o valor estético das figuras. Usando o Editor de Aspecto pode ainda alterar os tamanhos e cores de todos os elementos.
Às vezes acontece pretender obter intuição sobre uma situação geométrica. Porque se leu algo num livro de Geometria, ou porque se teve uma ideia original.
Faz-se a construção com Cinderella e começa-se a brincar com ela. Através de exploração geométrica ganha-se nova perspicácia e, muitas vezes, propriedades escondidas são reveladas. A implementação matematicamente consistente do Cinderella garante que nenhum facto estranho ocorrerá que não provenha genuinamente da configuração geométrica.
Dinâmica de ligação de três barras |
Quando quizer comunicar a sua investigação a outros colegas pode criar uma página interactiva na WWW e desponibilizá-la na Internet. Os seus colegas têm então acesso imediato à configuração e podem interagir com ela localmente, usando os seus browsers.
Outra aplicação interessante é a criação de exercícios interactivos para os estudantes. Imagine que pretende ensinar aos seus alunos como construir o circuncentro de um triângulo usando apenas régua e compasso. Primeiro deve fazer a construção você mesmo. Depois cria um exercício interactivo, marcando os "elementos dados", fornecendo os textos do exercício, marcando os "passos intermédios" e o "resultado final". Cinderella gera uma página de WWW interactiva que apresenta os elementos dados (talvez o triângulo de partida) junto com todas as ferramentas para a construção de figuras com régua e compasso.
Os estudantes podem resolver os exercícios nos seus computadores e obter os resultados certos sem ajuda, ou usando sugestões fornecidas. Independentemente da construção seguida para obter a resposta a capacidade de verificar teoremas de Cinderella pode verificar a respectiva correcção. A criatividade dos alunos não é posta em causa pelo programa.
Um exercício para os estudantes |
Ao planear o Cinderella procurámos atingir vários objectivos. Vamos mencionar os três mais importantes para dar uma ideia da arquitectura do programa.
Abordagens Gerais: Cinderella foi projectado para cobrir uma vasta gama de disciplinas geométricas. O programa é propício para fazer Geometria Euclidiana, Hiperbólica, Elíptica e Projectiva.
Isto significa que não é necessário realizar construções euclidenas complicadas para emular Geometria Hiperbólica. Pode seleccionar-se o "modo hiperbólico" de Cinderella e as construções terão o comportamento de elementos do plano hiperbólico.
Esta generalidade é conseguida mediante a implementação no Cinderella de abordagens genéricas à geometria, que constituem base comum para as áreas mencionadas acima. Muita da matemática subjacente ao Cinderella usa os grandes, e injustamente esquecidos, resultados dos geómetras do século XIX. Mencionemos alguns deles: Plücker, Grassmann, Cayley e Möbius que desenvolveram uma linguagem algébrica belíssima para lidar com a geometria projectiva; Gauss, Bolyai e Lobachevsky que "descobriram" o que hoje se chama Geometria Hiperbólica; e finalmente Klein, Cayley e Poincaré que conseguiram fornecer uma descrição unificada das geometrias euclidiana e não-euclidianas a partir da geometria projectiva e dos números complexos. Para uma introdução muito bem escrita e empolgante ao desenvolvimento histórico da geometria no século XIX recomendamos o livro de Yaglom [Yag]. Outra boa introdução a este tópico é o livro do próprio Klein [K11].
Circunferências hiperbólicas com o mesmo raio |
A geometria de incidência do Cinderella baseia-se na Geometria Projectiva, enquanto as geometrias de Cayley-Klein são as bases da parte métrica do programa.
Curva offset de uma parábola. Um desafio para a maioria dos sistemas de CAD |
Outros sistemas de geometria dinâmica sofrem de inconsistências matemáticas. Constrói-se uma configuração, movem-se alguns elementos básicos e, de repente, parte da construção salta de um lugar para outro. Esta é, infelizmente, uma situação comum noutros sistemas de geometria dinâmica e CAD paramétrico.
Cinderella resolve completamente este problema usando uma nova teoria. Utiliza resultados de análise complexa misturados com a "geometria antiga" citada acima.
Com base nesta teoria foi possível equipar Cinderella com um verificador automático de teoremas que governa a maior parte das decisões do Cinderella. Este verificador de teoremas é também usado para reagir automaticamente durante a resolução de exercícios pelos alunos. Outra vantagem desta abordagem é que, assim, se consegue um instrumento generalista para construir lugares geométricos correctos e completos, que são ramos reais de curvas algébricas.
Curva conchóide numa vista euclidiana | e numa esférica. |
Mesmo a actual versão de Cinderella benificia da estrutura modular. Por exemplo, é possível observar a mesma construção simultaneamente em vários contextos geométricos. Uma construção em geometria hiperbólica pode ser vista e manipulada, ao mesmo tempo, no modelo de Poincaré e no de Beltrami-Klein. A utilização de diferentes instâncias da mesma construção geométrica permite ganhar um conhecimento mais profundo sobre o objecto em questão. Por exemplo, o comportamento no infinito dos elementos de uma figura é mais claro se usarmos a vista esférica.
Normalmente ninguém se deve preocupar com a programação, ou outros pormenores técnicos, dos programas que se quer usar. Contudo, queremos explicitar os fundamentos informáticos do Cinderella.
Cinderella foi escrito em Java, a linguagem de programação independente de plataforma, criada pela Sun Microsystems. Isto significa que o programa corre em qualquer computador, independentemente do seu sistema operativo, desde que munido da "Java Virtual Machine" (JVM) para o respectivo sistema. Estas JVM's podem ser obtidas da Sun Microsysytems para Windows95/98/NT e Solaris, e há versões para Linux, OS/2, MacOS, BeOS, AIX, HP-UX, e muitos mais. Provavelmente já terá uma JVM instalada no seu computador, já que tanto o Netscape Navigator como o Internet Explorer da Microsoft têm JVM's incluídas. Isto, por sua vez, leva a que possa executar programas em Java no seu browser. Estes programas chamam-se "Applets".
Não pretendemos explicar Java em pormenor aqui, propomos-lhe que visite a página oficial do Java na WWW no endereço http://www.javasoft.com como ponto de partida para leituras posteriores. Contudo, queremos explicitar algumas vantagens da escolha de Java na programação do Cinderella.
É conhecido que, apesar do sistema operativo Windows, da Microsoft, ser o mais difundido, muitos departamentos de Matemática usam vários tipos de estações de trabalho cujo sistema operativo é o Unix. Mesmo dentro do mesmo grupo de trabalho se podem encontrar sistemas diferentes. Java permite que todos, independentemente do sistema operativo em que trabalhem, usem o Cinderella da mesma forma. É mesmo possível instalar o mesmo código máquina em todos os computadores. Nós pudemos utilizar o nosso sistema operativo favorito (Linux) para desenvolver um programa que, sabíamos, irá estar disponível para a mais vasta audiência.
O facto de o Java ser executado dentro de cada browser foi usado para construir a capacidade de exportação do Cinderella. Isto significa que você pode publicar construções com facilidade, abrilhantar a sua página na WWW com animações, ou elaborar exercícios com construções geométricas para os alunos. O nosso contrato de licenciamento dá muita liberdade para redistribuir as partes necessárias do Cinderella, mas por favor respeite as pequenas restrições que ele contém.
Java é uma linguagem interpretada, em oposição às linguagens compiladas como C ou C++, que são mais habituais. As linguagens interpretadas têm algumas vantagens técnicas, mas, ao sofrerem um passo adicional para a respectiva tradução, tornam os programas mais lentos. Java (ou JVM) foi afinado para ter o melhor desempenho possível e conceder a sensação de interactividade do Cinderella.
Às vezes pode notar um pequeno atraso quando move um ponto. Não culpe o seu computador, o Cinderella ou o Java. Estes atrasos são causados por cálculos extremamente complexos necessários à correcção do resultado ou da colocação do ponto na tela. Ser capaz de gerar lugares geométricos correctos é uma das razões, lidar com muitas intersecções de cónicas é outra. Tentámos tornar os cálculos tão rápidos quanto possível, mas há um limite matemático que respeitamos: o de não sacrificar precisão em troca por velocidade.
Finalmente queremos referir as ferramentas que utilizamos na criação do Cinderella e a sua documentação. Primeiro há o XEmacs, um poderoso e extensível editor, baseado no GNU Emacs, o qual, por sua vez, é um sucedâneo do Emacs original escrito por Richard Stallman nos anos setenta no MIT. É claramente o melhor editor disponível, usámo-lo para escrever todo o programa e a sua documentação.
O programa em si foi desenvolvido com a ajuda do Java Development Kit da Javasoft, uma divisão da Sun Microsystems, em particular com o seu projecto Linux (ver http://java.blackdown.org para mais informações sobre o projecto Java-Linux). Linux é um sistema operativo livre, semalhante ao Unix, originado no trabalho de Linus Torvalds, continuamente melhorado pelo esforço de centenas de programadores em todo o mundo.
Para trabalhar com construções previamente eleboradas e guardadas utilizou-se o progrma de distribuição livre ANTLR 2.5.0, escrito por Terence Parr, do Instituto MageLang. A pós-optimização e compressão do código foram efectuados com Jax, da alphaworks, a divisão de investigação da IBM. Queremos agradecer à equipa do Jax, em particular a Frank Trip, pela sua ajuda, e à IBM por nos permitir usar o Jax comercialmente.
O Concurrent Versions System (CVS) da Cyclic Software operou a fusão do programa, poupando-nos muitas dores de cabeça. Trata-se de mais um programa de distribuição livre.
Graças à "guerra de browsers" entre a Microsoft e a Netscape, as condições de redistribuição do Netscape Navigator permitem-nos incluir com o Cinderella um browser compatível com Java 1.1.
A documentação do Cinderella, tanto o manual impresso como a versão online, foram criados com XEmacs em HTML. Usámos os mesmos ficheiros para as versões electrónica e em papel. A arquitectura das páginas de WWW usa Cascade Style Sheets (CSS); para a impressa usámos uma versão de html2ps de Jan Karrman.
Os ícones e imagens do Cinderella foram criados por nós mesmos, com The GIMP (GNU Image Manipulation Program), escrito por Peter Mattis e Spencer Kimball. Na nossa opinião trata-se de um dos programas mais impressionantes entre os que têm distribuição livre. Figuras adicionais foram criadas com o Cinderella, claro, e com Povray, um programa de raytracing, e alguma intervenção directa nos ficheiros em formato PS.
Duas pessoas merecem menção especial: James Gosling, o criador da linguagem Java, e Jamie Zawinski, responsável pelas primeiras versões Unix do Netscape Navigator. Ambos se encontram ligados ao XEmacs de forma especial: James Gosling produzui a primeira implementação em C do Emacs, conhecida como GOSMACS, e Jamie Zawinski era a pessoa responsável pelas versões 19.0 até 19.10 do Emacs, que era, na altura, um projecto conjunto da Lucid (que faliu) e da Sun Microsystems.