ВВЕРХ
ВНИЗ

Процедуры 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:

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

Заполненный эллипс с границей в Pascal

Процедура DrawEllipse

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

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

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

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

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

Граница эллипса в Pascal

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

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

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

Согласитесь, проще выглядит?

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

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

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

DrawEllipse не перекрывает собой фигуру

Процедура FillEllipse

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

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

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

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

Заполняем эллипс в Pascal

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

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


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