Você está na página 1de 33

Animaes SUPERLOGO Construo de Gifs animadas

As vantagens de se usar uma linguagem de programao como Logo para gerar


animaes didticas so muitas. Primeiro, ao familiarizar-se com a linguagem para fazer
um desenho animado, muitos professores e alunos da escola mdia provavelmente tero
seu primeiro contato com programao de computadores. Isto coloca em suas mos
uma ferramenta muito mais til e flexvel que um programa de animao. Eles passam a
ser capazes de fazer muito mais do que desenhos animados, todos os recursos de uma
linguagem de programao poderosa esto disponveis para aplicao a diferentes
problemas de interesse didtico.
Portanto o programa de animao deve estar integrado s ferramentas matemticas mais
diversas: clculo de funes, nmeros aleatrios, operaes com matrizes, soluo de
equaes diferenciais, etc. Este certamente no o caso da maioria dos programas de
animao. J em uma linguagem de programao como o Logo esta integrao se d de
forma muito natural a animao apenas uma forma de representar os clculos
realizados pelo programa.
4.1 O comando Salvegif
O comando do SuperLogo que gera animaes GIF o salvegif, cuja sintaxe (salvegif
arquivo atraso adicionar repeties cores transparente )
Este comando fotografa a rea ativa da tela (ver mais frente) e guarda o resultado em
um arquivo GIF. Os argumentos de salvegif so

arquivo (palavra): Nome do arquivo GIF

atraso (inteiro): Intervalo de tempo entre quadros sucessivos, em 1/100


segundos.

adicionar (booleano): Falso no primeiro quadro, verdadeiro nos seguintes.

repeties (inteiro): Nmero de repeties. Infinitas repeties = 0. Sem


repeties = -1.

cores (inteiro): Nmero de bits por pixel, o que determina o nmero de cores nas
paletas. 1 = 2 cores, 2 = 4 cores, 8 = 256 cores.

transparente (lista): Cor transparente em formato RGB. Se nada for especificado


no haver cor transparente.

A escolha da rea a ser fotografada feita com o comando


selecionereaativa rea
onde rea uma lista com as coordenadas X-Y do canto inferior esquerdo e do canto
superior direito da rea retangular a ser fotografada.

