Programovací jazyk Logo - dokončení seriálu

6. 11. 2007
Doba čtení: 15 minut

Sdílet

V závěrečné části seriálu o programovacím jazyce Logo dokončíme téma trojrozměrné grafiky popisem použití vyplněných polygonů a jednoduchého osvětlovacího modelu při tvorbě prostorových objektů. Dále bude uveden soupis literatury a většiny příkazů Loga, se kterými jsme se v průběhu tohoto seriálu seznámili.

Obsah

1. Vykreslování polygonů v 3D prostoru
2. Osvětlovací model použitý v MSW Logu
3. Demonstrační příklad – práce s osvětlovacím modelem
4. Příkazy Loga rozdělené podle kategorií
5. Literatura
6. Odkazy na Internetu: české a slovenské stránky
7. Odkazy na Internetu: anglické stránky

1. Vykreslování polygonů v 3D prostoru

V předchozí části tohoto seriálu jsme si ukázali způsob vykreslování drátových modelů (wireframe) pomocí úseček vytvářených v 3D prostoru. Dnes téma prostorové grafiky dokončíme vysvětlením způsobu tvorby plošných polygonů (mnohoúhelníků), které je možné vykreslovat například v MSW Logu. Polygony tvoří základ moderní 3D grafiky, protože je lze snadno a rychle vykreslovat (renderovat) s využitím GPU i běžných grafických akcelerátorů. Také se dá snadno vypočítat barva polygonu na základě barvy a intenzity dopadajících světel. O této problematice se krátce zmíníme ve druhé kapitole. Nyní si řekněme, jakým způsobem je možné v MSW Logu vytvářet polygony a jaké jsou na ně kladena omezení.

Polygon je definován množinou vrcholů, které se ukládají do interního seznamu, ze kterého pak interpreter Loga (resp. knihovna zodpovědná za vykreslování) vytvoří kýženou vyplněnou plošku. Záznam vrcholů probíhá přímo během pohybu želvy, tj. lze používat běžné příkazy pro změnu pozice želvy, včetně procedur forward, back, setxyz, setpos apod. Do interního seznamu se zapisují pouze koncové pozice želvy. Samotný záznam polygonu je nutné spustit procedurou polystart, ukončení zápisu a případné vykreslení polygonu se provádí procedurou polyend. Je však nutné zajistit, aby vytvářený polygon byl konvexní a všechny jeho vrcholy ležely v jedné ploše. S využitím relativní želví grafiky je možné planárnost polygonu snadno zaručit, ovšem konvexnost je nutné zajistit programově (například otáčením želvy pouze jedním směrem).

2. Osvětlovací model použitý v MSW Logu

V MSW Logu je při vykreslování polygonů použitý velmi jednoduchý osvětlovací model založený na jednom bodovém světle a Phongově způsobu výpočtu světelných podmínek na planárním povrchu (plošce). Bodové světlo je reprezentováno pseudoželvou s číslem –3. Z předchozí části seriálu již víme, že pseudoželva s číslem –1 představuje pozorovatele 3D scény a pseudoželva s číslem –2 bod, na který se pozorovatel (kamera) dívá. Nyní nám tedy přibyla pseudoželva s číslem –3. Vhodným umístěním všech tří pseudoželv v prostoru – ideálně pomocí procedury setpos nebo setxyz se nastavují základní parametry 3D scény. Samotné vlastnosti světla jsou nastavovány procedurou setlight, které se předá parametr ambientní složky světla (intenzita složky konstantní pro celý okolní prostor, nezávisle na zdroji světla) a druhým parametrem je difúzní složka světla (intenzita složky vycházející ze světelného zdroje). Oba parametry mohou být v rozsahu 0–1.

3. Demonstrační příklad – práce s osvětlovacím modelem

V demonstračním příkladu je ukázáno jak základní ovládání grafické plochy pomocí příkazů clearscreen, clearpalette, setpencolor a setscreencolor, tak i vykreslování vyplněných a osvětlených 3D polygonů, které je zabezpečeno příkazy polystart, polyend a polyview. Všimněte si, že čtverec je vždy planární a současně i konvexní.

; vykreslení čtverce umístěného v prostoru
to square
    ; začátek vykreslování polygonu
    polystart
    repeat 4 [
        forward 200
        right 90
    ]
    ; konec vykreslování polygonu
    polyend
end

