1. príklady


Posledná zmena: 13.10.2002

Banner Text 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