# DrGeo

DrGeo é um software livre de Geometria Dinâmica criado por Hilaire Fernandes sob a licença GNU LGPL. O projeto foi iniciado em 1996 como um programa para o sistema MS-DOS e portado para a plataforma GNU/Linux em 1999 através do conjunto de ferramentas GTK+. O software está disponível para uma ampla variedade de plataformas e de sistemas operacionais, como Linux, Mac OS X, Microsoft Windows, Android, iPads e a interface gráfica educacional Sugar.
Além de construções geométricas, o programa permite ao usuário aplicar-lhes transformações, animá-las e utilizar uma linguagem de script e construir macros, o que o torna mais versátil do que outros programas similares, como o Geogebra.

## Objetos
### Pontos

O DrGeo tem dois tipos de pontos: um livre, que pode ser movido com o mouse (que pode ser anexado a uma curva), e um ponto dado por suas coordenadas.
Há também a interseção de duas curvas e o ponto médio de um segmento de reta.

### Retas

O DrGeo é equipado com a reta clássica, o raio, o segmento de reta e o vetor.
Há também o círculo (definido por 2 pontos) e também o menos clássico arco por três pontos. O DrGeo pode construir polígonos (dados por pontos) e o lugar geométrico.

### Transformações

Além das retas paralela e perpendicular através de um ponto, o DrGeo também pode aplicar uma dessas transformações a um ponto:
* reflexão
* simetria
* translação
* rotação
* homotetia

### Macros

Quando alguns objetos, chamados finais, dependem de outros objetos, chamados iniciais, é possível criar uma nova transformação enviando os objetos iniciais aos finais. Isso é uma macro. Ela permite adicionar novos objetos ao DrGeo, como polígonos regulares ou novas transformações, como círculo de inversão.

## Programação

O DrGeo vem com uma linguagem de script, chamada Scheme, uma linguagem similar ao Lisp.

### Objeto Scheme

Também é possível criar um objeto Guile, que é um número, mas criado com um script, escrito na sintaxe do Scheme. Ele pode ter uma ou muitas variáveis, as quais são escolhidas na criação do objeto, com cliques do mouse. Os nomes das variáveis são a1, a2 etc. Por exemplo, se alguém quiser o quadrado de um número a1, o script
cria um objeto numérico, cujo valor é o quadrado do primeiro número. Se o primeiro número for modificado, o segundo é modificado também.
Se desejarmos implementar o quadrado de um número complexo, deveremos criar dois valores numéricos, um para a parte real, e outro para a parte imaginária. Como $(x+iy)^{2}=x^{2}-y^{2}+i(2xy)$, o script para a parte real é (uma vez que tenha sido selecionado um ponto livre)
e o script para a parte imaginária (com o mesmo ponto selecionado):
getCoordinates a1 produz uma lista porque a1 é um ponto, que tem duas coordenadas. O CAR dessa lista é a primeira coordenada, que é a abscissa, e o CADR da lista do CDR) é a segunda coordenada.
Uma vez feito isso, resta apenas criar um ponto cujas coordenadas sejam os dois números criados pelos scripts. A transformação é então definida. Ele implementa a função $\mathbb {C} \rightarrow \mathbb {C} ,z\mapsto z^{2}$ e pode ser transformado em uma macro.

### Figura gerada por Scheme

O objeto Guile pode apenas criar um número. Se desejarmos criar uma figura complexa por um script, devemos escrever o script com um editor de texto, salvá-lo com a extensão scm e, então, fazer o DrGeo avaliar o arquivo.
Aqui está como DrGeo cria um Triângulo de Sierpinski recursivamente: