Começaremos apresentando dois fractais simples: as curvas de Koch e as árvores H (H trees). Você pode ler mais sobre eles na wikipedia:
As curvas de Koch são definidas da seguinte maneira. A curva de Koch de ordem 0 consiste em um segmento de reta. A curva de Koch de ordem 1 é obtida a partir da curva de Koch de ordem 0 subdividindo o segmento em três segmentos de mesmo comprimento, e substituindo a parte do meio por dois outros segmentos do comprimento da parte do meio, formando um bico (como dois lados de um triângulo equilátero), como indicado pela figura abaixo. Esse processo se repete a cada segmento da curva de Koch de ordem 1 para obtermos a curva de Koch de ordem 2, etc.
![]() |
Uma variante da curva de Koch é a chamada estrela de Koch, que é obtida de três curvas de Koch cada uma obtida a partir de um dos lados de um triângulo equilátero.
![]() |
As árvores H por sua vez são definidas da seguinte forma. A árvore H de ordem 0 é mostrada na figura abaixo. A árvore H de ordem 1 é obtida da de ordem 0 adicionando-se uma árvore H de ordem 0 com a metade do seu tamanho, centrada em cada uma de suas folhas. Similarmente, uma árvore H de ordem 2 é obtida da de ordem 0 adicionando-se uma árvore H de ordem 1 com a metade do seu tamanho, centrada em cada uma de suas folhas, etc.
![]() |
Estes são dois exemplos de construções recursivas. Você está convidado a pensar em uma construção sua, que dê origem a uma família de figuras semelhante a estas.
Nesta seção, descreveremos apenas o necessário desta linguagem para que você possa implementar esse EP. Esta descrição baseia-se numa parte da seção 4.3 do livro do Sedgewick, Algorithms in C.
Os operadores aritméticos básicos em postscript são add, sub, mul, div (divisão em float) e idiv (divisão inteira). Um exemplo de programa em postscript mostra como se pode utilizar estes operadores:
Além destes operadores aritméticos, você pode achar útil o operador neg, que reverte o sinal do número no topo da pilha.
A linguagem postscritp (ps) tem um número de funções primitivas que servem de instrução para um dispositivo abstrato para desenhar. A ação de cada função é em geral clara do seu nome. Estas funções são acionadas com argumentos que estejam na pilha. Por exemplo,
A seguir, descrevemos com precisão a ação das funções mais básicas, que devem ser suficientes para você gerar as figuras pedidas neste EP. Antes disso, vamos descrever o dispositivo abstrato para desenhar. O dispositivo consiste de uma página virtual, inicialmente em branco, com um sistema de coordenadas. A origem deste sistema fica no canto inferior esquerdo da página, o eixo x é o horizontal e o eixo y, o vertical. Além da página, temos uma caneta virtual.
A operação moveto remove dois números da pilha e trata-os como as coordenadas x e y para onde move a caneta. A operação rmoveto é como o moveto, porém o movimento é relativo à posição corrente da caneta. Por exemplo,
Até agora, não desenhamos nada. Apenas movemos a caneta.
O operador lineto remove dois números da pilha, tratando-os como as coordenadas x e y de um ponto,
e registra um segmento de reta do ponto onde está a caneta para o ponto (x,y).
A caneta termina no ponto (x,y).
O operador rlineto é semelhante, mas interpreta os dois números desempilhados como a posição relativa à posição corrente.
Vejamos um exemplo para entender melhor. Neste ponto, eu sugiro que você copie o programa ps abaixo
em um arquivo texto de nome
Além destes, um comando que pode ser útil para manipular a pilha é o roll. Este comando remove dois números da pilha, digamos, a primeiro, depois b, e rotaciona circularmente a vezes os b últimos números da pilha. Por exemplo, ao final do programa
Para mais informações sobre a linguagem postscript, consulte o seu manual completo. No entanto, antes de usar no seu EP qualquer recurso da linguagem que não esteja entre os apresentados acima, por favor, me consulte.
Comece brincando um pouco com postscript. Escreva um programa ps que desenhe a curva de Koch de ordem 1. Uma vez que você tenha feito isso, tente escrever uma função recursiva em C que receba como parâmetro um inteiro n ≥ 0 e imprima um arquivo ps que desenhe a curva de Koch de ordem n. Depois disso, será fácil obter a estrela de Koch.
Passe para a árvore H apenas depois de ter conseguido gerar o arquivo da estrela de Koch. A árvore H dá um pouco mais de trabalho.
Para o seu fractal, você está liberado para usar outras funções da linguagem postscript, como por exemplo funções que desenham arcos, ou círculos, etc. Divirta-se xeretando o manual.
Há recursão na linguagem postscript, mas não a use para desenhar a estrela de Koch ou a árvore H. Se quiser, experimente no seu fractal.
Divirta-se com o EP!
programa
deve ser entregue até dia 13 de setembro, inclusive.