6. Použitie premenných a výrazov pri kreslení

Zopakujme si:

  • pomocou príkazu create_rectangle vieme do grafickej plochy kresliť obdĺžniky

  • tieto obdĺžniky môžeme rôzne zafarbiť a určovať im aj rôzne hrúbky obrysových čiar

  • polohy a veľkosti obdĺžnikov určujeme štyrmi číslami, tieto sú súradnice dvoch protiľahlých vrcholov obdĺžnikov

Parametre s premennými a výrazmi

Vo všetkých doterajších programoch, ktoré kreslili pomocou príkazu create_rectangle, sme ako súradnice používali len číselné konštanty. Pritom parametrami môžu byť aj aritmetické výrazy. Pozrite nasledovný príkaz:

platno.create_rectangle(130, 40, 250, 160, fill='violet')

Nakreslí fialový obdĺžnik nejakých rozmerov. Ak ale toto isté zapíšeme takto:

platno.create_rectangle(130, 40, 130 + 120, 40 + 120, fill='violet')

môžeme vidieť, že obdĺžnikom je štvorec s veľkosťou strany 120, ktorého ľavý horný vrchol má súradnice (130, 40).

Možno ešte prehľadnejšie by to bolo, keď parametre zapíšeme pomocou premenných. Napr.

x = 100
y = 70
sirka = 55
vyska = 35
platno.create_rectangle(x, y, x + sirka, y + vyska)

Nakreslí obdĺžnik so veľkosti 55x35 s ľavým horným vrcholom (100, 70). Zrejme, ak by premenné sirka a vyska mali rovnakú hodnotu, príkaz create_rectangle by nakreslil štvorec.

Použitie premenných ukážeme na takomto príklade: nakreslíme vedľa seba tri farebné obdĺžniky veľkosti a x b tak, že ľavý horný vrchol prvého z nich je na súradniciach (x, y):

import tkinter

platno = tkinter.Canvas()
platno.pack()

x = 30
y = 100
a = 100
b = 70
platno.create_rectangle(x, y, x+a, y+b, fill='blue')
platno.create_rectangle(x+a, y, x+2*a, y+b, fill='light blue')
platno.create_rectangle(x+2*a, y, x+3*a, y+b, fill='dark blue')

a vyzerá to potom takto:

_images/06_01.png

Nasledovný príklad ilustruje použitie premenných x, y, a, b na kreslenie štyroch obdĺžnikov, pričom bod (x, y) nie je ich ľavým horným vrcholom:

import tkinter

platno = tkinter.Canvas()
platno.pack()

x = 120
y = 120
a = 100
b = 40
platno.create_rectangle(x, y, x+a, y+b, fill='red')
platno.create_rectangle(x, y, x-a, y-b, fill='blue')
platno.create_rectangle(x, y, x-b, y+a, fill='yellow')
platno.create_rectangle(x, y, x+b, y-a, fill='green')

Preštudujte tento program, ktorý nakreslí takýto obrázok:

_images/06_02.png

Pri kreslení štvorcov (aj obdĺžnikov) sa niekedy stretáme s pojmom stred štvorca. Napr. potrebujeme nakresliť dva štvorce, ktoré majú spoločný stred. Tu by sa nám zišlo si premyslieť, ako sa pomocou create_rectangle kreslí štvorec so stranou a, keď poznáme stred štvorca (x, y). Najprv si to nakreslime:

_images/06_03.png

Aby sem sa od stredu štvorca dostali k ľavému hornému vrcholu, musíme x-ovú aj y-ovú súradnicu zmenšiť o polovicu strany štvorca t.j. o a/2. Pravý dolný vrchol štvorca zase dostaneme tak, že k obom súradniciam stredu (x, y) pripočítame polovicu strany štvorca.

Teraz zapíšeme riešenie úlohy, v ktorej nakreslíme dva farebné štvorce so spoločným stredom:

import tkinter

platno = tkinter.Canvas(bg='white')
platno.pack()

x = 150
y = 100
platno.create_rectangle(x-80, y-80, x+80, y+80, fill='royal blue')
platno.create_rectangle(x-35, y-35, x+35, y+35, fill='tomato')