Um programa Logo que utiliza os comandos acima para gerar uma animao GIF est
mostrado a seguir:
aprenda anima1
tat ; Limpa a tela
selecionereaativa [-150 -150 150 150] ; Define a rea das imagens
atribua "adic "falso ; Indica o primeiro quadro
repita 36 ~
[
repita 4 [pf 100 pd 90] pd 10 ;Desenha
(salvegif "anima1.gif 10 :adic 0 8) ;Fotografa e salva em anima1.gif
atribua "adic "verd
]
fim
O programa cria o arquivo anima1.gif contendo uma animao com 36 quadros de 300
x 300 pixels. Alguns quadros esto mostrados abaixo.

Quadro 12

Quadro 24

Quadro 36

O arquivo anima1.gif gerado pelo SuperLogo tem cerca de 140 KB. Como j
discutimos, este tamanho pode ser consideravelmente reduzido com tcnicas de
otimizao. Por exemplo, o programa de otimizao SuperGif, mencionado na seo
anterior, reduz o tamanho de anima1.gif para 14 KB.

4.2 Animao em 3D
O SuperLogo tem um recurso muito til para animaes: grficos em 3 dimenses. No
modo 3D a tartaruga pode desenhar no espao, com a perspectiva sendo tratada

automaticamente pelo Logo. O programa abaixo mostra como fazer uma animao em
3D.
aprenda anima2
tat
selecionereaativa [-150 -150 150 150]
logo3d ; Entra no modo 3D
atribua "adic "falso
repita 36 ~
[
circunferncia 100 rolepd 5
(salvegif "anima2.gif 10 :adic 0 8)
atribua "adic "verd
]
fim

Alguns dos quadros criados pelo programa esto mostrados abaixo. O arquivo
anima2.gif criado pelo Logo foi reduzido de de 130 KB para 21 KB com a otimizao.

Quadro 12

Quadro 24

Quadro 36

5. Controle da Animao
As pginas HTML (HiperText Mark-up Language) podem ser escritas utilizando-se
editores de texto, como o NotePad, Write, etc. ou feitas no Microsoft Word e salvas em
HTML. Porm, existem editores prprios para gerar HTML, tais como HotDog e
Microsoft FrontPage.

Animaes GIF podem facilmente ser integradas a documentos HTML e colocadas em


pginas da Internet. Isto abre uma perspectiva interessante: a produo de textos
didticos ilustrados com animaes, algo difcil de realizar com meios impressos. Se o
sistema estudado tem uma evoluo temporal que no de fcil visualizao, este tipo
de material didtico pode representar um papel importante.
As animaes inseridas em pginas da Internet, so iniciadas imediatamente aps serem
carregadas. Com os navegadores usuais no parece haver possibilidade de se controlar o
incio da exibio, algo que poderia ser til em muitas situaes. Uma soluo parcial
para este problema pode ser obtida usando JavaScript.
JavaScript (que no tem nada a ver com Java) uma linguagem desenvolvida pela
Netscape como uma espcie de extenso do HTML. Com JavaScript possvel
introduzir recursos de interatividade em uma pgina da Internet. Como um programa
JavaScript s existe dentro de um arquivo HTML, no existem aplicaes JavaScript
independentes de um navegador.
Abaixo mostramos um documento HTML que, interpretado por um navegador, exibe a
animao anima2.gif da seo anterior. Inicialmente a animao no mostrada. No seu
lugar colocada uma imagem esttica com as mesmas dimenses, lida no arquivo
anima2a.gif. Esta imagem serve como "capa" para a animao (usamos o primeiro
quadro de anima2.gif, com uma mensagem superposta). Apertando o boto Iniciar a
animao toma o lugar da imagem esttica. Com o boto Parar volta-se situao
inicial.
<html>
<head>
<script language="JavaScript">
<!-animacao1= new Image()
animacao1.src= "anima2.gif"
//-->
</script>
</head>
<body>
<center>
<h2> Animao GIF </h2> <p>
<img SRC="anima2a.gif" NAME="fig1" >

<form>
<input type='button' value='Iniciar' onClick='document.fig1.src=animacao1.src' >
<input type='button' value='Parar' onClick='document.fig1.src="anima2a.gif"' >
</form>
</center>
</body>
</html>
A figura abaixo mostra como esta pgina aparece em um navegador. esquerda est a
figura esttica anima2a.gif que aparece quando a pgina carregada. Ao seu lado est
um dos quadros da animao anima2.gif, exibida quando o boto Iniciar pressionado.

Este mtodo de iniciar a exibio tem uma restrio importante: ele s pode ser usado
com animaes que se repetem indefinidamente. Isto porque a animao comea a
"correr" assim que carregada pelo navegador, esteja ou no sendo mostrada. Ao
apertar o boto Iniciar nem sempre o filme aparecer no primeiro quadro. Se a
animao se repete indefinidamente, isto no um problema. Mas se no h repeties,
parte dos quadros, ou mesmo todos, sero perdidos. Portanto, boa prtica criar as
animaes para Internet no modo de repetio (repeties=0 em salvegif, veja acima) .
Fora dos navegadores Internet mais fcil controlar uma animao GIF. Por exemplo, o
MS Gif Animator, j mencionado, permite ver a animao com total controle da
exibio. Pode-se iniciar a animao em qualquer instante, interrompe-la, voltar atrs,
ver quadro a quadro, etc.

6. Exemplos de Animaes
Nesta seo vamos discutir alguns fenmenos fsicos que podem ser ilustrados com
animaes criadas com Logo. Os exemplos foram escolhidos por apresentarem aspectos
que no podem ser bem visualizados apenas por figuras estticas. claro que as
animaes no podem ser bem exibidas em meio impresso (do contrrio no seriam
necessrias).
Elas
esto
disponveis
na
Internet,
no
endereo
http://www.cristbarb.hpg.com.br.

6.1 Superposio de Ondas


Os fenmenos de natureza ondulatria tem importantes aplicaes no cotidiano, tais
como as ondas na superfcie da gua, que nos so familiares; ondas sonoras e luminosas,
ondas de rdio e outras ondas eletromagnticas.
Uma onda se forma a partir de uma srie de pulsos ou distrbios que se propagam
transmitindo energia. Quando duas ondas se cruzam elas se superpem, somando os
seus efeitos chamamos este fenmeno de interferncia. Em muitas situaes difcil
prever o resultado da interferncia de ondas. No temos muita intuio a este respeito,
pois quando vemos a interferncia deixamos de observar as componentes que se
superpem. Nestes casos animaes podem ser teis, mostrando tanto as ondas isoladas
quanto a sua superposio.
Por exemplo, uma animao pode mostrar como uma onda estacionria formada por
duas ondas harmnicas de mesma amplitude, freqncia e comprimento de onda,
movendo-se em sentidos opostos. O programa ondas.lgo [ver Anexo 1] filma a evoluo
das duas ondas harmnicas
y1(x,t) = A cos [ 2 p (x / l t / T) ]
y2(x,t) = A cos [ 2 p (x / l + t / T) ]
e da sua superposio
y(x,t) = y1(x,t) + y2(x,t) .
Alguns quadros da animao podem ser vistos na figura abaixo.

A no propagao da onda resultante claramente percebida na animao (mas no na


figura acima). Para muitos estudantes a animao seria um recurso til para
complementar o argumento matemtico, e freqentemente no compreendido, de que a
onda resultante no se propaga porque tem a forma:
y(x,t) = 2 A cos(k x) cos(w t) .
Uma variao interessante da animao acima o estudo de como ondas harmnicas
podem formar pacotes localizados no espao, e de como se movem estes pacotes. Que a
velocidade de um pacote (velocidade de grupo) possa ser diferente da velocidade das
ondas harmnicas que o formam (velocidade de fase) uma fonte de permanente
confuso entre os estudantes. Mesmo entendendo a matemtica envolvida, muitas vezes
eles no conseguem criar uma imagem intuitiva do fenmeno. A figura abaixo mostra
alguns quadros de uma animao que ilustra a propagao de um trem de pacotes e das
duas ondas que o formam. claramente visvel na animao (mas no na figura,
obviamente) produzida com o programa, ondas.lgo [ver Anexo 2], que a velocidade dos
pacotes muito diferente da velocidade das ondas harmnicas. Com a animao
velocidade de fase, tambm percebida como a velocidade de propagao das
oscilaes internas aos pacotes.

Outra variao interessante das animaes produzidas com ondas.lgo [ver Anexo 3] diz
respeito a velocidades de grupo negativas. Uma fsica muito rica e atual est associada

criao de meios materiais onde a velocidade de grupo da luz negativa - ou melhor,


tem sentido oposto velocidade de fase. O que ocorre quando a luz entra em um desses
meios bem pouco intuitivo, e a compreenso do que est acontecendo pode ser
ajudada por animaes. A figura abaixo mostra quadros de um filme que descreve como
pacotes de onda se comportam ao entrar em um meio com velocidade de grupo
negativa. As duas ondas harmnicas que formam os pacotes tambm so mostradas no
filme. A dificuldade em explicar o que ocorre, de como os pacotes "transmitidos" vo de
encontro aos incidentes, s ilustra o quanto uma animao til neste caso.

A situao fica ainda mais estranha se a regio com velocidade de grupo negativa for
estreita. Ns fizemos uma terceira verso de ondas.lgo [ver Anexo 4] para ilustrar este
caso. A animao mostra, para efeito de comparao, o que ocorre com pacotes que se
propagam apenas no "vcuo". Alguns quadros podem ser vistos na figura abaixo. Na
animao (mas no na figura abaixo) pode-se ver que um pacote atravessa a regio de
velocidade de grupo negativa mais rpido do que o faria se ali existisse vcuo! O
mecanismo de tais propagaes "mais rpidas que a luz" muito difcil de visualizar
sem o auxlio de animaes.

ANEXOS
aprenda onda1 :t
tat
repita 3 [(ativetartaruga cv-1) usenada mudexy -200 0 uselpis]
;Desenha o Grfico
para [x -100 100 1]~
[ ativetartaruga 0 dt
atribua "y1 :A*cosrad(:k*:x-:w*:t)
mudexy :x :y1+75

ativetartaruga 1 dt
atribua "y2 :A*cosrad(:k*:x+:w*:t)
mudexy :x :y2+25
ativetartaruga 2 dt
atribua "y :y1+:y2
mudexy :x :y-50
]
usenada
mudexy -90 60 (rotule "+)
mudexy -90 0 (rotule "=)
uselpis
(salvegif "ondaestac.gif 0 :adic 0 8)
atribua "adic "verd
fim
aprenda ondas
tat
atribua "A 15 ;amplitude
atribua "v 2 ;velocidade de propagao
atribua "lambda 20 ;comprimento de onda
atribua "k 2*PI/:lambda ;nmero de onda
atribua "w :v*:k ;frequncia angular
atribua "per :lambda/:v ;perodo
atribua "adic "falso
selecionereaativa [-100 -100 100 100]
para [t 0 :per :per/40] [onda1 :t]

fim
Anexo 2: Programa "Ondas.lgo" (Grupo)
aprenda onda1 :t
tat
repita 3 [(ativetartaruga cv-1) usenada mudexy -200 0 uselpis]
para [x -100 100 1]~ ;Desenha o Grfico
[
ativetartaruga 0
atribua "y1 :A*cosrad(:k1*:x-:w1*:t)
mudexy :x :y1+75
ativetartaruga 1
atribua "y2 :A*cosrad(:k2*:x-:w2*:t)
mudexy :x :y2+25
ativetartaruga 2
atribua "y :y1+:y2
mudexy :x :y-50
]
usenada
mudexy -99 62 rotule "+
mudexy -99 6 rotule "=
uselpis
(salvegif "grupo.gif 0 :adic 0 8)
atribua "adic "verd
fim
aprenda ondas

tat
atribua "A 15 ;amplitude
atribua "lambda1 11 ;comprimento de onda
atribua "lambda2 10
atribua "per1 21 ;perodo
atribua "per2 20
atribua "tmax :per1*:per2
atribua "quadros :tmax/2
atribua "k1 2*PI/:lambda1 ;nmero de onda
atribua "k2 2*PI/:lambda2
atribua "w1 2*PI/:per1 ;frequncia angular
atribua "w2 2*PI/:per2
atribua "adic "falso
selecionereaativa [-100 -100 100 100]
para [t 0 :tmax :tmax/:quadros] [onda1 :t]
fim
Anexo 3: Programa "Ondas.lgo" (GrupoNeg1)
aprenda onda1 :t
tat
usenada
mudexy 0 -100
blocobmp 200 200
repita 3 [(ativetartaruga cv-1) usenada mudexy -250 -100 uselpis]
;Desenha o Grfico
para [x -200 0 1]~

[
ativetartaruga 0
atribua "y1 :A*(cosrad :k1_0*:x-:w1*:t)+:B1*(cosrad :k1_0*:x+:w1*:t)
mudexy :x :y1+75
ativetartaruga 1
atribua "y2 :A*(cosrad :k2_0*:x-:w2*:t)+:B2*(cosrad :k2_0*:x+:w2*:t)
mudexy :x :y2+25
ativetartaruga 2
atribua "y :y1+:y2
mudexy :x :y-50
]
para [x 0 200 1]~
[
ativetartaruga 0
atribua "y1 :C1*(cosrad :k1*:x-:w1*:t)
mudexy :x :y1+75
ativetartaruga 1
atribua "y2 :C2*cosrad(:k2*:x-:w2*:t)
mudexy :x :y2+25
ativetartaruga 2
atribua "y :y1+:y2
mudexy :x :y-50
]
usenada
mudexy -199 62 rotule "+

mudexy -199 6 rotule "=


uselpis
(salvegif "gruponeg.gif 0 :adic 0 8)
atribua "adic "verd
fim
aprenda ondas
tat
atribua "A 15 ;amplitude
atribua "v0 2.6 ;velocidade no vcuo (x<0)
atribua "v1 2.2 ;velocidade no meio (x>0)
atribua "v2 3
atribua "per1 5 ;perodo
atribua "per2 4
atribua "tmax 20
atribua "lambda1_0 :per1*:v0 ;comprimento de onda
atribua "lambda2_0 :per2*:v0
atribua "lambda1 :per1*:v1
atribua "lambda2 :per2*:v2
atribua "k1_0 2*PI/:lambda1_0 ;nmero de onda
atribua "k2_0 2*PI/:lambda2_0
atribua "k1 2*PI/:lambda1
atribua "k2 2*PI/:lambda2
atribua "w1 2*PI/:per1 ;frequncia angular
atribua "w2 2*Pi/:per2
atribua "B1 :A*(:k1_0-:k1)/(:k1_0+:k1) ;coef. de reflexo

atribua "B2 :A*(:k2_0-:k2)/(:k2_0+:k2)


atribua "C1 :A*2*:k1_0/(:k1_0+:k1) ;coef. de transmisso
atribua "C2 :A*2*:k2_0/(:k2_0+:k1)
atribua "adic "falso
selecionereaativa [-200 -100 200 100]
para [t 0 :tmax :tmax/60] [onda1 :t]
fim
Anexo 4: Programa "Ondas.lgo" (GrupoNeg2)
aprenda onda1 :t
tat
usenada
mudexy -:L -95 blocobmp 2*:L 90
;Desenha o Grfico
mudexy -250 -100 uselpis
para [x -200 200 1]~
[
atribua "y1 :A1c*(cosrad :k1_0*(:x+:L)-:w1*:t-2*:k1*:L)+ ~
:A1d*(cosrad :k1_0*(:x+:L)-:w1*:t+2*:k1*:L)
atribua "y2 :A2c*(cosrad :k2_0*(:x+:L)-:w2*:t-2*:k2*:L)+ ~
:A2d*(cosrad :k2_0*(:x+:L)-:w2*:t+2*:k2*:L)
atribua "y :y1+:y2
mudexy :x :y+50
]
usenada
mudexy -250 -100 uselpis

para [x -200 -:L 1]~


[
atribua "y1 :A1c*(cosrad :k1_0*(:x+:L)-:w1*:t-2*:k1*:L)+ ~
:A1d*(cosrad :k1_0*(:x+:L)-:w1*:t+2*:k1*:L)+ ~
:B1c*(cosrad :k1_0*(:x+:L)+:w1*:t+2*:k1*:L)+ ~
:B1d*(cosrad :k1_0*(:x+:L)+:w1*:t-2*:k1*:L)
atribua "y2 :A2c*(cosrad :k2_0*(:x+:L)-:w2*:t-2*:k2*:L)+ ~
:A2d*(cosrad :k2_0*(:x+:L)-:w2*:t+2*:k2*:L)+ ~
:B2c*(cosrad :k2_0*(:x+:L)+:w2*:t+2*:k2*:L)+ ~
:B2d*(cosrad :k2_0*(:x+:L)+:w2*:t-2*:k2*:L)
atribua "y :y1+:y2
mudexy :x :y-50
]
para [x -:L :L 1]~
[
atribua "y1 :C1*(cosrad :k1*(:x-:L)-:w1*:t)+:D1*(cosrad :k1*(:x-:L)+:w1*:t)
atribua "y2 :C2*(cosrad :k2*(:x-:L)-:w2*:t)+:D2*(cosrad :k2*(:x-:L)+:w2*:t)
atribua "y :y1+:y2
mudexy :x :y-50
]
para [x :L 200 1]~
[
atribua "y1 :E*(cosrad :k1_0*(:x-:L)-:w1*:t)
atribua "y2 :E*(cosrad :k2_0*(:x-:L)-:w2*:t)
atribua "y :y1+:y2

mudexy :x :y-50
]
(salvegif "gruponeg.gif 0 :adic 0 8)
atribua "adic "verd
fim
aprenda ondas
tat
atribua "L 10
atribua "E 10 ;amplitude final
atribua "v0 2.6 ;velocidade no vcuo (x<0)
atribua "v1 2.2 ;velocidade no meio (x>0)
atribua "v2 3
atribua "per1 5 ;perodo
atribua "per2 4
atribua "tmax 20
atribua "lambda1_0 :per1*:v0 ;comprimento de onda
atribua "lambda2_0 :per2*:v0
atribua "lambda1 :per1*:v1
atribua "lambda2 :per2*:v2
atribua "k1_0 2*PI/:lambda1_0 ;nmero de onda
atribua "k2_0 2*PI/:lambda2_0
atribua "k1 2*PI/:lambda1
atribua "k2 2*PI/:lambda2
atribua "w1 2*PI/:per1 ;frequncia angular
atribua "w2 2*Pi/:per2

atribua "C1 :E*0.5*(1+:k1_0/:k1)


atribua "C2 :E*0.5*(1+:k2_0/:k2)
atribua "D1 :E*0.5*(1-:k1_0/:k1)
atribua "D2 :E*0.5*(1-:k2_0/:k2)
atribua "A1c :C1*0.5*(1+:k1/:k1_0)
atribua "A2c :C2*0.5*(1+:k2/:k2_0)
atribua "A1d :D1*0.5*(1-:k1/:k1_0)
atribua "A2d :D2*0.5*(1-:k2/:k2_0)
atribua "B1c :C1*0.5*(1-:k1/:k1_0)
atribua "B2c :C2*0.5*(1-:k2/:k2_0)
atribua "B1d :D1*0.5*(1+:k1/:k1_0)
atribua "B2d :D2*0.5*(1+:k2/:k2_0)
atribua "adic "falso
selecionereaativa [-200 -100 200 100]
para [t 0 :tmax :tmax/60] [onda1 :t]
fim
Anexo 5: Programa "LinhadeCampo.lgo"
aprenda calculo
;transformar x y -> r teta
atribua "r raizq(:x*:x+:y*:y)
atribua "teta (arctanrad :y :x)
atribua "kr :k*:r
atribua "kr2 :kr*:kr
atribua "kr3 :kr2*:kr
atribua "steta (senrad :teta)

atribua "cteta (cosrad :teta)


atribua "sf (senrad :w*:t-:kr)
atribua "cf (cosrad :w*:t-:kr)
atribua "Eteta :pk3*:steta*(:cf*(-1/:kr + 1/:kr3) - :sf/:kr2)
atribua "Er 2*:pk3*:cteta*(:cf/:kr3 - :sf/:kr2)
;transformar Er Eteta -> Ex Ey
atribua "Ex :Er*:steta + :Eteta*:cteta
atribua "Ey :Er*:cteta - :Eteta*:steta
atribua "E raizq(:Ex*:Ex+:Ey*:Ey)
fim
aprenda dipolo
atribua "c 1
atribua "lambda 50
atribua "per :lambda/:c
atribua "quadros 25
atribua "k 2*pi/:lambda
atribua "w :k*:c
atribua "pk3 1
atribua "L 122
selecionereaativa (lista -:L -:L :L :L)
atribua "adic "falso
para [t 0 :per :per/:quadros]~
[
linhas
(salvegif "dipolo.gif 0 :adic 0 8)

atribua "adic "verd


]
fim
aprenda linhas
tat
; zeros de Eteta(x,y=0,t) aproximadamente em
; (x-ct)/lambda = 0.5*n + 0.25, n=1,2...
para [s 0.25 :L/:lambda 0.5]~
[
atribua "x (:s+0.125)*:lambda + :c*:t
atribua "y 0
ativetartaruga 0
usenada
mudexy :x :y
uselpis
ativetartaruga 1
usenada
mudexy :x -:y
uselpis
ativetartaruga 2
usenada
mudexy -:x :y
uselpis
ativetartaruga 3
usenada

mudexy -:x -:y


uselpis
faaenquanto ~
[
calculo
atribua "dx :Ex/:E*0.1
atribua "dy :Ey/:E*0.1
atribua "x :x+:dx
atribua "y :y+:dy
ativetartaruga 0
mudexy :x :y
ativetartaruga 1
mudexy :x -:y
ativetartaruga 2
mudexy -:x :y
ativetartaruga 3
mudexy -:x -:y
]~
[e (pixel=[255 255 255]) (:r>1)]
]
fim
Anexo 6: Programa "Campo.lgo"
aprenda calculo
;transformar x y -> r teta
atribua "r raizq(:x*:x+:y*:y)

atribua "teta (arctanrad :y :x)


atribua "kr :k*:r
atribua "kr2 :kr*:kr
atribua "kr3 :kr2*:kr
atribua "steta (senrad :teta)
atribua "cteta (cosrad :teta)
atribua "sf (senrad :w*:t-:kr)
atribua "cf (cosrad :w*:t-:kr)
atribua "Eteta :pk3*:steta*(:cf*(-1/:kr + 1/:kr3) - :sf/:kr2)
atribua "Er 2*:pk3*:cteta*(:cf/:kr3 - :sf/:kr2)
;transformar Er Eteta -> Ex Ey
atribua "Ex :Er*:steta + :Eteta*:cteta
atribua "Ey :Er*:cteta - :Eteta*:steta
atribua "E raizq(:Ex*:Ex+:Ey*:Ey)
fim
aprenda campo
tat
para [x -:L :L :ds]~
[
para [y -:L :L :ds]~
[
usenada
mudexy :x :y
uselpis
calculo

se (:E>0.2*:pk3/:kr) [
atribua "dx :Ex/:E*:ds2
atribua "dy :Ey/:E*:ds2
mudexy (:x+:dx) (:y+:dy)
mudexy (:x-:dx) (:y-:dy)]
]
]
fim
aprenda dipolo
atribua "c 1
atribua "lambda 50
atribua "per :lambda/:c
atribua "quadros 25
atribua "k 2*pi/:lambda
atribua "w :k*:c
atribua "pk3 1
atribua "L 122
atribua "ds 4
atribua "ds2 :ds/2
selecionereaativa (lista -:L -:L :L :L)
atribua "adic "falso
para [t 0 :per :per/:quadros]~
[
campo
(salvegif "dipolo.gif 0 :adic 0 8)

atribua "adic "verd


]
fim

Anexo 7: Programa "Potencial.lgo"


aprenda potencial
atribua "dx 11
atribua "dy 11
atribua "lambda 50
atribua "periodo 50
atribua "quadros 10
atribua "L 100
atribua "k 2*pi/:lambda
atribua "w 2*pi/:periodo
dt
logo3d
mudecf [0 0 0]
mudeiluminao [.2 .3]
selecionereaativa (lista -1.6*:L -1.2*:L 1.6*:L :L)
atribua "adic "falso
para [t 0 :periodo*0.9999 :periodo/:quadros]~
[
plotfxy :t
(salvegif "potencial.gif 0 :adic 0)
atribua "adic "verd

]
fim

aprenda f :x :y
atribua "r raizq (:x*:x+:y*:y)
atribua "a cosrad(:w*:t-:k*:r)
atribua "b senrad(:w*:t-:k*:r)
atribua "ro :y*((:a/:r) - (:b*:k))
envie :ro
fim
aprenda cor :z
envie (lista 0 0 80)
fim
aprenda plotfxy :t
tat
limpepaleta
para [x -:L :L :dx] ~
[
para [y -:L :L :dy]
[
atribua "x1 :x
atribua "y1 :y
atribua "x2 :x+:dx
atribua "y2 :y+:dy
atribua "z1 f :x1 :y1

atribua "z2 f :x2 :y1


atribua "z3 f :x2 :y2
atribua "z4 f :x1 :y2
usenada
mudexyz :y1 :z1 :x1
uselpis
inciopolgono
mudecl cor :z2
mudexyz :y1 :z2 :x2
mudecl cor :z3
mudexyz :y2 :z3 :x2
mudecl cor :z4
mudexyz :y2 :z4 :x1
mudecl cor :z1
mudexyz :y1 :z1 :x1
fimpoligono
]
]
desenhepolgono
fim

Anexo 8: Programa "Solar.lgo"


aprenda desenhe
tat
mudecl 14

uselpis
esfera 100 10
usenada
para [i 1 :numorb]~
[
atribua "astro_i (elemento :i :astros)
atribua "raio 100*(elemento 2 :astro_i)
atribua "periodo (elemento 3 :astro_i)
atribua "tamanho 50;10*(elemento 4 :astro_i)
atribua "teta (elemento :i :angulo)+360*:t/:periodo
mudecl (elemento 5 :astro_i)
usenada
mudexyz 0 0 0
uselpis
circunferncia :raio
usenada
mudexyz :raio*(cos :teta) :raio*(sen :teta) 0
uselpis
esfera :tamanho 20
usenada
]
fim
aprenda esfera :rad :step
repita 180/:step [circunferncia :rad roleparadireita :step]
roleparadireita 180

repita 180/:step ~
[
atribua "q (cv*:step-90)
pf :rad*sen :q
cabeceieparatrs 90
circunferncia :rad*cos :q
cabeceieparafrente 90
pt :rad*sen :q
]
fim
aprenda orbitas
; astros -> [nome, semieixomaior/ua, perodo/dia, diametro/Terra, cor]
atribua "astros~
[
[Mercrio 0.3871 88.0 0.38 3]
[ Vnus 0.7233 224.7 0.95 5]
[ Terra 1.0000 365.3 1.00 1]
[ Marte 1.5237 687.0 0.53 4]
;[ Jpiter 5.2026 4332.7 11.19 7]
;[ Saturno 9.5547 10759.4 9.41 10]
;[ Urano 19.2181 30688.9 4.06 11]
;[ Netuno 30.1096 60182.3 3.88 [128 197 167]]
;[ Pluto 39.4387 90467.2 0.47 13]
]
atribua "numorb (numelem :astros)

atribua "angulo (vetor :numorb)


para [i 1 :numorb] [atribuaelemvetor :i :angulo (sorteienmero 359)]
fim
aprenda SistemaSolar
limpepaleta
atribua "tmax 181000
atribua "dt 4000
orbitas
mudecf [0 0 0]
logo3d
tat
desapareatat
ativetartaruga -1
mudexyz 10000 10000 8000 ;posicao do observador
ativetartaruga -2
cabeceieparatrs 90 ;z para cima
ativetartaruga 0
selecionereaativa [-230 -140 230 90]
atribua "adic "Falso
para [t 0 :tmax :dt]~
[
desenhe
(salvegif "sistemasolar1.gif 0 :adic 0)
atribua "adic "Verd
]

fim
Anexo 9: Programa "Solar2.lgo"
aprenda desenhe
tat
mudecl 14 uselpis
esfera 60 10
usenada
para [i 1 :numorb]~
[
atribua "astro_i (elemento :i :astros)
atribua "raio 350*(elemento 2 :astro_i)
atribua "periodo (elemento 3 :astro_i)
atribua "tamanho 8;5*(elemento 4 :astro_i)
atribua "teta (elemento :i :angulo)+360*:t/:periodo
mudecl (elemento 5 :astro_i)
usenada
mudexyz 0 0 0
uselpis
circunferncia :raio
usenada
mudexyz :raio*(cos :teta) :raio*(sen :teta) 0
uselpis
esfera :tamanho 20
usenada
]

fim
aprenda esfera :rad :step
repita 180/:step [circunferncia :rad roleparadireita :step]
roleparadireita 180
repita 180/:step ~
[
atribua "q (cv*:step-90)
pf :rad*sen :q
cabeceieparatrs 90
circunferncia :rad*cos :q
cabeceieparafrente 90
pt :rad*sen :q
]
fim
aprenda orbitas
atribua "astros~
[
[Mercrio 0.3871 88.0 0.38 9]
[ Vnus 0.7233 224.7 0.95 15]
[ Terra 1.0000 365.3 1.00 [0 170 255]]
[ Marte 1.5237 687.0 0.53 4]
]
atribua "numorb (numelem :astros)
atribua "angulo (vetor :numorb)
para [i 1 :numorb] [atribuaelemvetor :i :angulo (sorteienmero 359)]

fim
aprenda SSolar
limpepaleta
atribua "tmax 687
atribua "dt 15
orbitas
mudecf [0 0 0]
logo3d
tat
desapareatat
ativetartaruga -1
mudexyz 1500 1500 1000 ;posicao do observador
ativetartaruga -2
cabeceieparatrs 90 ;z para cima
ativetartaruga 0
selecionereaativa [-210 -120 210 80]
atribua "adic "Falso
para [t 0 :tmax :dt]~
[
desenhe
(salvegif "sistemasolar2.gif 0 :adic 0)
atribua "adic "Verd
]
fim