; vytvoření jednoduché trojrozměrné scény
to test3d
    clearscreen
    ; přepnutí do perspektivního promítání
    perspective
    ; nastavení barvy pera a barvy pozadí
    clearpalette
    setpencolor [255 0 0]
    setscreencolor [0 0 0]
    ; nastavení pohledu na model
    rightroll -60
    ; vytvoření 72 prostorových čtverců
    repeat 72 [
        right 2
        square
        rightroll 5
    ]
    ; výpočet osvětlení
    polyview
end 

logo2001
Obrázek 1: Screenshot demonstračního příkladu

4. Příkazy Loga rozdělené podle kategorií

V následujících tabulkách jsou uvedeny nejčastější příkazy, se kterými se můžete v mnoha implementacích Loga setkat. Další příkazy již nejsou tak časté (3D grafika, ukládání obrázků do animovaných GIFů, práce se sítí), ale přesto je zde pro úplnost uvádím.

4.1 Základní příkazy a speciální formy

Procedura Význam
to začátek definice procedury
end konec definice procedury
make vytvoření či přiřazení hodnoty do globální proměnné
localmake vytvoření či přiřazení hodnoty do lokální proměnné
thing načtení proměnné a vrácení její hodnoty
: náhrada za thing "

4.2 Řídicí struktury

Procedura Význam
repeat opakování bloku příkazů
repcount aktuální hodnota počitadla smyčky
if podmíněné provedení bloku příkazů
ifelse podmíněné provedení jednoho z dvojice bloků
when registrace handleru události (Atari Logo)
output ukončení procedury a návrat hodnoty

logo2002

4.3 Relativní pohyb želvy

Procedura Zkratka Význam
forward xx fd xx posun želvy o xx kroků dopředu
back xx bk xx posun želvy o xx kroků dozadu
left xx lt xx otočení želvy o xx stupňů doleva
right xx rt xx otočení želvy o xx stupňů doprava

4.4 Absolutní pohyb želvy

Procedura Význam
home umístění želvy na souřadnice [0,0], tj. do středu grafické plochy
setpos [x y] umístění želvy na souřadnice [x, y]
setxy x y umístění želvy na souřadnice [x, y]
setx x změna horizontální souřadnice želvy na hodnotu x
sety y změna vertikální souřadnice želvy na hodnotu y
setheading α změna natočení želvy na zadaný úhel α

4.5 Další grafické procedury

Procedura Význam
setxyz nastavení želvy na souřadnice určené trojicí parametrů
setz nastavení třetí, tj. z-ové souřadnice želvy
setposxyz podobné první proceduře, ale předává se seznam tří hodnot
left relativní změna směru heading
right relativní změna směru heading
setheading nastavení směru heading na předanou hodnotu
leftroll relativní změna směru roll
rightroll relativní změna směru roll
setroll nastavení směru roll na předanou hodnotu
uppitch relativní změna směru pitch
downpitch relativní změna směru pitch
setpitch nastavení směru pitch na předanou hodnotu
setorientation nastavení všech tří směrů podle seznamu [roll pitch heading]
showturtle zobrazení želvy
hideturtle skrytí želvy
setturtle nastavení želvy (podle čísla)
clean smazání obrazovky
clearscreen clean+home
setpencolor nastavení barvy kreslení
setscreencolor nastavení barvy pozadí
setbackground nastavení barvy pozadí
wrap režim obrazovky – toroidní plocha
fence režim obrazovky – kontrola překročení okrajů
window režim obrazovky – nekonečná plocha
penup zvednutí kreslicího pera
pendown spuštění kreslicího pera
dot vykreslení bodu (pixelu)
arc vykreslení oblouku
ellipse vykreslení elipsy
label výstup textu
fill vyplnění části grafické plochy
gifsave uložení části grafické plochy do formátu GIF

logo2003

4.6 Základní aritmetické funkce

Jméno funkce Význam
sum součet dvou čísel nebo (pro LISPovskou syntaxi) libovolně dlouhé řady čísel
difference rozdíl dvou čísel
minus obrací znaménko argumentu
product vynásobení dvou čísel nebo (pro LISPovskou syntaxi) libovolně dlouhé řady čísel
quotient dělení celočíselných či reálných čísel (podle typu dat)
remainder zbytek po dělení
int převod reálného čísla na nejbližší celočíselnou hodnotu
round zaokrouhlení reálného čísla na celočíselnou hodnotu

4.7 Pokročilejší matematické funkce

