| Posledná zmena: 13.10.2002

grafika

## Grafická plocha

- vo všetkých úlohách predpokladáme, že v globálnej premennej g je priradený "Canvas" grafickej plochy (Image1), t.j. platí g:=Image1.Canvas;
- ďalej predpokladáme, že na formulári je tlačidlo Button1 a väčšina úloh je obsahom procedúry TForm1.Button1Click
- v niektorých príkladoch sa využíva nový grafický príkaz Polygon, ktorý má takéto volanie:
  g.Polygon([Point(x1,y1),Point(x2,y2),Point(x3,y3),...])
  a jeho výsledkom je uzavretý N-uholník, ktorý môže byž vyfarbený podľa g.Brush

výpis čísel
vypíšte čísla 1..20 na uhlopriečku zadefinovanej grafickej plochy |
    var
      i:integer;
    begin
      for i:=1 to 20 do
        g.TextOut(i*16,i*12,IntToStr(i));
    end;
výpis čísel
vypíšte čísla 1..100 do štvorca 10x10

- po stĺpcoch
- po riadkoch

    var
      i,j,c:integer;
    begin
      c:=0;
      for j:=1 to 10 do
        for i:=1 to 10 do begin
          c:=c+1;
          g.TextOut(j*16,i*12,IntToStr(c));
      //  g.TextOut(i*16,j*12,IntToStr(c));
        end;
    end;

výpis textov na náhodné pozície
na každé stlačenie tlačidla sa napíše na náhodnej pozícii modré slovo Pascal a červené Delphi bez randomize sa program správa stále rovnako, t.j. slová sa vždy po spustení programu vypisujú na rovnakých pozíciách |
    begin
      randomize;
      g.Font.Heigh:=20;
      g.Font.Color:=clRed;
      g.TextOut(random(300),random(250),’Delphi’);
      g.Font.Color:=clBlue;
      g.TextOut(random(300),random(250),’Pascal’);
    end;
výpis textu s tieňom
vypíšte modré slová 'I love Delphi' so sivým tieňom; vytvorte konštantu const veta = 'I love Delphi'; nezabudnite urobiť priesvitné pozadie písmen predĺžte tieň |
    const
      veta='I love Delphi';
    var
      i,x,y:integer;
    begin
      x:=10; y:=100;
      g.Brush.Style:=bsClear;
      g.Font.Height:=60;
      g.Font.Name:='Arial';
      g.Font.Style:=[fsBold];
      g.Font.Color:=clLtGray;
      g.TextOut(x+3,y-3,veta);
      {for i:=1 to 15 do
        g.TextOut(x+i,y-2*i,veta);}
      g.Font.Color:=clBlue;
      g.TextOut(x,y,veta);
    end;
rovnostranný trojuholník
nakresliť rovnostranný trojuholník so stranou a; treba použiť MoveTo a LineTo |
    const
      a=100; vyska=round(a*0.877);
    var
      x,y:integer;
    begin
      x:=100; y:=300;
      g.MoveTo(x,y); g.LineTo(x+a div 2,y-vyska);
      g.LineTo(x+a,y);
      g.LineTo(x,y);
    end;
vyfarbený rovnostranný trojuholník
nakresliť vyfarbený rovnostranný trojuholník so stranou a; treba použiť Polygon |
    const
      a=100; vyska=round(a*0.877);
    var
      x,y:integer;
    begin
      x:=100; y:=300;
      g.Brush.Color:=clBlue;
      g.Polygon([Point(x,y),Point(x+a div 2,y-vyska),
                 Point(x+a,y)]);
    end;
pyramída
nakresliť n-poschodovú trojuholníkovú pyramídu - pomocou MoveTo a LineTo veľkosť strany trojuholníka je a

- kreslí sa metódou cik-cak po poschodiach

    const
      n=10; a=50; vyska=round(a*0.877);
    var
      i,j,x,xx,y:integer;
    begin
      y:=Image1.Height-10; x:=10;
      for i:=n downto 1 do begin
        g.MoveTo(x,y); xx:=x;
        for j:=1 to i do begin
          g.LineTo(xx+a div 2,y-vyska);
          xx:=xx+a; g.LineTo(xx,y);
        end;
        g.LineTo(x,y); y:=y-vyska; x:=x+a div 2;
      end;
    end;

