Продемонстрировать скорость построения окружности двумя алгоритмами. Целочисленным алгоритмом и алгоритмом, основанным на уравнении окружности с использованием вещественных чисел. В программе предусмотрено две кнопки, по нажатию на первую окно заполняется окружностями построенными по уравнению окружности с использованием вещественных чисел, на вторую окно заполняется окружностями целочисленным алгоритмом. var Form1: TForm1; xarray : Array[1..1000] of Integer; yarray : Array[1..1000] of Integer; i,j,k,l,x,y,z,i1,j1,k1,cnt,minn,maxx,a1,b1,c1: Integer; s,s1,s2,s3 : Double; dx,dy,incr1,incr2,d,xend: integer; str :String; implementation { TForm1 } //запуск алгоритма построения окружности по уравнению с использованием вещественных чисел. procedure TForm1.Button1Click(Sender: TObject); begin PaintBox1.Canvas.Rectangle(0,0,PaintBox1.Width,PaintBox1.Height); a1:=5; b1:=5; c1:=4; while a1<PaintBox1.Width-10 do begin while b1<PaintBox1.Height do begin Circle(a1,b1,c1); b1:=b1+5; end; b1:=5; a1:=a1+5; end; end; //запуск построения окружности целочисленным алгоритмом procedure TForm1.Button2Click(Sender: TObject); begin PaintBox1.Canvas.Rectangle(0,0,PaintBox1.Width,PaintBox1.Height); a1:=5; b1:=5; c1:=4; while a1<PaintBox1.Width-10 do begin while b1<PaintBox1.Height do begin Circle1(a1,b1,c1); b1:=b1+5; end; b1:=5; a1:=a1+5; end; end; //процедура строит восемь точек окружности имея координаты всего одной.(Благодаря этому можно рисовать только 1/8 окружности) procedure TForm1.Circle_Pixel(x0,y0,x,y: Integer); begin PaintBox1.Canvas.Pixels[x0 + x, y0 + y]:=clred; PaintBox1.Canvas.Pixels[x0 + y, y0 + x]:=clred; PaintBox1.Canvas.Pixels[x0 - y, y0 + x]:=clred; PaintBox1.Canvas.Pixels[x0 - x, y0 + y]:=clred; PaintBox1.Canvas.Pixels[x0 - x, y0 - y]:=clred; PaintBox1.Canvas.Pixels[x0 - y, y0 - x]:=clred; PaintBox1.Canvas.Pixels[x0 + y, y0 - x]:=clred; PaintBox1.Canvas.Pixels[x0 + x, y0 - y]:=clred; end; //алгоритм построения окружности с помощью вещественных чисел и уравнения окружности procedure Tform1.Circle (x0,y0,R : integer); begin for x:=0 to round(R/sqrt(2) ) do begin y:= round((sqrt(sqr(R)-sqr(x)))); Circle_Pixel (x0, y0, x, y); end; end; //алгоритм построения окружности с помощью целочисленных чисел. procedure Tform1.Circle1 (x0,y0,R : integer); begin d:=3-2*y; x:=0; y:=R; while(x <= y) do begin Circle_Pixel (x0, y0, x, y); if d<0 then d:=d+4*x+6 else begin d:=d+4*(x-y)+10; dec(y) end; inc(x) end; end;
Ключевые слова:
Построение окружности, скорость построения ,алгоритм построения окружности
|
|||||||