Jméno funkce Význam
sqrt druhá odmocnina zadané číselné hodnoty (platí pouze pro nezáporné parametry)
power výpočet xy, kde x a y jsou hodnoty argumentů
exp výpočet ex, kde e je Eulerova konstanta
log10 výpočet desítkového logaritmu
ln výpočet přirozeného logaritmu (o základu e)

4.8 Goniometrické funkce

Jméno funkce Význam
sin výpočet funkce sinus pro úhel zadaný ve stupních
cos výpočet funkce kosinus pro úhel zadaný ve stupních
arctan výpočet funkce arkustangent, výsledek je vrácený ve stupních
(arctan x y) výpočet funkce arkustangent pro hodnotu y/x – obdoba céčkovské funkce atan2()
radsin výpočet funkce sinus pro úhel zadaný v radiánech
radcos výpočet funkce kosinus pro úhel zadaný v radiánech
radarctan výpočet funkce arkustangent, výsledek je vrácený v radiánech

4.9 Bitové funkce

Jméno funkce Význam
bitand operace logického součinu prováděná bit po bitu
bitor operace logického součtu prováděná bit po bitu
bitxor operace logické non-ekvivalence prováděná bit po bitu
bitnot negace prováděná bit po bitu
ashift aritmetický posun hodnoty doleva či doprava (podle znaménka druhého parametru)
lshift logický posun hodnoty doleva či doprava (podle znaménka druhého parametru)

4.10 Logické funkce

Jméno funkce Význam
and operace logického součinu
or operace logického součtu
not operace logické negace

logo2004

4.11 Práce se seznamy a poli

Procedura Popis
[] statický konstruktor seznamu
sentence vytvoření seznamu
list vytvoření seznamu
fput vložení prvku na začátek seznamu
lput vložení prvku na konec seznamu
first L vrací první položku seznamu L
last L vrací poslední položku seznamu L
butfirst L vrací kopii seznamu L, ovšem bez první položky
butlast L vrací kopii seznamu L, ovšem bez poslední položky
item N L vrací N-tou položku seznamu L
array n vytvoření pole o n prvcích
item i přístup k i-tému prvku pole
pprop vložení vlastnosti do seznamu vlastností
plist převod seznamu vlastností na běžný seznam
gprop získání hodnoty vlastnosti

4.12 Predikáty

Predikát Význam
numberp test, zda je předaný objekt číslem
wordp test, zda je předaný objekt slovem
listp test, zda je předaný objekt seznamem
emptyp test, zda je předaný objekt prázdným seznamem
arrayp test, zda je předaný objekt polem
equalp test na shodnost dvou objektů
notequalp test na neshodnost dvou objektů
memberp test, zda je objekt položkou seznamu

4.13 Iterátory a šablony

Procedura Popis
foreach aplikace procedury na každou položku seznamu
map aplikace funkce na odpovídající položky seznamů
apply aplikace šablony na všechny prvky seznamu
reduce postupná redukce seznamu pomocí aplikace šablony

4.14 Vstup/výstup a práce s řetězci

Funkce/procedura Zkrácený tvar Význam
readlist rl načtená data jsou chápána jako seznam hodnot se stejnou syntaxí, jako v případě inicializace seznamu ve složených závorkách
readword rw načtení řetězce, který je uložen do jednoho slova, i když obsahuje mezery
readchar rc načtení jednoho znaku, který je uložen ve formě slova (nečeká se na Enter/Return)
readchars n rcs načtení n znaků bez čekání na Enter/Return
readrawline × podobné proceduře readword, ale nezpracovává zpětná lomítka ani další speciální znaky
shell příkaz × spustí v shellu zadaný příkaz a výsledek vrátí ve formě vnořeného seznamu
show tisk primitivní hodnoty či seznamu
print tisk primitivní hodnoty či seznamu
printdepthlimit ovlivnění tisku vnořených seznamů
ascii převod znaku na ASCII kód
char převod ASCII kódu na znak

logo2005

4.15 Práce se soubory

Procedura Význam
openread otevření souboru v režimu čtení
openwrite otevření souboru v režimu zápisu
openappend otevření souboru v režimu připojování (tj. zápis bez smazání předchozího obsahu)
openupdate otevření souboru v režimu čtení i zápisu
close uzavření souboru
setwrite soubor otevřený pomocí openwrite se stane standardním výstupním proudem (pro proceduru print apod.)
setread soubor otevřený pomocí openread či openupdate se stane standardním vstupním proudem
eofp vrací true či false podle toho, zda čtení dosáhlo konce souboru
eof? shodné s procedurou eofp

