Садржај
1. Програмирање у пајтону - Увод у Pygame
15. Цртање уз помоћ петљи - обнављање
16. Завршни квиз

11.2. Цртање облика помоћу петљи

Мердевине

Измени наредни програм тако да се пречаге мердевина цртају у петљи.

Пажљиво проучи које се вредности мењају кроз позиве функције pg.draw.line, шта је почетна вредност, шта је крајња вредност и који је корак, па на основу тога позови функцију range у оквиру петље for.

Можемо приметити да се при цртању пречага заправо мења само висина пречага, а све остало је исто. Да би мењали висину пречаге потребно је да код цртања леве и десне њене тачке мењамо y коррдинату (чиме се мења висина) у корацима 50, 100, 150, 200, 250. То можемо искористити у range делу у оквиру петље for.

Једно могуће решење је:

Правилно распоређени бројеви

У оба претходна примера било је потребно да набројимо неки низ правилно распоређених бројева. У задатку са круговима то су били бројеви 10, 20, …, 100, а у задатку са мердевинама то су били бројеви 50, 100, 150, 200, 250.

У решењима задатка видели смо да је један од начина да се то уради петља облика:

При томе је било потребно обратити пажњу на то да десни крај интервала никада није укључен у набрајање па зато узимамо najveci_x+1 да би и највећи х био укључен у петљу.

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

    Q-74: Упари низ бројева са петљом која га генерише: Покушај поново!
  • 15, 30, 45, 60, 75
  • for i in range(15, 75+1, 15)
  • 100, 350, 600
  • for i in range(100, 600+1, 250)
  • 5, 10, 15, 20, 25, 30
  • for i in range(5, 30+1, 5)
  • 100, 200, 300, 400, 500, 600
  • for i in range(100, 600+1, 100)

Наведимо још неколико начина да се исти ефекат постигне

Ако сада почетак обележимо са \(x_0\), а корак са \(d_x\), тада су вредности које исписујемо \(x_0\), \(x_0 + d_x\), \(x_0+2d_x\), \(x_0+3d_x\) итд. Ако желимо да набројимо \(n\) ових вредности, тада можемо употребити петљу облика:

Још један начин је да променљиву x ажурирамо кроз сваки корак петље, тако што је увећавамо за dx.

Важна напомена: Израз x += dx једнак је изразу x = x + dx

Видећемо да се велики број задатака са цртањем правилно распоређених облика може решити применом оваквих петљи.

Нагласимо још и да функција range са кораком (са три аргумента) прима обавезно целобројне аргументе, па у ситуацијама када корак није целобројан њено коришћење није могуће.

Хоризонтално и вертикално распоређивање облика

Често у применама имамо потребу да распоредимо објекте тако да буду један до другога, тако да су сви објекти равномерно распоређени, тј. тако да су свака два узастопна објекта на истом растојању.

Хоризонтално распоређени кругови

Нацртај 10 кругова пречника 30 пиксела тако да буду равномерно распоређени ширином прозора и да се међусобно додирују.

Наредних пар питања ће ти помоћи да решиш овај задатак.

    Q-75: Ако се два круга полупречника \(r\) додирују, тада је растојање између њихових центара једнако:

  • 2*r
  • Тачно
  • r
  • Покушај поново
  • r / 2
  • Покушај поново
  • 100
  • Покушај поново

Ако круг полупречника \(r\) додирује леву ивицу прозора, тада је x координата његовог центра једнака:

На основу овога, допуни наредни програм:

Још један начин да се овај задатак реши је тај да се примети да су координате центара кругова редом \(r\), \(r + 2r\), \(r +4r\), \(r + 6r\) итд. Дакле, \(x\) координата круга са редним бројем \(i\) је \(r + 2\cdot i\cdot r\) тј. \((2i+1)r\). Реши задатак коришћењем ове формуле.

Трећи начин би могао искористити могућност да се функцијом range може вршити набрајање са кораком (нпр. range(r, r + 10*2*r + 1, 2*r)).

Вертикално распоређени кругови

Прикажимо сада како можемо распоредити кругове вертикално.

Напиши програм који црта кругове полупречника 10 пиксела равномерно распоређене вертикално средином прозора, тако да су им центри удаљени 30 пиксела (нацртај све кругове који се виде). Висина прозора се мења приликом сваког покретања програма.

Овај задатак је сличан претходном, уз неколико важних разлика. То што су кругови распоређени вертикално уместо хоризонтално не мења много - само је потребно заменити улогу x и y координата. Растојање између центара је овај пут фиксно (износи 30 пиксела) и не израчунава се на основу полупречника. Кључна разлика је то што број кругова није унапред задат већ је кругове потребно цртати све док се бар неки њихов делић види у прозору. Зато имамо две могућности. Или ћемо некако на основу висине прозора израчунати број кругова који се виде или ћемо уместо бројачке петље for употребити условну петљу while. Ово друго може бити једноставније.

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