Садржај
1. Робот Карел - линијски програми и бројачка петља
2. Робот Карел - условна петља и гранање
3. Робот Карел - задаци за вежбање
4. Корњача графика - линијски програми и петље
5. Корњача графика - гранање, угнежђене петље, функције, торке и листе
6. Корњача графика - задаци за вежбање
9. Израчунавања - коришћење и дефинисање функција
10. Израчунавања - задаци за вежбање
13. Контрола тока - вежбање
17. Програмирање 2Д графике - Увод у Pygame

21.2. Домаћи задатак

Иако цртеже које цртамо у односу на сидро обично креирамо имајући ово од почетка у виду, постоји систематичан поступак којим од цртежа који је задат у апсолутним координатама можемо доћи до цртежа који је нацртан у односу на сидро (можемо усидрити цртеж). Покушајмо да резимирамо како можемо да уведемо сидро, тј. како да од цртежа у ком се јављају апсолутне координате уведемо релативне координате (чиме стичемо погодности које пружа добро изабрано сидро са којима смо се упознали раније), за сада без промене величине цртежа.

Када се црта круг помоћу pg.draw.circle(prozor, boja, (cx, cy), r), тада га можемо усидрити у тачку (x, y) тиме што позив заменимо са

pg.draw.circle(prozor, boja, (x + (cx - x), y + (cy - y)), r).

На пример, ако круг нацртан помоћу pg.draw.circle(prozor, boja, (100, 50), r) желимо да усидримо у тачку (x, y) = (50, 100), тада ћемо га цртати помоћу

pg.draw.circle(prozor, boja, (x + 50, y - 50), r).

МЕСТО ЗА СКИЦУ ПРЕМА НАРЕДБАМА НАВЕДЕНИМ У ПРИМЕРУ

Слично можемо урадити и у случају осталих облика.

Провери да ли ово разумеш тако што ћеш одговорити на наредних неколико питања.

    Q-130: Желимо да прилагодимо цртеж који се састоји од наредних облика, тако да се све црта у односу на сидро са координатама x=100, y=100.

    pg.draw.circle(prozor, pg.Color("red"), (100, 100), 50, 1)
    pg.draw.line(prozor, pg.Color("red"), (50, 50), (150, 150))
    pg.draw.line(prozor, pg.Color("red"), (150, 50), (50, 150))
    pg.draw.rect(prozor, pg.Color("red"), (50, 50, 100, 100))
    

    Које наредбе ће бити део прилагођеног цртежа?

  • pg.draw.circle(prozor, pg.Color("red"), (x, y), 50, 1)
  • Тачно
  • pg.draw.line(prozor, pg.Color("red"), (x-50, x-50), (150, 150))
  • Покушај поново
  • pg.draw.line(prozor, pg.Color("red"), (x+50, y-50), (x-50, y+50))
  • Тачно
  • pg.draw.rect(prozor, pg.Color("red"), (x-50, y-50, x, y))
  • Покушај поново

    Q-131: Круг нацртан наредбом pg.draw.circle(prozor, boja, (180, 80), 60) део је цртежа који желимо да прилагодимо тако да му главна тачка (сидро) буде одређена променљивама x=100 и y=100. Која наредба ће бити део тако прилагођеног цртежа?

  • pg.draw.circle(prozor, pg.Color("red"), (x, y), 60)
  • Покушај поново
  • pg.draw.circle(prozor, pg.Color("red"), (180, 80), 60)
  • Покушај поново
  • pg.draw.circle(prozor, pg.Color("red"), (100, 100), 60)
  • Покушај поново
  • pg.draw.circle(prozor, pg.Color("red"), (x + 80, y - 20), 60)
  • Тачно
  • pg.draw.circle(prozor, pg.Color("red"), (x + 180 , y + 80), 60)
  • Покушај поново

Покрени сада наредни програм и видећеш лице човечуљка. Прилагоди цртеж тако да се црта релативно у односу на сидро \((x, y)\), које се налази у центру плавог круга (у почетку је то тачка \((100, 100)\)). Покретањем програма провери да ли ти је решење добро. Ако је све урађено како треба, цртеж ће се исправно померати док се миш помера.

Размотримо сада како да поред цртања у односу на неки положај (сидро) направимо наше цртеже скалабилним, тј. да се цртају у односу на задату димензију. Присети се како смо све односе у задатку „Цвет“ изразили у односу на полупречник круга \(a\). Мењајући вредност те варијабле, могли смо лако да повећавамо и смањујемо цео цртеж, зато што су све остале величине биле изражене у односу према том полупречнику.

Ако желимо да цртеж учинимо потпуно скалабилним, потребно је све висине, ширине и полупречнике изразити као умножак дате димензије. Помаке по хоризонтали и вертикали у односу на сидро \((x, y)\) такође треба изразити као умножак дате димензије. На следећем питању провери да ли ово разумеш.

    Q-132: Круг нацртан наредбом pg.draw.circle(prozor, boja, (180, 80), 60) део је цртежа који желимо да прилагодимо тако да му главна тачка (сидро) буде одређена променљивама x = 100 и y = 100, и да му основна величина буде a=5. Која наредба ће бити део тако прилагођеног цртежа?

  • pg.draw.circle(prozor, pg.Color("red"), (x, y), 12*a)
  • Покушај поново
  • pg.draw.circle(prozor, pg.Color("red"), (x - 36*a, x - 48*a), 12*a)
  • Покушај поново
  • pg.draw.circle(prozor, pg.Color("red"), (x + 16*a, y - 4*a), 12*a)
  • Тачно
  • pg.draw.circle(prozor, pg.Color("red"), (20*a, 20*a), 60)
  • Покушај поново
  • pg.draw.circle(prozor, pg.Color("red"), (x + 16*a , y - 4*a), 60)
  • Покушај поново

Прилагоди сада додатно програм тако да се све црта релативно и у односу на јединичну величину (нека у почетку то буде \(5\)). Ако је све урађено како треба, величина ће му се мењати кликом на лево, односно десно дугме миша.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+