1.2.12. Počítač vie kresliť

 

V tejto kapitole uvidíte, ako sa dajú na počítači kresliť obrázky. Časť obrazovky, ktorú môžete použiť, má 22 riadkov a 32 stĺpcov, tj. 22*32=704 znakov. Ako si pamätáte z predchádzajúcej kapitoly, každý z týchto znakov je vytvorený z 8x8 bodov. Každý bod je špecifikovaný dvoma číslami - súradnicami. Prvá súradnica je x a druhá je y. Tieto súradnice sa píšu ako pár v zátvorke. (0,0), (0,175), (255,0), (255,175) sú rohové body kresliaceho poľa. To zároveň znamená, že pri kreslení môže byť súradnica x len celé číslo od 0 do 255 a súradnica y od 0 do 175. Ak nie je hodnota x a y celé číslo, berie sa do úvahy len celá časť.

V tomto poli máme k dispozícii nasledujúce grafické príkazy:

      PLOT x, y

nakreslí bod daný súradnicami x, y. Súradnice x, y sa chápu ako absolútne súradnice (t. j. vzhľadom na ľavý dolný roh).

Nasledujúci program:

      10 PLOT INT(RND*256), INT (RND*176): INPUT a$: GOTO 10

nakreslí bod s náhodnými súradnicami po každom stlačení ENTER.

Máme tu však oveľa zaujímavejší program. Kreslí grafy funkcie SIN (sínusovka) pre hodnoty 0 až 2*PI.

      10 FOR n=0 TO 255

      20 PLOT n,88+80*SIN (n/128*PI)

      30 NEXT n

Ďalší program kreslí graf časti paraboly (funkcia SQR) medzi hodnotami 0 a 4:

      10 FOR n=0 TO 255

      20 PLOT n,80*SQR (n/64)

      30 NEXT n

Všimnite si, že súradnice bodu pre kreslenie sa líšia od súradnice v AT pre nastavenie ukazovateľa výpisu znaku.

Počítač však dokáže vykresliť nielen bod, ale i úsečku, dokonca aj kružnicu alebo jej časť. Úsečku nakreslíme pomocou príkazu

      DRAW x, y

Začiatočným miestom úsečky je bod, v ktorom skončil predchádzajúci grafický príkaz svoju činnosť (po zapnutí počítač a po príkazoch RUN, CLEAR, CLS a NEW je to spodný ľavý roh (0,0)) a končí bodom s udanými súradnicami, kde súradnice koncového bodu sa berú vzhľadom na začiatočný bod úsečky (relatívne súradnice, na rozdiel od príkazu PLOT). Preto môžu byť hodnoty x a y v príkaze DRAW aj záporné.

Skúšajte príkazy PLOT a DRAW napr.:

      PLOT 0,100: DRAW 80,-35

      PLOT 90,150: DRAW 80,-35

Môžete samozrejme kresliť vo farbách, pamätajte však, že farby platia pre celú pozíciu znaku (8x8 bodov) a nemôžu byť špecifikované pre jednotlivé body. Bod je tlačený farbou INK a farba všetkých bodov v jednej znakovej pozícii je dané tou istou farbou, ako ukazuje tento program:

 

      10 BORDER 0: PAPER 0: INK 7: CLS

      20 LET x1=0: LET y1=0: REM zaciatok priamky

      30 LET c=1: REM farba pre INK - zacina sa modrou

      40 LET x2=INT (RND*256):LET y2=INT (RND*176): REM dokoncenie

      50 DRAW INK c; x2-x1, y2-y1

      60 LET x1=x2: LET y1=y2: REM dalsia ciara zacina tam kde

         minula koncila

      70 LET c=c+1: IF c=8 THEN LET c=1: REM nova farba

      80 GO TO 40

 

Ako program postupuje, čiary sa zdajú širšie a to preto, že menia farbu. Pamätajte, že môžete použiť PAPER, INK, FLASH, BRIGHT, INVERSE, OVER v príkaze PLOT, DRAW, rovnako ako v PRINT a INPUT. Ďalšou možnosťou využitia DRAW je možnosť kresliť časť kružnice namiesto priamok pridaním ďalšieho čísla k príkazu, ktorý špecifikuje uhol pre kružnicový oblúk:

      DRAW x, y, u

