$$ \newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} \newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} \renewcommand{\mod}{\,\mathrm{mod}\,} \renewcommand{\div}{\,\mathrm{div}\,} \newcommand{\metar}{\,\mathrm{m}} \newcommand{\cm}{\,\mathrm{cm}} \newcommand{\dm}{\,\mathrm{dm}} \newcommand{\litar}{\,\mathrm{l}} \newcommand{\km}{\,\mathrm{km}} \newcommand{\s}{\,\mathrm{s}} \newcommand{\h}{\,\mathrm{h}} \newcommand{\minut}{\,\mathrm{min}} \newcommand{\kmh}{\,\mathrm{\frac{km}{h}}} \newcommand{\ms}{\,\mathrm{\frac{m}{s}}} \newcommand{\mss}{\,\mathrm{\frac{m}{s^2}}} \newcommand{\mmin}{\,\mathrm{\frac{m}{min}}} \newcommand{\smin}{\,\mathrm{\frac{s}{min}}} $$

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.

Цртање правих линија и многоуглова

Функције за цртање правих линија и многоуглова сличне су функцијама за цртање правоугаоника, елипси и кругова, које смо већ упознали. Параметри типа Pen, Brush и Color се и овде користе, а могу се користити и тачке, то јест објекти типа Point или PointF.

Цртање линије

За цртање линије се користи неколико функција са заједничким именом DrawLine, које су такође методе класе Graphics.

  • DrawLine(Pen p, PointF a, PointF b)

  • DrawLine(Pen p, Point a, Point b)

  • DrawLine(Pen p, Int32 x1, Int32 y1, Int32 x2, Int32 y2)

  • DrawLine(Pen p, float x1, float y1, float x2, float y2)

Као и код других Draw… метода, први параметар је оловка, помоћу које задајемо боју и дебљину линије. Наредни параметри на различите начине задају крајеве дужи. Крајеви дужи се могу задати као две тачке (објекти типа Point или PointF) или помоћу два пара координата (укупно 4 броја), а координате могу бити целобројне или реалне (float) и представљају вредности у пикселима. Тако на пример, помоћу следећих наредби

Graphics g = e.Graphics;
Pen olovka = new Pen(Color.Blue, 2);
g.DrawLine(olovka, 20, 10, 40, 30);

исцртава се плава линија дебљине 2 пиксела од тачке \((20, 10)\) до тачке \((40, 30)\).

../_images/drawing_line.png

Цртање и бојење многоугла

За цртање многоугаоних линија се користе методе

  • DrawPolygon(Pen p, PointF[] pts)

  • DrawPolygon(Pen p, Point[] pts)

а за цртање многоуглова попуњених бојом методе

  • FillPolygon(Brush b, Point[] pts)

  • FillPolygon(Brush b, PointF[] pts)

(постоје и други облици методе FillPolygon, али се њима овде нећемо бавити).

Први параметар је оловка за функцију DrawPolygon, а четка за функцију FillPolygon, а ти објекти су нам већ познати. Други параметар је низ тачака које представљају темена многоугла који цртамо. На пример,

new Point[] { new Point(50, 250), new Point(150, 150), new Point(250, 250) }

представља низ од 3 тачке, који се може појавити као параметар функција за цртање многоуглова. Тако се, на пример, помоћу следећих наредби црта троугао обојен бојом \((0, 100, 36)\). Темена троугла су \((50, 100)\), \((150, 150)\) и \((150, 50)\).

Graphics g = e.Graphics;
Brush zelenaCetka = new SolidBrush(Color.FromArgb(0, 100, 36));
g.FillPolygon(zelenaCetka, new Point[] { new Point(50, 250), new Point(150, 150), new Point(250, 250) });
../_images/drawing_polygon.png

Цртежи по упутствима

Да бисте боље упамтили и провежбали употребу функција за цртање, покушајте да напишете следеће програме.