4.16 Ovládání textového terminálu

Procedura Význam
keyp (UCB Logo) predikát pro test, zda je stisknuta nějaká klávesa
key? (UCB Logo) predikát pro test, zda je stisknuta nějaká klávesa
cleartext (UCB Logo) smazání obsahu textového terminálu
setcursor (UCB Logo) přesun kurzoru na souřadnice zadané dvojicí čísel (seznamem)
cursor (UCB Logo) funkce vracející aktuální souřadnice kurzoru ve formě seznamu (dvojice čísel)
setmargins (UCB Logo) nastavení levého a pravého okraje terminálu (opět je předávaná dvojice čísel uložená v seznamu)
settextcolor (UCB Logo) nastavení barvy popředí a pozadí (dvojice čísel v rozsahu 0–7 nebo pro některé terminály 0–15)
keyboardon (MSW Logo) registrace příkazů spuštěných ve chvíli, kdy je stisknuta nějaká klávesa

4.17 Komunikace po Internetu a použití soketů

Procedura Význam
loadurl načtení dat ze zadaného URL
opensocket otevření soketu (režim klienta) pro zadanou IP adresu nebo jméno serveru
openurl otevření síťového prostředku specifikovaného pomocí URL
serversocket vytvoření soketu pro práci v režimu serveru (naslouchání)
netstartup zapne podporu práce se sítí v MSW Logu
netshutdown vypne podporu práce se sítí v MSW Logu
netaccepton povolení přijímaní dat přes sokety (režim serveru)
netacceptoff zákaz přijímaní dat přes sokety
netacceptrece­ivevalue procedura vrátí data přijatá přes soket
netacceptsendvalue procedura pro vysílání dat (typicky řetězce nebo i seznamu)
netconnecton povolení vysílání dat přes sokety (režim klienta)
netconnectoff zákaz vysílání dat přes sokety
netconnectsendvalue vysílání dat přes otevřený soket
netconnectrece­ivevalue příjem dat přes otevřený soket

4.18 Multitasking, vytváření a synchronizace vláken

Procedura Význam
thread seznam, který je této proceduře předán, je spuštěn v novém vlákně (typicky se jedná o volání funkce)
threadapply seznam, který je této proceduře předán, je vyhodnocen zadaným lambda výrazem v novém vlákně
threadapplyid shodné s předchozí procedurou, ale navíc se předává identifikátor vlák­na
threadterminate ukončení vlákna se specifikovaným identifikátorem
currentthread tato funkce vrací identifikátor běžícího vlákna
barrier vytvoření pojmenované bariéry se zadanou kapacitou (celé kladné číslo) a kódem, který se má v případě nezablokované bariéry provést
critical vytvoření pojmenované kritické sekce a pokus o spuštění kódu v této sekci (pokud již v dané sekci neběží jiné vlákno)
stopthread zastavení vlákna a případné zaslání informace o chybě

logo2006
Obrázek 6: Historická fotografie obrázku vytvořeného pravděpodobně na minipočítači PDP

