Root /ArchiveAbout
()

Процедуры Ellipse, DrawEllipse, FillEllipse

Процедуры Ellipse, DrawEllipse, FillEllipse

Приветствую постоянных читателей сайта программирование и математика! На этой странице рассмотрим следующие три процедуры графического модуля PascalABC.Net: Ellipse, DrawEllipse и FillEllipse, – все они предназначены для рисования эллипса в том или ином виде. Последние две подпрограммы отсутствуют в простом PascalABC. Статья является гармоническим продолжением предыдущего материала, где мы говорили об окружности и круге.

Как всегда, начнем с определения самой первой из них.

Процедура Ellipse

**procedure** Ellipse(x1,y1,x2,y2: integer);

— Рисует заполненный эллипс, ограниченный прямоугольником, заданным координатами противоположных вершин (x1, y1) и (x2, y2)

То есть процедура Ellipse рисует эллипс и сразу его заливает (закрашивает) цветом. Если не задавать отдельно параметры для границы (цвет и толщина) и области (цвет), то эллипс выйдет по-умолчанию с черной границей толщиной 1px и белой раскраской внутри. Но мы зададим свои цвета и толщину границы, в результате получим такой код для рисования эллипса в PascalABC или PascalABC.Net:

uses
  GraphABC;

var
  x1, y1, x2, y2: integer;

begin
  SetPenWidth(5); //толщина линии границы
  SetPenColor(ClGreen); //цвет границы эллипса
  SetBrushColor(ClRed); //цвет заполнения
  x1 := 100; y1 := 80; //координаты левой верхней вершины
  x2 := 500; y2 := 300; //координаты правой нижней вершины
  Ellipse(x1, y1, x2, y2) { <-- рисуем ЗАПОЛНЕННЫЙ эллипс, 
  ограниченный прямоугольником с координатами 
  противоположных вершин (x1, y1) и (x2, y2) }
end.

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

Процедура DrawEllipse

**procedure** DrawEllipse(x1,y1,x2,y2: integer);

— Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1, y1) и (x2, y2)

В определении сказано, что DrawEllipse рисует только границу эллипса. Что это означает? Это значит, что такой эллипс будет как бы "полым" внутри, поэтому задавать цвет кисти Brush здесь бессмысленно. Если что-то предварительно нарисовать, а потом сверху эллипс DrawEllipse, то пространство элипса не закроет собой фигуру – нарисуется только линия.

Вот примерный код на PascalABC.Net:

uses
  GraphABC;
  
var
  x1, y1, x2, y2: integer;

begin
  SetPenWidth(3); //толщина линии границы
  SetPenColor(ClRed); //цвет линии границы
  x1 := 100; y1 := 80; //координаты левой верхней вершины
  x2 := 500; y2 := 300; //координаты правой нижней вершины
  DrawEllipse(x1, y1, x2, y2) { <-- рисуем ГРАНИЦУ эллипса,
  ограниченного прямоугольником с координатами 
  противоположных вершин (x1, y1) и (x2, y2) }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clRed – красный **procedure** DrawEllipse(x1,y1,x2,y2: integer);: Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) Граница эллипса в Pascal

Заметим, что предыдущий код можно сократить до такого:

uses
  GraphABC;

begin
  SetPenWidth(3); //толщина линии границы
  SetPenColor(ClRed); //цвет линии границы
  DrawEllipse(100, 80, 500, 300)
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clRed – красный **procedure** DrawEllipse(x1,y1,x2,y2: integer);: Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) Согласитесь, проще выглядит?

А теперь покажем, что эллипс созданный с помощью DrawEllipse действительно незалит. Для этого нарисуем что-нибуть, например, залитый круг процедурой FillCircle(x,y,r), а сверху незалитый эллипс, который появится через 2 секунды. Смотрим, что у нас получислось:

uses
  GraphABC;

begin
  SetBrushColor(clBlue); //цвет круга
  FillCircle(200, 150, 100); //заливаем окружность
  sleep(2000); //пауза на 2 секунды
  SetPenWidth(5); //толщина границы эллипса
  SetPenColor(ClRed); //цвет границы эллипса
  DrawEllipse(20, 90, 380, 210) //рисуем границу эллипса
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clBlue – синий **procedure** FillCircle(x,y,r: integer);: Заполняет внутренность окружности с центром (x,y) и радиусом r **procedure** Sleep(ms: integer);: Делает паузу на ms миллисекунд **procedure** SetPenWidth(Width: integer);: Устанавливает ширину текущего пера **procedure** SetPenColor(c: Color);: Устанавливает цвет текущего пера Цвет: clRed – красный **procedure** DrawEllipse(x1,y1,x2,y2: integer);: Рисует границу эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) DrawEllipse не перекрывает собой фигуру

Процедура FillEllipse

**procedure** FillEllipse(x1,y1,x2,y2: integer);

— Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1, y1) и (x2, y2)

Как себе представить эллипс нарисованный с помощью процедуры **FillEllipse**? Очень просто: это эллипс, у которого нет границы. Поэтому здесь перо Pen не используется (для цвета и толщины границы). Вот код:

uses
  GraphABC;

var
  x1, y1, x2, y2: integer;

begin
  SetBrushColor(ClRed); //цвет заполнения
  x1 := 100; y1 := 80; //координаты левой верхней вершины
  x2 := 500; y2 := 300; //координаты правой нижней вершины
  FillEllipse(x1, y1, x2, y2) { <-- заполняем внутренность
  эллипса, ограниченного прямоугольником с координатами 
  противоположных вершин (x1, y1) и (x2, y2) }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне **type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **procedure** SetBrushColor(c: Color);: Устанавливает цвет текущей кисти Цвет: clRed – красный **procedure** FillEllipse(x1,y1,x2,y2: integer);: Заполняет внутренность эллипса, ограниченного прямоугольником, заданным координатами противоположных вершин (x1,y1) и (x2,y2) Заполняем эллипс в Pascal

Итак, имеем в остатке: если вы хотите нарисовать залитый эллипс, то используйте процедуту Ellipse; если нужна только граница эллипса, то DrawEllipse; а при необходимости создать закрашенный эллипс без границ – смело используйте FillEllipse.

На этом коротком обзоре процедур паскаля связанных с эллипсом заканчиваем. Будут вопросы, комментарии, предложения улучшить статью или что-либо ещё, то спрашивайте, буду рад ответить.