Задатак - Страшило: Нацртајте страшило на белој позадини. Оно се састоји од следећих делова:

  • глава: црна кружна линија дебљине 6, са центром у тачки (150, 70), полупречника 50

  • тело: црна права линија дебљине 6, од тачке (150, 120) до тачке (150, 300)

  • руке: црна права линија дебљине 6, од тачке (80, 170) до тачке (220, 170)

  • лева нога: црна права линија дебљине 6, од тачке (150, 300) до тачке (90, 480)

  • десна нога: црна права линија дебљине 6, од тачке (150, 300) до тачке (210, 480)

../_images/drawing_scarecrow.png

Задатак - Јелка: Нацртајте јелку на белој позадини. Она се састоји од следећих делова:

  • стабло: правоугаоник попуњен бојом (97, 26, 9), величине 40 х 50, са горњим левим теменом у тачки (130, 250)

  • горњи део крошње: троугао попуњен бојом (0, 100, 36), са теменима (50, 250), (150, 150) и (250, 250)

  • средњи део крошње: троугао попуњен бојом (0, 100, 36), са теменима (75, 200), (150, 100) и (225, 200)

  • доњи део крошње: троугао попуњен бојом (0, 100, 36), са теменима (100, 150), (150, 50) и (200, 150)

../_images/drawing_tree.png

Задатак - Кућица: Нацртајте кућицу као на слици испод. Слика се састоји од следећих делова:

  • зидови куће: жути правоугаоник, ширине 180, висине 160, са горњим левим теменом у тачки (60, 120)

  • кров: црвени троугао са теменима у тачкама (60, 120), (150, 20), (240, 120)

  • леви прозор: квадрат боје SkyBlue (небо-плава), странице 50, са горњим левим теменом у тачки (80, 140)

  • водоравна лајсна на левом прозору: црна линија од тачке (80, 165) до тачке (130, 165)

  • усправна лајсна на левом прозору: црна линија од тачке (105, 140) до тачке (105, 190)

  • десни прозор: квадрат боје SkyBlue (небо-плава), странице 50, са горњим левим теменом у тачки (170, 140)

  • водоравна лајсна на десном прозору: црна линија од тачке (170, 165) до тачке (220, 165)

  • усправна лајсна на десном прозору: црна линија од тачке (195, 140) до тачке (195, 190)

  • врата: браон правоугаоник, ширине 60, висине 80, са горњим левим теменом у тачки (120, 200)

../_images/drawing_house.png

Цртежи изненађења

Да бисте у задацима који следе видели цртеж, потребно је да напишете тражене наредбе и покренете свој програм.

изненађење 1 - спојите тачке: У низу tacke су дата темена многоугла. Нацртајте на позадини боје „darkgreen” тај многоугао, попуњен бојом „khaki”.

Point[] tacke = new Point[] {
    new Point(40, 208), new Point(40, 107), new Point(88, 82), new Point(134, 13),
    new Point(128, 9), new Point(134, 13), new Point(137, 11), new Point(128, 6),
    new Point(160, 25), new Point(159, 28), new Point(136, 28), new Point(98, 101),
    new Point(100, 106), new Point(101, 207), new Point(97, 207), new Point(95, 164),
    new Point(83, 121), new Point(85, 128), new Point(54, 128), new Point(55, 119),
    new Point(44, 165), new Point(44, 208)
};

изненађење 2:

Бојом „limegreen” исцртајте:

  • Пуну елипсу која је уписана у правоугаоник, чије је горње лево теме (75, 100), ширина му је 150, а висина 180;

  • Линију дебљине 6, од тачке (130, 110) до тачке (120, 20);

  • Још једну линију дебљине 6, од тачке (170, 110) до тачке (180, 20);

  • Попуњен круг полупречника 10 пиксела, са центром у тачки (120, 20);

  • Попуњен круг полупречника 10 пиксела, са центром у тачки (180, 20);

Црном бојом исцртајте још две пуне елипсе, и то:

  • једну уписану у правоугаоник чије је горње лево теме (110, 140), ширина му је 30, а висина 50;

  • другу уписану у правоугаоник чије је горње лево теме (160, 140), ширина му је 30, а висина 50;