Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Алгоритм Брезенхэма - Рисование окружностей23 января 2011Оглавление: 1. Алгоритм Брезенхэма 2. Рисование линий 3. Рисование окружностей Также существует алгоритм Брезенхэма для рисования окружностей. По методу построения он похож на рисование линии. В этом алгоритме строится дуга окружности для первого квадранта, а координаты точек окружности для остальных квадрантов получаются симметрично. На каждом шаге алгоритма рассматриваются три пикселя, и из них выбирается наиболее подходящий путём сравнения расстояний от центра до выбранного пикселя с радиусом окружности. // R - радиус, X1, Y1 - координаты центра int x := 0 int y := R int delta := 2 - 2 * R int error := 0 while drawpixel drawpixel drawpixel drawpixel error = 2 * - 1 if &&) delta += 2 * ++x + 1 continue error = 2 * - 1 if &&) delta += 1 - 2 * --y continue x++ delta += 2 * y--
void drawCircle { int x = 0; int y = radius; int delta = 2 - 2 * radius; int error = 0; while { setPixel; setPixel; setPixel; setPixel; error = 2 * - 1; if { ++x; delta += 2 * x + 1; continue; } error = 2 * - 1; if { --y; delta += 1 - 2 * y; continue; } ++x; delta += 2 * ; --y; } } Для Delphi 7 Edit1: TEdit; Edit2: TEdit; Button1: TButton; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; { Объявляем процедуру "DrawCircle", реализующая алгоритм Брезенхема для рисования окружности } procedure DrawCircle; procedure Button1Click; private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DrawCircle; var x,y,error,delta : integer; begin InvalidateRect; //Очистка Canvas, необходимая для затирания созданных кругов x := 0; y := R; delta := ; error := 0; while y >= 0 do begin Canvas.Pixels := clBlack; Canvas.Pixels := clBlack; Canvas.Pixels := clBlack; Canvas.Pixels := clBlack; error := 2 * - 1; if and ) then begin inc; delta := delta + ; continue; end; error := 2 * - 1; if and ) then begin dec; delta := delta + ; continue; end; inc; delta := delta + ); dec; end; end; procedure TForm1.Button1Click; begin { Здесь получаем необходимые данные из Edit-ов, содержащих информацию для построения окружности по алгоритму Брезенхема, а именно координаты центра окружности и радиус, реализуем их в процедуру DrawCircle } DrawCircle,StrToInt, StrToInt); end; Модифицированный пример из книги Г.Шилдта "Си для профессиональных программистов" /* Вспомогательная функция, печатает точки, определяющие окружность */ void plot_circle { mempoint; mempoint; mempoint; mempoint; } /* Вычерчивание окружности с использованием алгоритма Брезенхама */ void circle { int x,y,delta; x = 0; y = radius; delta=3-2*radius; while { plot_circle; plot_circle; if delta+=4*x+6; else { delta+=4*+10; y--; } x++; } if plot_circle; } Просмотров: 9542
|