Uvedomte si, že väčší štvorec má veľkosť strany 160 a menší z nich veľkosť 70:

_images/06_04.png

Chyby v programe

Pri kreslení do grafickej plochy môžu nastať situácie, ktoré pre Python nie sú chybou, ale my nikde nevidíme očakávaný výsledok. Tu je niekoľko ukážok:

x = 100
y = -70
platno.create_rectangle(x, y, x+50, y+50, fill='red')

Časť programu mala nakresliť štvorec so stranou 50, ktorého ľavý horný vrchol má súradnice (x, y). Lenže v ploche nevidíme nič. V skutočnosti sa obdĺžnik nakreslil, ale mimo viditeľnú časť plátna: na súradniciach (100, -70), (150, -20).

Podobne je to aj pri kreslení dvoch štvorcov so spoločným stredom:

x = 150
y = 100
platno.create_rectangle(x-35, y-35, x+35, y+35, fill='red')
platno.create_rectangle(x-80, y-80, x+80, y+80, fill='blue')

Tu vidíme len modrý väčší štvorec, ktorý úplne prekryl menší červený.

Úlohy

  1. Bez toho, aby ste tieto príkazy spúšťali na počítači, zistite, ktoré z týchto riadkov nakreslia štvorce (predpokladajte, že x aj y je 100):

    platno.create_rectangle(0, 0, 1, 1)
    platno.create_rectangle(10, 20, 30, 40)
    platno.create_rectangle(100, 150, 150, 100)
    platno.create_rectangle(x, y-50, x+50, y)
    platno.create_rectangle(100-20, 70-30, 100+30, 70+20)
    

    Pre každý z týchto obdĺžnikov určte súradnice ľavého horného vrcholu a veľkosť jeho strán.

  1. Napíšte program, ktorý pomocou farebných obdĺžnikov nakreslí hlavu robota (alebo mimozemšťana). Na hlave by mali byť minimálne dve rovnaké oči a jedny ústa.

  1. Napíšte program, ktorý pomocou obdĺžnikov nakreslí niekoľko rôznych písmen, napr.

    _images/06_05.png

    Uvedomte si, že niektoré z týchto nakreslených obdĺžnikov sú biele (teda fill='white', width=0), niektoré obdĺžniky môžu mať hrubý obrys (napr. width=20).

  1. Nakreslite páť vnorených štvorcov so spoločným stredom (napr. (180, 120)). Zvoľte ľúbovoľných päť farieb. Veľkosti strán štvorcov nech sú 200, 160, 120, 80 a 40. Napr. takto

    _images/06_06.png

  1. Päť farebných štvorcov ležia tesne vedľa seba na jednej podložke. Veľkosti strán sú postupne 100, 80, 60, 40, 20. Napíšte program, v ktorom ľavý dolný vrchol prvého štvorca má x=20 a y=200. Napr. takto

    _images/06_07.png

Zhrnutie

čo sme sa naučili:

  • Programy v Pythone môžu pracovať s textovou plochou (výsledky sa dozvedáme pomocou print) alebo s grafickou (do plátna kreslíme pomocou create_rectangle).

  • Príkaz create_rectangle na kreslenie obdĺžnikov má prvé štyri parametre číselné (súradnice vrcholov obdĺžnika) a za tým môže mať ďalšie parametre, ktorými sa nastavujú farby a hrúbka čiar.

  • Farby sa zadávajú ako znakové reťazce buď ich menami (napr. 'blue' alebo 'white') alebo šestnástkovými kódmi RGB reprezentácie (napr. '#00ffff' pre tyrkysovú farbu cyan).

  • Číselnými parametrami príkazu môžu byť aj zložitejšie aritmetické výrazy, ktoré obsahujú aj premenné.

dôležité zásady:

  • číselné parametre v príkaze create_rectangle je vhodné rozpísať tak, aby bolo čitateľovi zrozumiteľnejšie o aký obdĺžnik, resp. štvorec sa jedná

  • je vhodné používať pomocné premenné tak, aby sa ľahšie dalo odladiť kreslenie viacerých navzájom súvisiacich útvarov