P R E S E K List za mlade matematike, fizike, astronome in računalnikarje ISSN 0351-6652 Letnik 17 (1989/1990) Številka 2 Strani 98-108 Tomaž Pisanski: MREŽE TELES IN LOGO Ključne besede: matematika, geometrija, računalništvo, telo, logo, re-kurzivni program, mreža. Elektronska verzija: http://www.presek.si/17/974-Pisanski.pdf © 1989 Društvo matematikov, fizikov in astronomov Slovenije © 2010 DMFA - založništvo Vse pravice pridržane. Razmnoževanje ali reproduciranje celote ali posameznih delov brez poprejšnjega dovoljenja založnika ni dovoljeno. MREŽE TELES IN LOGO Pred nekaj leti sem v Londonu kupil knjigo Mathematical Models, ki sta jo leta 1951 napisala H.M. Cundy in A.R. Rollet in je leta 1981 pri založbi Tarquin Publications doživela tretjo izdajo. V njej so me pritegnila navodila za sestavo papirnatih modelov raznih zanimivih poliedrov. Med njimi so na primer pravilna telesa: tetraeder, kocka, oktaeder, dodekaeder in ikozaeder. Verjetno je bralcu dobro znana mreža kocke, ki jo prikazuje slika 1. Slika 1. Običajna mreža kocke Kockd Če iz papirja izrežemo mrežo telesa, jo s prepogibanjem vzdolž notranjih črt (povezav) lahko preoblikujemo v polieder. Ker sem po naravi len in me natančno risanje z ravnilom in šestilom ter kotomerom utruja, sem se odločil, da si bom z računalnikom narisal mreže nekaterih teles in jih nato uporabil pri konstrukciji modelov. Med jeziki, ki so na razpolago, se mi je zdel za ta podvig najprimernejši logo. Zaradi težavnosti problema sem se omejil na telesa, ki imajo vse robove enake dolžine in katerih vsa lica (stranske ploskve) so pravilni mnogokotniki. S tem so seveda odpadla zanimiva "zvezdna" telesa, ki nimajo konveksnih lic. O njih je Presek že pisal. Najprej sem se moral odločiti za predstavitev mrež v računalniku. Ker je kljub poenostavljenemu problemu izbrana rešitev precej zamotana, za samo razumevanje tega prispevka pa ni nujno, da bi jo bralec v celoti dojel, jo tukajle prikazujem le na zgledih. Na sliki 2 so prikazane nekatere ravninske mreže, ki pa predstavljajo le dele teles. Ob vsaki mreži je prikazana tudi njena predstavitev, ki jo določajo oglati oklepaji. Na obodu mreže izberemo osnovnico. Mreža z izbrano osnovnico ima natančno določeno predstavitev. Tako sta na primer [[ ][ j[[ ][ ]]] in [[ ][[ ][ ]][ ]] predstavitvi mreže, ki jo dobimo, če zlepimo trikotnik in kvadrat. Razlika je le v izbiri osnovnice. Ker ima ta mreža pet stranic na obodu, obstaja zanjo pet predstavitev. / m d u a u ar to m a nu i u u m fJJJ m iu ui aj /i / \ i n f 1 / V. in fifj m in a j rn a j in m ta m i a a j in run Slika 2. Ravninske mreže in njihova predstavitev (zapis v računalniku). Ravninska mreža jc splošnejši pojem od mreže površine telesa. Najprej sem napisal nekaj programov za risanje ravninskih mrež, Bralca, ki ima na razpolago logo vabim, da programe preizkusi. Programi so napisani za Atarijev logo, ne bo pa jih težko prevesti v drugačne različice loga. TO R :S ... riše mrežo s predstavitvijo :S TO RIS :S ... riše mrežo TO RISO :S ... pomožni program za risanje mreže TO KOT :N ... kot pri :N-kotniku TO S :K ... dolžina stranice TO BESEDILO :B ... Napiše besedilo :B pod sliko TO RB :S ... Nariše sliko z besedilom vred TO OSNOVNICA ... S puščico označi osnovnico TO BESEDILO :B TO RISO :S ;N PU RT KOT :N SETPOS [-300 -150] IF EMPTYP :S [STO P] SETTEKT 4 PU FD :KORAK RT 180 PD PD RIS FIRST :S TT :B RT 180 SETTEXT0 RISO BF :S :N END END TO R :S cs HT OSNOVNICA RIS :S EN D TO RIS :S F D : KORAK IF EM PTYP :S [BK :KORAK S RISO :S I +COUNT :S EN D TO OSNOVNICA FD 10 RT 160 FD 10 BK 10 LT 160 BK 10 END TO KOT : N OP 360 / :N END TO RB :S :B TO S K R:S MAKE "KORAK :K BESEDILO :B END END Slika 3. Mrežo narišemo s programom RB, ki zbriše zaslon, nariše mrežo in na njej označi osnovnico, pod sliko pa napiše še ustrezno besedilo. Če pa je mreža le del slike, jo lahko narišemo s programom RIS. Pred tem moramo s programom S določili dolžino stranice. Ker je "peš" težko konstruirati zamotane mreže, sem izdelal še nekaj osnovnih programov za sestavljanje mrež. Najprej pa točno povejmo, kaj je ravninska mreža. Definiramo jo takole: Ravninsko mrežo lahko dobimo na dva načina. (1) Lahko jc pravilni «-kotnik. (2) Lahko pa jo dobimo tako, da zlepimo dve slranici na obodu dveh ravninskih mrež. Ravninsko mrežo smo definirali samo s seboj. Taki definiciji pravimo induktivna ali rekurzivna definicija. Stranice na obodu so ravno tiste stranice mreže, ki jih še nismo uporabili pri lepljenju. Zdaj vemo, katere programe za konstrukcijo mrež potrebujemo. Potrebujemo program, ki sestavi mrežo pravilnega mnogokotnika. Potrebujemo pa tudi program, ki lepi dve mreži. To pa še ni vse. Če ne Želimo lepiti mrež vzdolž trenutnih osnovnic, potrebujemo še program, ki "premakne" osnovnico. To pomeni, da namesto izbrane osnovnice izbere sosednjo stranico na obodu mreže. TO DG :S :T ... zlepi mreži :S :T vzdolž izbrane osnovnice TO LG :S :T ... zlepi mreži :S :T vzdolž izbrane osnovnice TO D :S ... osnovnico mreže :S premakne za eno vdesno TO L :S ... osnovnico mreže rS premakne za eno v levo TO N :N ... sestavi mrežo pravilnega :N-kotnika. TO DG :S :T IFEMPTYP :S [OP :T] !F EMPTYP :T (OP :S] OP DG FIRST :S LPUT :T 13F :S EN D TO LG :S :T IF EMPTVP :S [OP :T] IF EMPTYP :T [OP :S] OP LG FPUT :S BL :TLAST :T END TO L :S IF EMPTYP :S [OP[]] OP LG FPUT t) BL :S LAST :S END TO N :N IF :N = 1 [OP []] OP FPUT [] N :N - 1 END TO D:S IF EMPTYP :S [OP []] OP DG FIRST :S LPUT [ ] BF ;S END Slika 4, Osnovni programi za konstrukcijo ravninskih mrež. Programa D G in LG se ločita le po tem, kako izbereta novo osnovnico na zlepljeni mreži. Kasneje sem uporabljal lc program DG. Pazljivi bralec bo opazil, da potrebujemo program LG v programu L. Očitno je, da lahko s programi na sliki 4 sestavimo poljubno ravninsko mrežo, torej tudi vse mreže pravilnih teles. Problem je v bistvu rešen. Za prijetno delo pa kljub temu še marsikaj manjka. To sem opazil, ko sem poskusil konstruirati mrežo tetraedra (glej sliko 5). Mrežo tetraedra sestavljajo štirje trikotniki. Pri drugih zanimivih mrežah pa potrebujemo kvadrate, petkotnike, šestkotnike, osemkotnike. Slika 5. Mreže pravilnih teles: (a) tetraeder, (b) kocka, (c) oktaeder, (d) dodekaeder, (e) ikozaeder. Zato sem napisal nekaj kratkih programov. Pri risanju mreže tetraedra bi bilo ugodno imeli na razpolago program, ki bi na stranice srednjega trikotnika nalepil preostale tri trikotnike. To idejo lahko uporabimo tudi pri risanju mreže dodekaedra. Tam moramo podvojiti mrežo iz petih petkotnikov, ki smo jih nalepili na stranice šestega. Pogosto moramo osnovnico pred lepljenjem prestaviti kar daleč v levo ali desno. Tako so naslalt programi s slike 6. TOT TOQ TOP TO H TOO TO DEC TO CC :S TO LL :N :S TO DD :N:S TO GG:N:K:S TO DB :S TO ROZA :S :T :N TO RZ :S :T TO AT :S :T :L . trikotnik , kvadrat . petkotnik . šest kot ni k , osemklonik . desetkotnik . obseg . osnovnico :N krat v levo . osnovnico :N krat v desno . :N krat nalepi :S nase, pri tem skače po :K . podvoji :S . na :N zaporednih stranic :T nalepi primerek :S . na vsako stranico :T nalepi primerek :S . na :S nalepi večkrat :T. Pri tem določa seznam Števil :L razmike in COUNT :L je Število primerkov :T, ki jih lepimo. (program se nadaljuje na naslednji strani) TOP TO ROZA :S :T :N OP N 5 IF:N = 0[OP:T] END MAKE "ROZA ROZA rS :T :N - 1 i OP DG :ROZA :S TO H END OP N 6 END TORZ:S:T OP ROZA :S :T CC :T TO O END OP N 8 END TO DB :S OP DG :S :S TO DD :N :S END IF :N = 0 [OP :S] OP DD :N -1 D :S TO AT :S :T :L END IF EMPTYP :L [OP :S] MAKE "TEM P DG :T LL FIRST: L :S TO LL :N :S OP AT :TEMP :T BF :L IF :N = 0 [OP iS] END OP LL :N - 1 L :S END TO DEC OP N 10 TO CC :S END IF EMPTYP :S [OP 1] OP (+ CC FIRST :S CC BF :S) TO Q END OP N 4 END TO G G :N :K :S IF :N = 0 [OP []] TOT OP DD :K DG :S GG :N - 1 :K :S OP N 3 END END Slika 6. Nekatera lica, ki jih v mrežah pogosto potrebujemo. Pomožni programi za konstrukcijo mrež. Zdaj pa ni bilo več težko sestaviti mrež pravilnih teles. TO TETRAEDER Tt) KOCKA TO OKTAEDER TO DODEKAEDER TO IKOZAEDER TO KINO ... program, ki zaporedoma riše mreže teles. TO KOCKA OP DGLLRZQOQ END TO OKTAEDER OP DB D DG D DG TT DG TT END TO DODEKAEDER OPDB DRZPP END TOIKOZAEDER OP DB L L RZ DG T DB T T END TO KINO S 60 RB TETRAEDER "Tetraeder S50 RB KOCKA "Kocka RB OKTAEDER "Oktaeder S 30 RB IKOZAEDER "Ikozaeder RB DODEKAEDER" Dodekaeder END TO TETRAEDER OPRZTT END Slika 7. Programi za konstrukcij« mrež petih pravilnih teles. Z orodjem, ki ga imamo zdaj na razpolago, se lahko lolimo sestavljanja in risanja drugih zanimivih mrež. Pri velikih mrežah je v mojem računalniku včasih zmanjkalo prostora. Včasih sem si pomagal tako, da sem shranil vmesne rezultate, ki so seveda predstavitve mrež. To naredimo tudi takrat, ko nameravamo večkrat risati isto mrežo. Tako postane risanje precej hitrejše. Tako na primer namesto R KOCKA, raje napišemo MAKE" KOCKA KOCKA R :KOCKA Kogar zanima, kako je shranjena mreža kocke v logu, pa lahko doda Še ukaz PR : KOCKA. Lahko pa napiše RB ; KOCKA : KOCKA. Na sliki 8 so nekateri programi, ki pa so narisane te mreže. TO KUBOKT MAKE "KBK D RZ L DG T Q T OP DG D :KBK :KBK END TO OBRTET OP DB D D DB L DG T H END konstruirajo ravninske mreže, na sliki 9 TO OBRKUBOKT OP [ j END TO IKOZIDO MAKE "PTT L L DG T D DG T P MAKE "HICO L L RZ :PTT P OP DG :HICO L :HICO END TOOBRKOCKA TO ROMBKUBOKT OP DB L L ATO L AT OT [0 2] [0 2] OP ATT RBCOC C [3 13] END END TO OBROKT OP DB DD 6 DG B LL 3 AT DG H D DG H H Q [1 5 4] END TO VELIKI MAKE "VV DG Q DD 4 DG H DG DEC D D DG Q DD 3 DG B Q MAKE "VVV DD 13 AT DEC :VV [22222] OP DG D D :VVV :VVV END TO FILM S 30 RB OBRTET [Obrezani tet.raeder] RB KUBOKT [Kuboktaeder] RB OBRKOCKA [Obrezana kocka] RB OBROKT [Obrezani oktaeder] S 20 RB OBRKUBOKT [Obrezani kuboktaeder] RB IKOZIDO [Ikozidodekaeder] S 10 RB VELIKI [Obrezani ikozidodekaeder] END Slika 8. Programi za nekatere mreže. Na tem mestu smo dolžni nekaj pojasnil. Pojem " obrezanega" telesa je intuitivno jasen. Pomeni, da izbrano telo popravimo tako, da ga v bližini vsakega oglišča presekamo z ustrezno izbrano ravnino in tako "odrežemo" ogliŠče. Pri kocki na ta način za vsako ogli i če dobimo enakostranični trikotnik. Iz kockinih ploskev pa dobimo praviine osemkolnike. Seveda si lahko tako obrezovanje zamislimo bolj radikalno, tako da od originalnih robov telesa nič ne ostane. Če takšno radikalno obrezovanje naredimo na kocki, dobimo leto, ki smo ga tu poimenovali kuboktaedcr. Običajno pri programiranju za imena programov jemljemo daljše opisne izraze. Mi pa smo s T označili trikotnik, s Q kvadrat, L je premik v levo, D je premik v desno, itd. To je res v nasprotju Z omenjenim načelom. Če pa pogledamo, kje in kako te programe uporabljamo (glej na primer program OBRTET na sliki 8), pa vidimo, da smo na ta način pregledno zapisali dokaj zamotane konstrukcije. Navsezadnje pa je končna izbira imena stvar programerjevega okusa. Obrezani ikazidud^ičeder Slika 9. Slike mrež, ki smo jih sestavili s programi na sliki 8, Zadnji med njimi je ravninski vzorec. Na njem so nekatera lica narisana večkrat. Če programe iz slike 8 pokličemo iz programa FILM, lahko pripravimo računalniško predstavo. Če priznam po pravici, do danes se nisem nobene od narisanih mrež zares uporabil za konstrukcijo papirnatega modela. Na mizi imam napol zlepljen majcen dodekaeder. Očitno se je treba konstrukcije pravih papirnatih modelov lotiti na pametnejši način, na primer tako, kot svetujejo v knjigi, ki sem jo omenil na začetku. Zadnje čase me preganja misel, da bi raje z računalnikom narisal njihove ivorazsežne projekcije. Vendar se bojim, da bom pri tem problemu zaradi lenobe raje segel po papirju. Tomaž Pisanski