20.2. Центрирање и скалирање (повећавање и смањивање) објеката¶
Центрирање објеката¶
Иако се цртање правоугаоника или елипсе врши тако што се задају координате горњег левог темена, често имамо потребу да нацртамо правоугаоник или елипсу којима су познате координате средишта и димензије. Размисли о томе како се то може урадити, па кроз наредна питања провери да ли си у праву.
- pg.draw.rect(prozor, boja, (100, 100, 80, 40))
- Покушај поново
- pg.draw.rect(prozor, boja, (100, 100, 160, 80))
- Покушај поново
- pg.draw.rect(prozor, boja, (60, 80, 80, 40))
- Тачно
- pg.draw.rect(prozor, boja, (20, 60, 160, 80))
- Покушај поново
Q-158: Знаш да желиш да нацрташ правоугаоник ширине 80 и висине 40 пиксела тако да му је центар у тачки 100 и 100. Коју наредбу можеш да употребиш за то?
- pg.draw.ellipse(prozor, boja, (80, 100, 60, 40))
- Покушај поново
- pg.draw.ellipse(prozor, boja, (80, 100), (60, 40))
- Покушај поново
- pg.draw.ellipse(prozor, boja, (20, 60, 120, 80))
- Тачно
- pg.draw.ellipse(prozor, boja, (80, 100), (120, 80))
- Покушај поново
Q-159: Да би се нацртала елипса са центром у тачки (80, 100), чије су полуосе 60 и 40 пиксела, потребно је извршити позив функције:
Прилагоди сада наредни програм тако што ћеш направити жути правоугаоник и плаву елипсу димензија 100 пута 80 пискела чији је центар у центру прозора, тј. тачки (150, 150).
Сличан, али мало компликованији задатак је да се нацрта правоугаоник познатих димензија који је центриран унутар другог датог правоугаоника. Прво можеш да израчунаш средиште задатог, описаног правоугаоника, а затим да израчунаш координате горњег левог темена уписаног правоугаоника тако што од средишта одузмеш половину ширине и половину висине уписаног правоугаоника. Провери да ли ово разумеш тако што ћеш одговорити на следеће питање.
- pg.draw.rect(prozor, pg.Color("blue"), (20, 0, 40, 30))
- Покушај поново
- pg.draw.rect(prozor, pg.Color("blue"), (130, 170, 40, 30))
- Покушај поново
- pg.draw.rect(prozor, pg.Color("blue"), (40, 35, 40, 30))
- Покушај поново
- pg.draw.rect(prozor, pg.Color("blue"), (170, 205, 40, 30))
- Тачно
Q-160: Правоугаоник плаве боје, ширине 40 и висине 30 пиксела треба да буде центриран у жутом правоугаонику чија је ширина 120 и висина 100 пиксела и чије је горње лево теме у тачки (130, 170). Како се тај правоугаоник може нацртати?
У наредном програму можеш и да провериш како ово функционише.
У специјалном случају када је спољни правоугаоник цео прозор, правоугаоник можемо центрирати тако што му \(x\) координату горњег левог темена поставимо на половину разлике између ширине прозора и ширине правоугаоника, а \(y\) координату поставимо на половину разлике између висине прозора и висине правоугаоника. На тај начин слободан простор око правоугаоника равномерно распоређујемо на леву и десну, односно на горњу и доњу маргину.

Напиши програм који црта црвени квадрат димензије 200 пиксела, зелени димензије 150 пиксела и плави димензије 100 пиксела који су центрирани у прозору димензија 300 пута 300 пиксела.
Скалирање (повећавање и смањивање) објеката¶
Често цртеж желимо да прилагодимо тако што ћемо га скалирати (смањити или повећати). Ако желимо да нацртамо двоструко већи круг, потребно је навести двоструко већи полупречник, а ако је потребно нацртати двоструко већи правоугаоник, потребно је навести двоструко већу дужину и ширину. Испробај ово на следећем цртежу тако што ћеш смањити димензије правоугаоника на 50, а полупречник круга на 25.
Као што видиш, објекти су се смањили, али круг више није уписан у правоугаоник и цртеж не изгледа више како би требало да изгледа (центар круга и горње лево теме правоугаоника су остали непромењени). Скалирање дужи и многоуглова је још теже, јер се у њима не користе димензије, већ само координате тачака.
Дакле, да бисмо смањили или повећали цртеж, потребно је да мењамо и димензије, али и координате које одређују положај објеката.
Испробај шта би се десило када би сваки од бројева који се користе приликом цртања био помножен или подељен истим бројем.
- Цртеж ће се дупло смањити и помериће се ка горњем левом углу прозора.
- Тачно
- Цртеж ће се дупло смањити и остаће на истом месту.
- Покушај поново
- Цртеж ће остати исте величине и помериће се ка доњем десном углу прозора.
- Покушај поново
- Цртеж ће се дупло повећати и помериће се ка горњем левом углу прозора.
- Покушај поново
Q-161: Сви бројеви који се односе на координате и на величине у једном цртежу су подељени са 2. Како ће се тиме променити цртеж?
Множењем свих аргумената функција истим бројем, успешно скалирамо цртеж. Међутим, цртеж уједно бива померен, што није увек пожељно. Скалирање цртежа тако да се његов положај не промени генерално није једноставно, али ћемо у наставку видети како да цртеже направимо тако да их лако можемо и померати и скалирати.