Sissejuhatus

Scratchis joonestamiseks kasutatakse nn kilpkonmnagraafikat. Meetod ja nimetus võeti kasutusele aastaid tagasi programmeerimissüsteemis Logo, mis leiab laialdast ka praegu, eriti programmeerimise õpetamisel. Kilpkonnagraafika on kasutusel mitmetes program-meerimissüsteemides nagu Scratch, BYOB/Snap!, Basicu mitmed versioonid, Python jm. Joonestamise operatsioone täidab spetsiaalne graafikaobjekt – turtle (kilpkonn). Joonistamisel lähtutakse tõsiasjast, et suurema osa kujunditest (joonised, graafikud, diagrammid jmt) saab moodustada sirgjoone lõikudest. Scratchis puuduvad vahendid kujundite täitmiseks värviga.
Scratchis võib joonistada suvaline sprait. Iga spraidiga on alati seotud pliiats, mis võib olla üleval – spraidi liikumisel joont ei teki, või all – liikumisel tekib lavale joon. Kuid sageli kasutatakse joonistajaks spetsiaalseid spraite, millel on lihtne kuju (n. ring, ruut) ja väikesed mõõtmed. Pliiats "asub" kostüümi keskpunktis, mida saab muuta joonistamisredaktoris. Suure ja mitme keerulise kujuga kostüümiga spraidi korral võib jääda häguseks, kus hetkel asub pliiats. Peab ka arvestama, et spraidi liikumist laval piiravad selle servad.
Joonistamisel kasutatakse peamiselt käske gruppidest Pliiats ja Liikumine. Grupi Pliiats käskudega saab määrata joone värvi, varjundi ja suuruse, muuta pliiatsi olekut: üleval või all. Grupi Liikumine käskudega määratakse ja muudetakse joonistava objekti asukohta ja tekkivate joonte asukoht ja kuju laval. Sageli kasutatakse ka grupi Juhtimine käske korduste ja valikute määramiseks.

Grupi Pliiats käsud

pliats

Grupi Liikumine põhikäsud

liigu

Lava koordinaadisüsteem

lava_koord

Näide "Kolmnurgad ja ristkülikud"

Rakendus demonstreerib kolmnurkade (klahv 1) ristkülikute (2, 3, 4) joonistamist. Joonistajaks on siin spetsiaalne sprait: ringike. Kolnurga tippude koordinaadid, ristküliku külgede pikused ning selle alguspunkt variandis 4 määratakse juhuarvude abil. Juhuarvudega määratakse ka joone paksus (pliiatsi suurus) ja värv.

 

Kolmnurga joonistamiseks viiakse pliiats tippu (x1, y1), hoides seda üleval. Siis lastakse pliiats alla ja järjest läbitakse teised tipud, jõudes tagasi algpunkti.

kolm

Et näidata erinevaid võimalusi joonistamisel, on ristküliku jaoks toodud kolm varianti. Esimesel kahel juhul (klahvid 2 ja 3) langeb kujundi keskpunkt lava keskpunktiga. Külgede pikkused, joone paksus ja värv määratakse juhuarvudega. Mõlemal juhul viiakse kõigepealt üleval olev pliiats punkti (-a/2; -b/2) - alumine vasakpoolne tipp. Esimesel juhul (klahv 2) kasutatakse pliiatsi liikumise määramiseks ristküliku tippude koordinaate ja käsku [mine...]. Teisel juhul kasutatakse risküliku külgede pikkusi (a ja b) ning käske [muuda x...] ja [muuda y...]

r_1_2

Risktüliku joonestamise kolmandas variandis määratakse kujundi alguspunkt (x0; y0) juhuarvude abil. Kõik algseaded tehakse eraldi abiskriptis Alg_4. Joonistamisel kasutatakse korduses käske [liigu...] ja [pööra...]

rist2
Skripte võib näha laval, klõpsates nuppu "näita skripte" (võib olla erinevusi).

Näide "Murdjoon"

zig
Pildil olevjoon saadakse skripti abil, mille täidab sprait Joonistaja (punane ringike).
Selles skriptis leitakse viis korda punkti uued koordinaadid (x ja y), viiakse sprait uude asukohta (liikumisel jääb lavale joon) ja tekita-takse jäljend (spraidi kujutis - siin punane ring).
Kõigepealt kustutatakse vana joon ning määratakse muutujate algväärtused.

Koordinaatide väärtuste muutmiseks kasutatakse muutujat samm, mille väärtust saab määrata laval liuguri abil. Muutuja i väärtust muutub 1 ja -1 vahel, neid kasutatakse y arvutamisel. Igal kordusel muutub x ühe sammu võrra ja y kahe sammu võrra.
Joonistaja liigutamisel (käsk [mine x: x y: y]) jääb lavale joon.

