Приветствую постоянных читателей сайта программирование и математика! На этой странице рассмотрим следующие три процедуры графического модуля PascalABC.Net: Ellipse, DrawEllipse и FillEllipse, – все они предназначены для рисования эллипса в том или ином виде. Последние две подпрограммы отсутствуют в простом PascalABC. Статья является гармоническим продолжением предыдущего материала, где мы говорили об окружности и круге.
Как всегда, начнем с определения самой первой из них.
✎ **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)
✎ **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)
Заметим, что предыдущий код можно сократить до такого:
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)
✎ **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)
Итак, имеем в остатке: если вы хотите нарисовать залитый эллипс, то используйте процедуту Ellipse; если нужна только граница эллипса, то DrawEllipse; а при необходимости создать закрашенный эллипс без границ – смело используйте FillEllipse.
На этом коротком обзоре процедур паскаля связанных с эллипсом заканчиваем. Будут вопросы, комментарии, предложения улучшить статью или что-либо ещё, то спрашивайте, буду рад ответить.