Root /ArchiveAbout
()

Процедуры Circle, DrawCircle, FillCircle

Процедуры Circle, DrawCircle, FillCircle

Здравствуйте, читатели сайта progmatem.ru о программировании на паскале. На этой странице рассмотрим следующие три процедуры графического модуля GraphABC – Circle, DrawCircle, FillCircle, причем последние две в среде PascalABC отсутствуют. Но обо всем по порядку, и начнем с определения подпрограммы Circle(x,y,r).

Процедура Circle

**procedure** Circle(x,y,r: integer);

— Рисует заполненную окружность с центром (x, y) и радиусом r

Цвет линии окружности задается с помощью SetPenColor(c), ширина – SetPenWidth(w), цвет области круга – SetBrushColor(c). В PascalABC.Net параметр с имеет тип Color, в PascalABC – тип ColorType. Ширина, или толщина пера w – целое положительное число.

Вот как выглядит это на примере:

uses
  GraphABC;

var
  x, y, r: integer;

begin
  x := 250; y := 200; //координаты центра окружности
  r := 100; //радиус окружности
  SetBrushColor(ClRed); //цвет заполнения
  SetPenWidth(5); //толщина границы окружности
  SetPenColor(ClGreen); //цвет границы окружности
  Circle(x, y, r) { <-- заполненная окужность с 
   центром в точке (x, y) радиуса r }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clRed – красный **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clGreen – зеленый **procedure** Circle(x,y,r: integer);: Рисует заполненную окружность с центром (x,y) и радиусом r Заполненная окружность в PascalABC.Net

Важное замечание: если не устанавливать вручную свойства границы и области окружности, то задействуются умолчания: цвет границы – черный, толщирна пера – 1px, цвет области – белый.

uses
  GraphABC;

begin
  Circle(250, 200, 100)
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **procedure** Circle(x,y,r: integer);: Рисует заполненную окружность с центром (x,y) и радиусом r Заполненная окружность Circle в PascalABC.Net

Процедура DrawCircle

**procedure** DrawCircle(x,y,r: integer);

— Рисует окружность с центром (x, y) и радиусом r

Отличие процедуры DrawCircle от Circle в том, что первая рисует только линию окружности, не заполняя внутренней части. То есть попросту говоря – окружность пустая внутри. Напишем простенькую программу.

uses
  GraphABC;

var
  x, y, r: integer;

begin
  x := 300; y := 250; //координаты центра окружности
  r := 150; //радиус окружности
  SetPenColor(ClOrange); //цвет пера (окружн. в данном сл.)
  SetPenWidth(5); //толщина пера (толщина линии окружности)
  DrawCircle(x, y, r) { <-- окужность с центром в 
   точке (x, y) радиуса r }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clOrange – оранжевый **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** DrawCircle(x,y,r: integer);: Рисует окружность с центром (x,y) и радиусом r Незаполненная окружность DrawCircle в PascalABC.Net

А теперь продемонстрируем на примере, что процедура DrawCircle(x,y,r) действительно рисует незаполненную окружность в PascalABC.Net. Сначала программа рисут окружность Circle (строка 8 кода ниже), делая паузу на 2 секунды прорцедурой sleep(2000) в следующей строке. Наконец, в последней строке вызываем процедуру DrawCircle для создания незаполненной окружности. Запустите программу в PascalABC.Net и посмотрите результат:

uses
  GraphABC;

begin
  SetPenColor(ClOrange); //цвет пера (линия круга)
  SetBrushColor(clgreen); //цвет кисти (область круга)
  SetPenWidth(5); //толщина пера
  Circle(220, 200, 120);  { <-- рисуем заполненную окужность }
  sleep(2000); //пауза на 2 секунды
  SetPenColor(ClBlue); //цвет пера
  DrawCircle(330, 170, 90) { <-- рисуем незаполненную окужность }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clOrange – оранжевый **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clGreen – зеленый **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** Circle(x,y,r: integer);: Рисует заполненную окружность с центром (x,y) и радиусом r **procedure** Sleep(ms: integer);: Делает паузу на ms миллисекунд **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clBlue – синий **procedure** DrawCircle(x,y,r: integer);: Рисует окружность с центром (x,y) и радиусом r Демонстрация совместного использования Circle и DrawCircle в PascalABC.Net

Аналогичный вывод мы сделали на странице Процедуры DrawPolygon и FillPolygon по отношению к указанным подпрограммам, где демонстрировали использование закрашенного (заполненного) многоугольника Polygon и просто ломаной DrawPolygon. Здесь необходимо запомнить правило:

✎ Если в PascalABC.Net процедура графического модуля используется с приставкой Draw, то кисть Brush для закрашивания области здесь не используется. Это ясно из того, что одно из значений английского слова "draw" является "рисовать", то есть просто рисовать линию.

Процедура FillCircle

Наконец, подходим к последней процедуре FillCircle(...) этой группы подпрограмм, относящихся к окружности и кругу. В чем её отличие от предыдущих Circle и DrawCircle? Английское слово "fill" означает "заполнять", поэтому можно предположить, что данная процедура заполняет (закрашивает, зарисовывает) простаранство круга. Действительно:

**procedure** FillCircle(x,y,r: integer);

— Заполняет внутренность окружности с центром (x, y) и радиусом r

Приведем пример с окружностью закрашенной в розовый цвет. Вот программа:

uses
  GraphABC;

var
  x, y, r: integer; //x,y - коорд. центра, r - радиус

begin
  x := 250;
  y := 200;
  r := 100;
  SetBrushColor(ClPink); //цвет заполнения
  FillCircle(x, y, r) //процедура заполнения окружности
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clPink – розовый **procedure** FillCircle(x,y,r: integer);: Заполняет внутренность окружности с центром (x,y) и радиусом r Заполненная окружность FillCircle в PascalABC.Net

Особенность этой процедуры в том, что залитый таким образом круг не имеет границы, а поэтому перо Pen использовать не имеет смысла. Действительно, в следующей программе устанавливая толщину и цвет пера (5 и 6 строка кода), видим, что жёлтый круг все равно остается без границы:

uses
  GraphABC;

begin
  SetPenWidth(5); //толщина границы 5px
  SetPenColor(clGreen); //цвет границы - зеленый
  SetBrushColor(ClYellow); //цвет заполнения - жёлтый
  FillCircle(200, 150, 120); //процедура заполнения окружности
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clGreen – зеленый **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clYellow – жёлтый **procedure** FillCircle(x,y,r: integer);: Заполняет внутренность окружности с центром (x,y) и радиусом r Окружность с помощью FillCircle не имееет границы в PascalABC.Net

Вобщем, если нужно нарисовать круг и сразу его закрасить (залить), то используем Circle; если инужна окружность, то DrawCircle; если закрашенный круг без границ, то применяем FillCircle.

На этом все. Если есть вопросы или пожелания, то пишите в комментариях.