Professional Documents
Culture Documents
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.
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.
<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.
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
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 :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
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)
]
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
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)
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