Joonistaja algoritm
protseduur Joonista
   kustuta
   muutujate algväärtustamine
   pliiats ülesse
   mine x = 0 y = 0
   pliiats allla
   jäljend
   kordus 4 korda
     i= -1*i
     x =x + samm
     y =y + 2*i*samm
     mine x = x y = y
     jäljend
zig

Selleks, et oleks näha selle joone tekkimist on vaja käsu asemel mine x: x y: y kasutada käsk [liigu t sek. x: x y: y].

Mastaabi kasutamine

Joonistamisel tuleb sageli kasutada mastaapi. Scratchis on füüsiliseks üksuseks laval piksel ehk ekraanipunkt, mille mõõtmed on väga väikesed (alla 1 mm). Kasutajal on sageli kasutusel oma pikkuse ühikud (meetrid, sentimeetrid vm), millega tehakse ka arvutusi. Näiteks ruumide mõõtmed on vahemikus 2 kuni 20 meetrit. Kui näiteks selliseid väärtusi otse kasutada skeemi joonistamisel, saadakse ekraanil väga väikene kujutis.
Üldiselt eristatakse joonistamisel kõikides graafikasüsteemides tavaliselt vähemalt kahte ühikute ja koordinaatide süsteemi: füüsilised ehk ekraani ühikut ja koordinaadid ning kasutaja ehk loogilised ühikut ja koordinaadid. Scratchis võib mastaaberimisel kasutada mastabitegurit, mis määrab mitu pikslit (füüsilised ühikut) vastab ühele kasutaja ühikule (n. 5, 10, 20 jne). Rakenduse kasutamisel peaks kasutaja saama muuta mastabitegurit ehk mastaapi,

 

Näiteks toodud rakendus leiab ristküliku (n. ruumi) pindala (S) ja ümbermõõdu (P) külgede pikkuse a ja b alusel ning teeb ka vastava skeemi.

mas1
Mastaabi tegurit m saab muuta liuguriga, a ja b väärtusi saab muuta liuguritega või sisestada klaviatuurilt, ristküliku alguspunkti x0 ja y0 saab määrata liuguritega, klaviatuurilt või hiireklõpsuga laval.
Väärtused esitatakse kasutaja ühikutes.
NB! Plokid [hiire x] js [hiire y] annavad väärtused füüsilistes ühikutes.

Joonistamise ja arvutamise skriptid.

mas2
Joonistamisel korrutakse väär-tused mastaabi teguriga m, et saada füüsilised ühikut. Arvu-tamisel korrutamist mastaabi teguriga ei toimu (kasutaja ühikut).

Funktsioonide graafikud

Sageli tekkib erinevates rakendustes vajadus teha ühemuutuja funktsioonde y = F(x) graafikuid antud lõigul (algus, lõpp). Selleks peab muutma argumendi x väärtusi teatud sammuga: samm=(lõpp-algus)/n, kus n jaotiste arv, ja leidma iga x-i korral vastava y-i väärtuse ning ühendama punktid sirgjoone lõikudega. Graafiku täpsus ja siledus sõltub jaotiste arvust, tüüpiliselt see võiks olla 100...500.
Allpool toodud rakendus võimaldab teha graafikud kolme funktsiooni jaoks: y=a*sin(b*x), y=c*cos(d*x) ja y=a*sin(b*x)+c*cos(d*x). Proovige muuta liugurite abil algandmeid: a, b, c, d ning vajadusel ka mastabitegureid mx ja my. Viimased on eraldi x ja y telje jaoks, Lõigu otsapunktid on fikseeritud: alg=-10 ja lõpp=10. Kuna taoliste ülesannete lahendamisel tuleb täita võrdlemisi palju tegevusi, võib töö tavalises režiimis nõuda palju aega. Töö oluliselt kiireneb, kui lülitatada sisse turborežiim. Vastav käsk on olemas menüüs Redigeeri, turborežiimi saab sisse ja välja lülitada (ka veebi dokumendis), hoides all Shift klahvi ja klõpsates Rohelist lippu. Proovige.

 

Allpool on toodud siinusfunktsiooni (y1) graafiku joonistamise algoritm ja skriptid. Koosinuse (y2) joonistamine on praktiliselt sama —  y väärtuste arvutamise käsus on siinuse asemel koosinus. Funktsiooni y3=y1+y2 liidetakse kaks eelmist kokku (vt klipp). Kuna siinuse ja koosinuse argumendid võetakse radiaanides (x-telje väärtused), siis funktsioonid näevad välja järgmiselt:
   y = a * sin(180*b*x/3.14159) ja y = c * cos(180*d*x/3.14159).
Programmis kasutatakse abimuutujat k = 180 / 3.14159.
Programm on jagatud kaheks skriptiks: Tee_alg - määrab algandmed ja Joon_sin - joonistab graafiku.

