ВВЕРХ
ВНИЗ

Процедуры 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 – целое положительное число.

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

Код PascalABC, PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
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.

Заполненная окружность в PascalABC.Net

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

Код PascalABC, PascalABC.Net
1  
2  
3  
4  
5  
6  
uses
  GraphABC;

begin
  Circle(250, 200, 100)
end.

Заполненная окружность Circle в PascalABC.Net

Процедура DrawCircle

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

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

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

Код PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
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.

Незаполненная окружность DrawCircle в PascalABC.Net

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

Код PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
uses
  GraphABC;

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

Демонстрация совместного использования 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

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

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
uses
  GraphABC;

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

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

Заполненная окружность FillCircle в PascalABC.Net

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

Код Pascal
1  
2  
3  
4  
5  
6  
7  
8  
9  
uses
  GraphABC;

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

Окружность с помощью FillCircle не имееет границы в PascalABC.Net

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

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


Яндекс.Метрика