5. Literatura

  1. Abelson H.:
    Turtle geometry. The Computer as a Medium for Explorning Mathematics,
    The MIT Press and Cambridge, Massachusetts, 1981
  2. Amsbury Wayne:
    Data Structures: From Arrays to Priority Queues
  3. Bentley Jon:
    The Cost of Recursion,
    Dr. Dobb's Journal, June 1998
  4. Clayson James:
    Visual Modeling with Logo,
    MIT Press
  5. Cuoco Albert:
    Investigations in Algebra,
    MIT Press
  6. Dougall Mc A., Adams T., Adams P.:
    Learning LOGO on the APPLE II,
    Firemní dokumentace k počítači Apple
  7. Friendly M.:
    Advanced LOGO a Language for learning,
    New Jersey, Hillsdale, 1988
  8. Goldenberg E. Paul, a Wallace Feurzeig:
    Exploring Language with Logo,
    MIT Press
  9. Harvey Brian:
    Berkeley Logo 5.5,
    Regents of the University of California, August, 8 2005
  10. Harvey Brian:
    Computer Science Logo Style (Second Edition),
    MIT Press 2000
    Ve skutečnosti se jedná o tři svazky:
    Volume 1: Symbolic Computing
    Volume 2: Advanced Techniques
    Volume 3: Beyond Programming
  11. Horowit Ellisz and Sartaj Sahni:
    Fundamentals of Data Structures,
    Dr. Dobb's Journal
  12. Hoyles Celia:
    Culture and computers in the matematics classroom,
    University of London, 1985
  13. Hoyles Celia, Richard Noss:
    Learning Mathematics and Logo,
    A collection of research papers about various aspects of the use of Logo in math classrooms
  14. Knuth Donald:
    Structured Programming With goto Statements,
    Computing Surveys 6, 4, December 1974, pp. 261–301
  15. Korsch James F., Garrett Leonard J.:
    Data Structures, Algorithms and Program Style Using C
  16. Lewis Philip:
    Approaching Precalculus Mathematics Discretely,
    MIT Press
  17. Mandelbrot Benoit B.:
    The Fractal Geometry of Nature,
    W. H. Freeman, New York; San Francisco, 1982, ISBN 0–7167–1186–9
  18. Muller Jim:
    The Great Logo Adventure,
    Young People's Logo Association
  19. Neuwirth Erich:
    Turtle Ballet: Simulating Parallel Turtles in a Nonparallel LOGO Version,
    University of Vienna, Dept. of Statistics and Decision Support Systems
  20. Papert Seymour A.:
    Mindstorms,
    Brighton, The Harvester Press, 1980
  21. Pickover Clifford:
    Computers, Pattern, Chaos and Beauty: Graphics from an Unseen World,
    St. Martin's Press, New York, 1990
  22. Pokluda Jiří:
    Interpret jazyka LOGO,
    VUT Brno, Fakulta informačních technologií, 2002
  23. Preiss Bruno R.:
    Data Structures and Algorithms with Object-Oriented Design Patterns in Java,
    Department of Electrical and Computer Engineering, University of Waterloo, Waterloo, Canada
  24. Prusinkiewicz Przemyslaw and Hanan James:
    Lindenmayer Systems, Fractals, and Plants,
    Springer-Verlag, New York, 1989
  25. Prusinkiewicz Przemyslaw a Aristid Lindenmayer:
    The Algorithmic Beauty of Plants,
    Springer-Verlag, 1990
  26. Tržilová Dana:
    LOGO a matematika,
    JIHOČESKÁ UNIVERZITA V ČESKÝCH BUDĚJOVICÍCH, PEDAGOGICKÁ FAKULTA, 1993
    učební text pro studenty výběrového semináře
  27. Weber J., Penn J.:
    Creation and Rendering of Realistic Trees,
    Proceedings of SIGGRAPH '95, volume 22(4), ACM SIGGRAPH, New York, 1995
  28. Young People's Logo Association:
    The Turtle's Source­book
  29. Young People's Logo Association:
    The Turtle's Discovery Book
  30. Young People's Logo Association:
    The Misadventures of Mrtle
  31. Young People's Logo Association:
    The Logo Library
  32. Young People's Logo Association:
    Learning Logo On and Off the Computer

logo2007
Obrázek 7: V Logu, které podporuje při vykreslování průhlednost lze vytvářet i takovéto kresby

6. Odkazy na Internetu: české a slovenské stránky

  1. Seminární práce o Comenius Logu:
    http://nwit.ped­f.cuni.cz/rotal9ap/lo­go/
  2. Informace o Comenius Logu:
    http://www.com­logo.input.sk/in­dex.html
  3. Stránka nabízející stažení Comenius Loga:
    http://www.com­logo.input.sk/nas­tiahnutie.html
  4. Wikipedia CZ: Fronta,
    http://cs.wiki­pedia.org/wiki/Fron­ta_(datová_struk­tura)
  5. Wikipedia CZ: Programovací jazyk Logo,
    http://cs.wiki­pedia.org/wiki/Lo­go_(programova­cí_jazyk)
  6. Wikipedia CZ: Umělá inteligence,
    http://cs.wiki­pedia.org/wiki/U­mělá_inteligen­ce
  7. Wikipedia CZ: Zásobník,
    http://cs.wiki­pedia.org/wiki/Zá­sobník_(datová_struk­tura)

logo2008
Obrázek 8: 2D scéna vytvořená s využitím průhlednosti

ict ve školství 24

7. Odkazy na Internetu: anglické stránky

  1. Elica, informace o systému Elica:
    http://www.eli­ca.net/site/in­dex.html
  2. Feurzeig Wallace: The Logo Lineage,
    http://www.ata­riarchives.or­g/deli/logo.php
  3. NetLogo:, informace o systému NetLogo:
    http://ccl.nor­thwestern.edu/ne­tlogo/
  4. NetLogo:, stažení NetLoga:
    http://ccl.nor­thwestern.edu/ne­tlogo/download­.shtml
  5. NetLogo:, uživatelský manuál NetLoga ve formátu PDF:
    http://ccl.nor­thwestern.edu/ne­tlogo/docs/Net­Logo%20User%20Ma­nual.pdf
  6. NetLogo:, FAQ:
    http://ccl.nor­thwestern.edu/ne­tlogo/docs/faq­.html
  7. Neuwirth Erich: Multiturtle Logo code,
    http://sunsite­.univie.ac.at/mul­titurtle/
  8. Silverman Brian, Tempel Michael: Fuzzy Logo,
    http://el.medi­a.mit.edu/logo-foundation/pub­s/papers/fuzzy_lo­go.html
  9. StarLogo, stránky StarLoga na MIT,
    http://el.www­.media.mit.edu/grou­ps/el/Projects/star­logo/
  10. StarLogo, stránky StarLoga na Northwestern University,
    http://ccl.nor­thwestern.edu/cm/star­logoT/
  11. Tempel Michael: Conversations With Logo,
    http://el.medi­a.mit.edu/logo-foundation/pub­s/papers/conver­sations_logo.html
  12. Tempel Michael: Event Programming,
    http://el.medi­a.mit.edu/logo-foundation/pub­s/papers/even­t_programming­.html
  13. Turtle Tracks, domácí stránka Turtle Tracks:
    http://turtle­tracks.source­forge.net/
  14. Turtle Tracks, applet Turtle Tracks (možnost spuštění v prohlížeči bez nutnosti instalace):
    http://turtle­tracks.source­forge.net/applet­.html
  15. Turtle Tracks, neúplná dokumentace k Turtle Tracks:
    http://turtle­tracks.source­forge.net/doc­s/index.html
  16. Turtle Tracks, domácí stránka Daniela Azumy (autora této implementace Loga):
    http://alumnus­.caltech.edu/~da­zuma/home/
  17. Wikipedia EN: Artifical Intelligence,
    http://en.wiki­pedia.org/wiki/Ar­tificial_inte­lligence
  18. Wikipedia EN: Functional programming,
    http://en.wiki­pedia.org/wiki/Fun­ctional_langu­age
  19. Wikipedia EN: Deque,
    http://en.wiki­pedia.org/wiki/De­que
  20. Wikipedia EN: List (Computing),
    http://en.wiki­pedia.org/wiki/Lis­t_(computing)
  21. Wikipedia EN: Logo Programming Language,
    http://en.wiki­pedia.org/wiki/Lo­go_(programmin­g_language)
  22. Wikipedia EN: Queue,
    http://en.wiki­pedia.org/wiki/Qu­eue_(data_struc­ture)
  23. Wikipedia EN: Stack,
    http://en.wiki­pedia.org/wiki/Stac­k_(data_struc­ture)
  24. Informace o aUCBLogu:
    http://www.phy­sik.uni-augsburg.de/~miche­ler/
  25. Domácí stránka MSW Loga:
    http://www.sof­tronix.com/lo­go.html
  26. Logo Tree Project:
    http://www.eli­ca.net/downlo­ad/papers/Logo­TreeProject.pdf
  27. Language Poster (O'Reilly):
    http://www.ore­illy.com/news/grap­hics/prog_lan­g_poster.pdf
  28. Informace o LEGO/Logu:
    http://educati­on.otago.ac.nz/nzlnet/L­ogo/legologo.html
  29. Logo Foundation:
    http://el.www­.media.mit.edu/grou­ps/logo-foundation/
  30. What is Logo?
    http://el.medi­a.mit.edu/Logo-foundation/lo­go/index.html

logo2009
Obrázek 9: Další 2D scéna vytvořená s využitím průhlednosti

Poznámka: poslední tři obrázky byly vytvořeny následujícím programem, ve kterém došlo pouze k nepatrným úpravám výrazů pro posun a otočení želvy:

to quadrat :length
    repeat 4 [
        forward :length
        right 90
    ]
end

to c
    repeat 255 [
        make "i repcount+1
        repeat 255 [
            make "j repcount+1
            setpencolor (list :i :j*:i :j)
            quadrat 150
            forward 7.5
            right 3.7
        ]
        forward 30
        left 17
    ]
end 

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.