skript Tee_alg
   võta pliiatsi suurus
   pliiats üles
   k = 180/3,14159
   alg =-10
   lõpp = 10
   samm=(lõpp-alg)/n
   x=alg
skript Joon_sin
   Tee_alg
   loe a, b, c, d, mx, my, n
   vali värv
   y = a * sin(k * b * x)
   mine x=alg*mx, y=y*my
   pliiats alla
   kordus n korda
     x = x + samm
     y = a * sin(k * b * x)
     mine x = x*mx, y = y*mx
NB! Algoritmis on näidatud algandmete: a, b, c, ... lugemine. Programmis toimub see automaatselt - liuguritelt

funalgse

Kõverjooned: ring ja ellips

Kõverjoonte joonestamisel on sageli lihtsam kasutada võrrandite esitust parameetrilisel kujul või polaarkoordinaate.
Näiteks ringi jaoks, mille keskpunkt on koordinaatsüsteemi nullpunktis, saab ringjoone koordinaadid leida valemitega:
ring
ja ellipsi (ovaali) jaoks valemitega:
ellips1
Allpool on toodud skeemid ja valemid ringi ja ellipsi jaoks, mille keskpunkt asub punktis (x0, y0). Nagu teada ning näha ka skeemidest ja valemitest, on ring ellipsi (ovaali) erijuht, kus poolteljed a ja b on võrdsed (a = b = r)

ring ellips

Allpool on rakenduse aken, kus saab proovida selle tööd.


Algoritm ja skript on toodud ovaali (ellipsi) jaoks

skript ovaal
   võta pliiatsi suurus
   vali pliiatsi värv
   n = 60
   fi = 0
   h = 360 / n
   loe a, b, x0, y0
   pliiats üles
   mine x = x0 + a, y = y0
   pliiats alla
   kordus n korda
     fi = fi + h
     x = x0 + a * cos(fi)
     y = y0 + b * sin(fi)
     mine x = x, y = y

NB!
ringi korral on a ja b asemel r

ovaal

Näide "Dünaamiline kolmnurk"

Rakendus võimaldab joonistada kolmnurka, lohistades selle tippe, ja leida mõned omadused. Skripte võib näha lingilt.

 

Kasutaja käsuplokid

Kasutaja käsuplokkide kasutamine on joonestamisel üsna otstarbekas. Siin on tüüpiliselt palju erinevaid muutuvaid suurusi: kujundi asukoht, mõõtmed, joone paksus ja värvus jm. Taolisi väärtusi on otstarbekas kasutada parameetrite ja argumentide abil eriliiki skriptides: protseduurides. Näiteks on defineeritud protseduur rist, mis joonistab etteantud kohas ja etteantud mõõtmetega ristküliku.

rist_plokk Protseduuri defineerimisel esitatakse selle päises parameetrite loetelu, mida kasutatake tegevuste kirjeldamisel protseduuri sees. Vt. päist ja kõrvalolevat kommentaari.
Toodud definatsiooni alusel luuakse grupis Lisaplokid taoline käsuplokk
kp_rist
Selle kasutamisel esitatakse väljades argumentide väärtused, näiteks
rist_arg
ring

Käsuplokk ring joonistab ringi. Kasutab käsuplokki alg algseadete tegemiseks.
Käsuploki ring parameetrid:
x0, y0 - ringi keskpunkt
r - ringi raadius
jp - joone paksus
jv - joone värv
Parameetrid jp ja jv antakse üle protseduuri alg.

 

Näiteks toodud rakendus, kasutades ülaltoodud protseduure, võimaldab kasutajal joonistada lava erinevates kohtades erinevate mõõtmetege ristkülikuid ja ringe.
Hõlmatud rakenduse aknas saab proovida selle tööd. Kujundi asukoha (x0, y0), suurused (a, b, r) ja joone paksuse (jp) saab määrata vastava liuguriga. Joone värv võetakse juhusliku arvu abil. Käivitamiseks: klahv 1 - ristkülik, 2 - ring. Kujundi asukoha ning joonistamise käivitamise saab määrata ka hiireklõpsuga laval. NB! Kasutage turborežiimi: Shift+Roheline lipp.


Nupp Demo näitab sammhaaval ristküliku joonistamist.
Klõpsates linki Näita rakendust, saate käivita rakenduse serveris ja uurida ja katsetada seda.

Demo. Kujundite täitmine

Scratchis ei ole vahendeid kujundite täitmiseks värviga. Kuid lihtsamaid kujundite (ristkülik, ring, ovaal) jaoks saab seda imiteerida. Sängitatud rakenduse aknas saab proovida. Skripte võib näha lingilt.
Käivitamiseks klahv A. NB! Kasutage turborežiimi: Shift+Roheline lipp.

 

 Demo. Muster