Crtanje u Pythonu

Sjedište: CARNET - Arhiva 2021 Loomen
E-kolegij: Informatika 3 PMG - Gimnazija Đakovo
Knjiga: Crtanje u Pythonu
Otisnuo/la: Gost (anonimni korisnik)
Datum: petak, 22. studenoga 2024., 18:47

Programski jezik Python sadrži više modula koji omogućuju rad s grafičkim narebama. Jedan od modula je i kornjačina grafika, s kojom ste se susreli još u osnovnoj školi.

Grafički prozor je veličine 800 x 800 piksela.


Otvorite Python IDLE., a zatim otvorite novu Py datoteku (File/New File) 

Upišite naredbe: 

from turtle import * 

title("Primjer") 

i pokrenite program (F5)

Što se dogodilo? 

Dodajte naredbu: 

st() 

Ima li promjena?

Dodajte i naredbu: 

fd (100) i provjerite rezultat.

Sada dodajte naredbe

lt (90)
fd(100)

Zadatak: Dovršite započeti kvadrat 




Osnovna ideja kornjačine grafike je ta da se crtanje ostvaruje kretanjem nekog lika. Prije samog crtanja potrebno je napraviti pripremu: pozvati modul u kojem se nalaze funkcije za crtanje kornjačinom grafikom, imenovati prozor i prikazati kornjaču.

  • from turtle import * - omogućuje korištenje naredbi za crtanje kornjačom 
  • title ('Ime prozora') - zaslon na kojem se prikazuje nacrtani objekt 
  • st () - naredba za prikaz kornjače 

Neke od naredbi za crtanje kornjačom su:

Naredba 

Puni naziv 

Opis 

fd (m) 

forward (m) 

pomiče kornjaču naprijed za m točaka 

rt (s) 

right (s) 

okreće kornjaču udesno za s stupnjeva 

lt (s) 

left (s) 

okreće kornjaču ulijevo za s stupnjeva 

bk(m) 

back (m) 

pomiče kornjaču unatrag za m točaka 

pu() 

penup() 

diže pero kornjače 

pd() 

pendown() 

spušta pero kornjače 

st() 

showturtle() 

pokazuje kornjaču 

ht() 

hideturtle() 

skriva kornjaču 

reset() 

reset() 

briše crtež i postavlja kornjaču u sredinu prozora 

width(m) 

width(m) 

debljina linije m točaka 

begin_fill() 

 

početak bojanja 

end_fill() 

 

kraj bojanja 

