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
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 |
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 |
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 |
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 |
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 |
netacceptreceivevalue |
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 |
netconnectreceivevalue |
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ákna |
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ě |
Obrázek 6: Historická fotografie obrázku vytvořeného pravděpodobně na minipočítači PDP
5. Literatura
- Abelson H.:
Turtle geometry. The Computer as a Medium for Explorning Mathematics,
The MIT Press and Cambridge, Massachusetts, 1981
- Amsbury Wayne:
Data Structures: From Arrays to Priority Queues
- Bentley Jon:
The Cost of Recursion,
Dr. Dobb's Journal, June 1998
- Clayson James:
Visual Modeling with Logo,
MIT Press
- Cuoco Albert:
Investigations in Algebra,
MIT Press
- Dougall Mc A., Adams T., Adams P.:
Learning LOGO on the APPLE II,
Firemní dokumentace k počítači Apple
- Friendly M.:
Advanced LOGO a Language for learning,
New Jersey, Hillsdale, 1988
- Goldenberg E. Paul, a Wallace Feurzeig:
Exploring Language with Logo,
MIT Press
- Harvey Brian:
Berkeley Logo 5.5,
Regents of the University of California, August, 8 2005
- 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
- Horowit Ellisz and Sartaj Sahni:
Fundamentals of Data Structures,
Dr. Dobb's Journal
- Hoyles Celia:
Culture and computers in the matematics classroom,
University of London, 1985
- Hoyles Celia, Richard Noss:
Learning Mathematics and Logo,
A collection of research papers about various aspects of the use of Logo in math classrooms
- Knuth Donald:
Structured Programming With goto Statements,
Computing Surveys 6, 4, December 1974, pp. 261–301
- Korsch James F., Garrett Leonard J.:
Data Structures, Algorithms and Program Style Using C
- Lewis Philip:
Approaching Precalculus Mathematics Discretely,
MIT Press
- Mandelbrot Benoit B.:
The Fractal Geometry of Nature,
W. H. Freeman, New York; San Francisco, 1982, ISBN 0–7167–1186–9
- Muller Jim:
The Great Logo Adventure,
Young People's Logo Association
- Neuwirth Erich:
Turtle Ballet: Simulating Parallel Turtles in a Nonparallel LOGO Version,
University of Vienna, Dept. of Statistics and Decision Support Systems
- Papert Seymour A.:
Mindstorms,
Brighton, The Harvester Press, 1980
- Pickover Clifford:
Computers, Pattern, Chaos and Beauty: Graphics from an Unseen World,
St. Martin's Press, New York, 1990
- Pokluda Jiří:
Interpret jazyka LOGO,
VUT Brno, Fakulta informačních technologií, 2002
- 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
- Prusinkiewicz Przemyslaw and Hanan James:
Lindenmayer Systems, Fractals, and Plants,
Springer-Verlag, New York, 1989
- Prusinkiewicz Przemyslaw a Aristid Lindenmayer:
The Algorithmic Beauty of Plants,
Springer-Verlag, 1990
- 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
- Weber J., Penn J.:
Creation and Rendering of Realistic Trees,
Proceedings of SIGGRAPH '95, volume 22(4), ACM SIGGRAPH, New York, 1995
- Young People's Logo Association:
The Turtle's Sourcebook
- Young People's Logo Association:
The Turtle's Discovery Book
- Young People's Logo Association:
The Misadventures of Mrtle
- Young People's Logo Association:
The Logo Library
- Young People's Logo Association:
Learning Logo On and Off the Computer
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
- Seminární práce o Comenius Logu:
http://nwit.pedf.cuni.cz/rotal9ap/logo/
- Informace o Comenius Logu:
http://www.comlogo.input.sk/index.html
- Stránka nabízející stažení Comenius Loga:
http://www.comlogo.input.sk/nastiahnutie.html
- Wikipedia CZ: Fronta,
http://cs.wikipedia.org/wiki/Fronta_(datová_struktura)
- Wikipedia CZ: Programovací jazyk Logo,
http://cs.wikipedia.org/wiki/Logo_(programovací_jazyk)
- Wikipedia CZ: Umělá inteligence,
http://cs.wikipedia.org/wiki/Umělá_inteligence
- Wikipedia CZ: Zásobník,
http://cs.wikipedia.org/wiki/Zásobník_(datová_struktura)
Obrázek 8: 2D scéna vytvořená s využitím průhlednosti
7. Odkazy na Internetu: anglické stránky
- Elica, informace o systému Elica:
http://www.elica.net/site/index.html
- Feurzeig Wallace: The Logo Lineage,
http://www.atariarchives.org/deli/logo.php
- NetLogo:, informace o systému NetLogo:
http://ccl.northwestern.edu/netlogo/
- NetLogo:, stažení NetLoga:
http://ccl.northwestern.edu/netlogo/download.shtml
- NetLogo:, uživatelský manuál NetLoga ve formátu PDF:
http://ccl.northwestern.edu/netlogo/docs/NetLogo%20User%20Manual.pdf
- NetLogo:, FAQ:
http://ccl.northwestern.edu/netlogo/docs/faq.html
- Neuwirth Erich: Multiturtle Logo code,
http://sunsite.univie.ac.at/multiturtle/
- Silverman Brian, Tempel Michael: Fuzzy Logo,
http://el.media.mit.edu/logo-foundation/pubs/papers/fuzzy_logo.html
- StarLogo, stránky StarLoga na MIT,
http://el.www.media.mit.edu/groups/el/Projects/starlogo/
- StarLogo, stránky StarLoga na Northwestern University,
http://ccl.northwestern.edu/cm/starlogoT/
- Tempel Michael: Conversations With Logo,
http://el.media.mit.edu/logo-foundation/pubs/papers/conversations_logo.html
- Tempel Michael: Event Programming,
http://el.media.mit.edu/logo-foundation/pubs/papers/event_programming.html
- Turtle Tracks, domácí stránka Turtle Tracks:
http://turtletracks.sourceforge.net/
- Turtle Tracks, applet Turtle Tracks (možnost spuštění v prohlížeči bez nutnosti instalace):
http://turtletracks.sourceforge.net/applet.html
- Turtle Tracks, neúplná dokumentace k Turtle Tracks:
http://turtletracks.sourceforge.net/docs/index.html
- Turtle Tracks, domácí stránka Daniela Azumy (autora této implementace Loga):
http://alumnus.caltech.edu/~dazuma/home/
- Wikipedia EN: Artifical Intelligence,
http://en.wikipedia.org/wiki/Artificial_intelligence
- Wikipedia EN: Functional programming,
http://en.wikipedia.org/wiki/Functional_language
- Wikipedia EN: Deque,
http://en.wikipedia.org/wiki/Deque
- Wikipedia EN: List (Computing),
http://en.wikipedia.org/wiki/List_(computing)
- Wikipedia EN: Logo Programming Language,
http://en.wikipedia.org/wiki/Logo_(programming_language)
- Wikipedia EN: Queue,
http://en.wikipedia.org/wiki/Queue_(data_structure)
- Wikipedia EN: Stack,
http://en.wikipedia.org/wiki/Stack_(data_structure)
- Informace o aUCBLogu:
http://www.physik.uni-augsburg.de/~micheler/
- Domácí stránka MSW Loga:
http://www.softronix.com/logo.html
- Logo Tree Project:
http://www.elica.net/download/papers/LogoTreeProject.pdf
- Language Poster (O'Reilly):
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf
- Informace o LEGO/Logu:
http://education.otago.ac.nz/nzlnet/Logo/legologo.html
- Logo Foundation:
http://el.www.media.mit.edu/groups/logo-foundation/
- What is Logo?
http://el.media.mit.edu/Logo-foundation/logo/index.html
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