dvojfarebná pyramída
nakresliť n-poschodovú trojuholníkovú pyramídu - farebné trojuholníky kreslite pomocou Polygon |
    const
      n=10; a=50; vyska=round(a*0.877);
    var
      i,j,x,xx,y:integer;
    begin
      y:=Image1.Height-10; x:=10;
      g.Brush.Color:=clYellow;
      g.Polygon([Point(x,y),
                 Point(x+n*a div 2,y-n*vyska),
                 Point(x+n*a,y)]);
      g.Brush.Color:=clBlue;
      for i:=n downto 1 do begin
        xx:=x;
        for j:=1 to i do begin
          g.Polygon([Point(xx,y),
                     Point(xx+a div 2,y-vyska),
                     Point(xx+a,y)]);
          xx:=xx+a;
        end;
        y:=y-vyska; x:=x+a div 2;
      end;
    end;
rôzne farebné útvary
zadefinovať tri tlačidlá, ktoré na náhodné pozície nakreslia:

- červený štvorec
- žltý rovnostranný trojuholník
- modrý kruh

všetky útvary sú veľké podľa a

    const
      a=100;

    procedure TForm1.Button1Click(Sender: TObject);
    var
      x,y:integer;
    begin
      x:=random(Image1.Width);
      y:=random(Image1.Height);
      g.Brush.Color:=clRed;
      g.Rectangle(x,y,x+a,y+a);
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
      x,y:integer;
    begin
      x:=random(Image1.Width);
      y:=random(Image1.Height);
      g.Brush.Color:=clYellow;
      g.Polygon([Point(x,y),
                 Point(x+a div 2,y-round(a*0.877)),
                 Point(x+a,y)]);
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    var
      x,y:integer;
    begin
      x:=random(Image1.Width);
      y:=random(Image1.Height);
      g.Brush.Color:=clBlue;
      g.Ellipse(x,y,x+a,y+a);
    end;

náhodné farebné útvary v štvorcovej sieti
opraviť predchádzajúci príklad, aby boli farebné útvary náhodne generované len štvorcovej sieti so štvorčekom veľkosti a

- ukážeme len pre prvý útvar - pre ostatné je to analogické

    procedure TForm1.Button1Click(Sender: TObject);
    var
      x,y:integer;
    begin
      x:=a*random(Image1.Width div a);
      y:=a*random(Image1.Height div a);
      g.Brush.Color:=clRed;
      g.Rectangle(x,y,x+a,y+a);
    end;

priebeh funkcie
program nakreslí priebeh funkcie sinus |
    var
      i:integer;
    begin
      g.MoveTo(0,200);
      for i:=1 to Image1.Width-1 do
        g.LineTo(i,round(200-150*sin(i*pi/180)));
    end;
kružnica
pomocou funkcií sin a cos a príkazov MoveTo a LineTo nakreslite kružnicu |
    var
      x,y,r,i:integer;
    begin
      x:=200; y:=200; r:=150;
      g.MoveTo(x+r,y);
      for i:=1 to 360 do
        g.LineTo(x+round(r*cos(i*pi/180)),
                 y-round(r*sin(i*pi/180)));
    end;
sústredné kruhy
nakresliť 10 sústredných kruhov s polomermi 10, 20, 30, ... 100

- každý kruh bude vyfarbený náhodnou farbou

    var
      i:integer;
    begin
      for i:=10 downto 1 do begin
        g.Brush.Color:=
            RGB(random(256),random(256),random(256));
        g.Ellipse(250-20*i,250-20*i,250+20*i,250+20*i);
      end;
    end;

machule
vykresliť na obrazovku 100 kruhov náhodnej farby – obvod aj výplň majú rovnaké, kruhy majú veľkosti 1 až 100 |
    var
      x,y,r,i:integer;
    begin
      for i:=1 to 100 do begin
        g.Pen.Color:=
             RGB(random(256),random(256),random(256));
        g.Brush.Color:=g.Pen.Color;
        x:=random(Image1.Width);
        y:=random(Image1.Height);
        r:=random(100)+1;
        g.Ellipse(x-r,y-r,x+r,y+r);
      end;
    end;

© 2002 AB, KVI
blaho@fmph.uniba.sk