x a y udávajú polohu koncového bodu (relatívne) a u je uhol v radiánoch udávajúci otáčanie; pokiaľ je kladné, otáča sa doľava, pokiaľ je záporné, tak doprava. Na u sa môžeme pozerať tak, že je to časť úplnej kružnice. Celá kružnica je 2*PI radiánov a potom pre u=PI bude nakreslená polkružnica, pokiaľ u = 0,5 * PI bude to štvrťkruh atď. Predpokládajme, že u=PI.

Potom nasledujúci program

      10 PLOT 100,100: DRAW 50,0,PI

nakreslí kruhový oblúk (polkružnicu).

Odštartujte program niekoľkokrát a PI vždy nahraďte iným číslom:

-PI, PI/2, 3*PI/2, PI/4, 1, 0

Posledný príkaz tejto kapitoly je príkaz CIRCLE, ktorý kreslí celé kružnice. Má tvar:

      CIRCLE x, y, r

kde x a y sú súradnice stredu kružnice v absolútnych súradniciach a r je polomer kružnice.

Podobne ako v PLOT a v DRAW môžete použiť rôzne farby.

Funkcia POINT udáva, či má bod farbu podľa INK alebo PAPER.

Má tvar

      POINT (x,y)

kde x, y sú súradnice bodu (musia byť v zátvorkách). Výsledok je 0, keď bod má farbu podľa PAPER a je 1, ak má farbu podľa INK.

Skúste, ako pracuje INVERSE, OVER, PLOT. Majú vplyv len na vlastný bod a na zvyšok pozície znaku. Ak nie sú OVER a INVERSE zadané, je to isté ako použitie s parametrom 0. Zmeňte ju na 1 a pozrime sa, čo sa stane:

      PLOT INVERSE 1; - kreslí bod, vo farbe papiera

      PLOT OVER 1;    - zmení bod z čohokoľvek, vymení sa farba

                           INK a PAPER

      PLOT INVERSE 1; OVER 1; necháva bod ako bol pôvodne

Zadajte

PLOT 0,0:DRAW OVER 1;250,175

a skúste zmazať nakreslenú úsečku pomocou

      DRAW OVER 1;-250,-175

Tento spôsob nepracuje presne, pretože body tvoriace druhú úsečku nie sú rovnaké ako body tvoriace prvú úsečku. Čiaru musíte vymazať v tom smere, v akom ste ju kreslili.

Doporučujeme precvičiť položky príkazov PAPER, INK, BRIGHT v príkaze PLOT. Tie platia pre celú znakovú pozíciu, obsahujúcu bod. Používajú sa v tvare:

      PLOT PAPER a; FLASH b; BRIGHT c;x,y

Pokúste sa nakresliť kruhy s použitím funkcií SIN, COS a tiež pomocou príkazu CIRCLE:

      10 FOR n=0 TO I*PI STEP PI/180

      20 PLOT 100+80*COS n,87+80*SIN n

      30 NEXT n

      40 CIRCLE 150,87,80

Ako vidíte, príkaz CIRCLE je oveľa rýchlejší.

Zadajte:

      CIRCLE 100,87,80: DRAW 50,50

Všimnite si, že po príkaze CIRCLE je nastavený kurzor pre grafické príkazy uprostred pravého okraja kružnice. Preto je vhodné na ďalšie kreslenie použiť PLOT na definovanie počiatočnej pozície.

Nakoniec ukážeme program, ktorý kreslí grafy takmer akejkoľvek funkcie. Na riadku 30 sa zadáva rozsah argumentu a funkcia pre graf. Funkcia sa vkladá ako reťazec, mal by to byť výraz, používajúci x ako argument funkcie.

       10 PLOT 0,87: DRAW 255,0

       20 PLOT 127,0: DRAW 0,175

       30 INPUT n,e$

       35 LET t=0

       40 FOR f=0 TO 255

       50 LET x=(f-128)*n/128: LET y=VAL e$

       60 IF ABS y>87 THEN LET t=0: GO TO 100

       70 IF NOT t THEN PLOT f, y+88: LET t=1: GO TO !))

       80 DRAW 1,y-stare y

      100 LET stare y=INT (y+.5)

      110 NEXT f

Nechajte program bežať a ako príklad vložte číslo 10 pre n a 10*TAN x pre funkciu. Výsledkom bude graf funkcie tangens v rozsahu -10 až +10.