color ('red', yellow') 

 

crveni rub, žuta ispuna 


Nacrtaj jednakostranični trokut duljina stranica 200.
Napomena: provjeri rezultat nakon svake naredbe.
trokut


Zadatke iz prethodne vježbe lakše bi riješili primjenom naredbi ponavljanja, odnosno petlji. Podsjetimo se, one nam omogućuju da potrebne naredbe napišemo jednom, a pri izvođenju programa pozvamo ih željeni broj puta.
Naredbe ponavljanja sastavni su dio svakoga programskog jezika. Možemo ih podijeliti prema različitim kriterijima.
S obzirom na broj ponavljanja, dijelimo ih na:

  • petlje u kojima je poznat broj ponavljanja i
  • petlje u kojima broj ponavljanja ovisi o uvjetu.

Petlju s poznatim brojem ponavljanja u Pythonu zapisujemo na sljedeći način:
for i in range ( n ):
    naredba (blok_naredbi)

Tako zapisana naredba for ponovit će se n puta, s time da je početna vrijednost kontrolne varijable i jednaka 0. To znači da se vrijednost kontrolne varijable mijenja od 0 do n – 1.

Primjer 1:
Dio programa
for i in range (10):
    print(i)
na zaslon će ispisati brojeve 0, 1, 2… 9.

Naredba for može se zapisati i u obliku:
for i in range (početna, završna, korak):
    naredba (blok_naredbi)
U tom slučaju vrijednost kontrolne varijable mijenjat će se od vrijednosti početna do vrijednosti završna – 1, i to za vrijednost korak.

Primjer 2:
Dio programa
for i in range (1, 10, 2):
    print(i)
na zaslon će ispisati brojeve 1, 3, 5, 7 i 9.

Zadatak:

Pretipkajte programe iz primjera 1 i 2 u Python i isprobajte ih. Mijenjajte početnu, završnu vrijednost i korake i uočite promjene.

1. Napravi program  koji crta kvadrat duljine stranica 100.

2.U kvadratu duljina stranica 100 iscrtaj kvadrat duljina stranica 90.

3. Napravi program koji iscrtava 10 kvadrata, jedan unutar drugog. Duljine stranica prvog kvadrata su 100, a svakog sljedećeg za 10 manje od prethodnog.

1. Napravi program  koji crta kvadrat duljine stranica 100.

from turtle import *

for i in range (4):
        fd (100)
        lt (90)

2. U kvadratu duljina stranica 100 iscrtaj kvadrat duljina stranica 90.

from turtle import *
#kvadrat 1
for i in range (4):
        fd (100)
        lt (90)
#pomak
pu()
fd(5)
lt(90)
fd(5)
rt(90)
pd()
#kvadrat 2
for i in range (4):
        fd (90)
        lt (90)

3. Napravi program koji iscrtava 10 kvadrata, jedan unutar drugog. Duljine stranica prvog kvadrata su 100, a svakog sljedećeg za 10 manje od prethodnog.

from turtle import *
a=100
for i in range (10):
    for j in range (4):
        fd (a)
        lt (90)
    #pomak
    pu()
    fd(5)
    lt(90)
    fd(5)
    rt(90)
    pd()
    a=a-10


Potprogram je dio programa koji se piše jednom, a može se pozivati onoliko puta koliko je potrebno. 

Što još moramo znati o potprogramu? 

  • Svaki potprogram mora imati svoje ime 

  • Započinje ključnom riječi def, nakon koje slijedi ime, okrugle zagrade unutar kojih mogu biti navedeni PARAMETRI i znak : (dvotočka) 

  • naredbe unutar potprograma Python automatski uvlači za 4 mjesta 

  • Potprogram se poziva navodeći njegovo ime. 

Primjer potprograma:

 Potprogram za crtanje kvadrata: 

def kvadrat(a):
   for i in range (4):
        fd (a)
        lt (90)
Sada kada smo nacrtali kvadrat, samo ga, prema potrebi pozovemo unutar programa:
Primjer poziva potprograma u glavnom programu:
for i in range (10):
    kvadrat(a)
    a=a-10
Ostao je problem pozicioniranja kvadrata. Možemo ostaviti naredbe za pomak u glavnom programu,
Ove naredbe također možemo umetnuti unutar potprograma:

Potprogram:
def pomak():
    pu()
    fd(5)
    lt(90)
    fd(5)
    rt(90)
    pd()
Glavni program:
a=100
for i in range (10):
    kvadrat(a)
    pomak()
    a=a-10

Doradimo prethodni program tako da sami zadajemo duljinu stranica kvadrata.

Za unos podataka u grafičkom modu potrebno je koristiti naredbu textinput oblika:

varijabla=textinput('ime okvira', 'tekst u prozoru') 

Napomena: unesena varijabla je tipa string (znakovna), te ju je potrebno prebaciti u cijeli broj funkcijom int():

Primjer:

a=textinput('Duljina stranice','a=') 

a=int(a)

Rezultat:


1. Doradi prethodni program (ctranje kvadrata) tako da korisnik zadaje duljinu stranica kvadrata.

2. Preuredi program tako da se od korisnika traži duljina stranice kvadrata i broj kvadrata koji treba nacrtati jedan unutar drugoga. Nacrtane kvadrate rasporedi ravnomjerno.

Primjeri:

a = 100, broj kvadrata = 5

a = 200, broj kvadrata = 3


a = 200, broj kvadrata = 20

3. Napravi program u kojem korisnik unosi duljinu stranice i pomak. Crtaj kvadrate sve dok ne dođeš do stranice duljine 0.




1. Doradi prethodni program (ctranje kvadrata) tako da korisnik zadaje duljinu stranica kvadrata.

from turtle import *
#potprogram za crtanje kvadrata
def nacrtaj_kvadrat(a):
   for i in range (4):
        fd (a)
        lt (90)
#potprogram za pomak        
def pomakni_se(b):
    pu()
    fd(b)
    lt(90)
    fd(b)
    rt(90)
    pd()
#glavni program    
a=textinput('Duljina stranice','a=')
a=int(a)
b=5
for i in range (b):
    nacrtaj_kvadrat(a)
    pomakni_se(b)
    a=a-10
2. Preuredi program tako da se od korisnika traži duljina stranice kvadrata i broj kvadrata koji treba nacrtati jedan unutar drugoga. Nacrtane kvadrate rasporedi ravnomjerno.

from turtle import *
#potprogram za crtanje kvadrata
def nacrtaj_kvadrat(a):
   for i in range (4):
        fd (a)
        lt (90)
#potprogram za pomak        
def pomakni_se(b):
    pu()
    fd(b)
    lt(90)
    fd(b)
    rt(90)
    pd()
#glavni program    
a=textinput('Duljina stranice','a=')
a=int(a)
b=textinput('Koliko kvadrata treba nacrtati?','b=')
b=int(b)
c=a//b
d=c//2
for i in range (b):
    nacrtaj_kvadrat(a)
    pomakni_se(d)
    a=a-c

Grafički prostor koji se koristi za crtanje je prozorpovršine 600 x 600 točaka, pri čemu svaka točka ima svoje koordinate.

Ishodište koordinatnog sustava je u sredini prozora.

Naredbe koje možemo koristiti za crtanje su:

  • Setpos (x,y) - postavlja kornjaču u točku sa zadanim koordinatama 

  • Position() - vraća trenutne koordinate kornjače  

  • Seth() - okreće kornjaču u zadanom smjeru 

  • Towards(x,y) - vraća kut pod kojim treba okrenuti kornjaču da bi gledala u zadanu točku. Često se koristi u obliku seth(towards (x,y)) 

  • Distance(x, y) -vraća udaljenost od trenutne  pozicije kornjače do zadane točke 

  • Heading() - vraća kut pod kojim je trenutno okrenuta kornjača 

  • Home() - vraća kornjaču u ishodište 

  • Pu() - podiže pero 

  • Pd() - spušta pero 





Program

from turtle import*
title ('Koordinatni')
st()
setpos (0,0)
setpos (250,0) #x desno
lt (135)
fd(20)
setpos(250,0)
rt(270)
fd(20)
pu()
home()
pd()

crta pozitivni dio x osi.

Provjeri.

Može li se zadatak pojednostavniti korištenjem naredbi seth(towards(x,y))?

Pokušaj!

1. Dovrši koordinatni sustav (nacrtaj koordinatne osi)

2. Napravi oznake za jedinice


1. Dovrši koordinatni sustav (nacrtaj koordinatne osi)

from turtle import*
title ('Koordinatni')
def koordinatni(x,y,kut1,kut2):
    setpos (0,0)
    setpos (x,y)
    lt (kut1)
    fd(20)
    setpos(x,y)
    lt(kut2)
    fd(20)
    pu()
    home()
    pd()
koordinatni (250, 0, 135, 90)
koordinatni (0, 250, 225, 90)
koordinatni(-250,0,45,270)
koordinatni (0, -250, 45, 90)

2. Napravi oznake za jedinice

from turtle import*
title ('Koordinatni')
def koordinatni(x,y,kut1,kut2):
    setpos (0,0)
    setpos (x,y)
    lt (kut1)
    fd(20)
    setpos(x,y)
    lt(kut2)
    fd(20)
    pu()
    home()
    pd()
def crtica (x, y):
    pu()
    setpos(x, y)
    pd()
    fd(10)
koordinatni (250, 0, 135, 90)
koordinatni (0, 250, 225, 90)
koordinatni(-250,0,45,270)
koordinatni (0, -250, 45, 90)
lt(90)
for i in range (24):
    crtica(i*10, -5)
for i in range (24):
    crtica(i*(-10), -5)
pu()
home()
for i in range (24):
    crtica(-5, i*(10))
for i in range (24):
    crtica(-5, i*(-10))


Napravi crtež kao na slici:


Primjenjujući naredbe koordinatne grafike napravite crteže kao na slikama: 

ocjena: dovoljan

ocjena: dobar

ocjena: vrlo dobar

ocjena: odličan: