Root /ArchiveAbout
()

Процедуры ClosedCurve, FillClosedCurve

Процедуры ClosedCurve, FillClosedCurve

Здравствуйте! Сегодня изучим, как в PascalABC.Net нарисовать замкнутую кривую линию процедурой ClosedCurve, а также заполнить цветом замкнутую кривую с помощью процедуры FillClosedCurve. Эта статья является продолжением материала Замкнутая незаполненная кривая DrawClosedCurve в PascalABC.Net, поэтому рекомендую прочитать вначале его. Как видно из названия последней ссылки, в той статье речь шла о рисовании с помощь паскаля незамкнутой кривой, а здесь поговорим о замкнутых.

Процедура ClosedCurve

Как всегда, вначале дадим определение, а потом рассмотрим примеры.

**procedure** ClosedCurve(points: **array of** Point);

— Рисует заполненную замкнутую кривую по точкам, координаты которых заданы в массиве points

Здесь видно из названия, что переменной процедуры ClosedCurve является массив точек типа Point. Что это значит? Это означает, что для задания замкнутой кривой необходимо задать координаты точек, через которые она будет проходить. Потом в конце просто вызывается процедура, которая нарисует замкнутую кривую с заданными узловыми точками.

uses
  GraphABC;

var
  P: array of point;

begin
  SetWindowSize(400, 300); //размеры окна
  SetLength(P, 4); //количество точек кривой
  p[0].X := 100; p[0].Y := 50;  //1-я точка
  p[1].X := 350; p[1].Y := 100; //2-я точка
  p[2].X := 200; p[2].Y := 250; //3-я точка
  p[3].X := 70;  p[3].Y := 200; //4-я точка
  SetPenColor(clRandom); //цвет границы кривой
  SetPenWidth(3); //толщина границы кривой
  SetBrushColor(clRandom); //цвет заливки кривой
  ClosedCurve(P) { <-- Рисуем замкнутую заполненную 
кривую по точкам,координаты которых заданы в массиве P }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

Замкнутая кривая ClosedCurve в PascalABC.Net

Разберем кратко содержание кода программы.

А теперь напишем такую же программу, но которая будет выводить одину за другой случайную замкнутую линию, залитую случайным цветом. Проходить это будет в цикле до тех пор, пока вы его не остановите. К стати, чтобы запустить бесконечный цикл с предусловием
while [условие входа в цикл] do begin [тело цикла] end,
нужно условии указать логическое True, а для бесконечного цикла
repeat [тело цикла] until [условие выхода из цикла]
в условии указываем False
.

Запускаем программу и смотрим на картинки.

uses
  GraphABC;

var
  P: array of point;

begin
  //SetWindowSize(400, 300); //размеры окна (не обязательно)
  LockDrawing; //блокировка рисования
  while true do begin
    var n := random(5, 50); //количество вершин случайно - от 5 до 50
    SetLength(P, n); //уснанавливаем размер массива равным n
    randomize;
    { Инициализация случайных координат точек: }
    for var i := 0 to n - 1 do begin
      p[i].X := random(25, WindowWidth - 25);
      p[i].Y := random(25, WindowHeight - 25)
    end;
    SetPenColor(clRandom); //цвет границы замкнутой кривой
    SetPenWidth(3); //толщина границы кривой
    SetBrushColor(clRandom); //цвет заливки кривой
    ClosedCurve(P); //вызываем процедуру для рисования кривой
    ReDraw; //перерисовываем содержимое графического окна
    sleep(2000); //делаем паузу на 2 секунды
    ClearWindow //очищаем окно белым цветом
  end
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

А теперь сравните с похожими рисунками, но нарисованными с помощью FillPolygon в статье Процедуры DrawPolygon и FillPolygon. Правда, отличие тех рисунков от указанных выше состоит в отсутствии границы области, так как для этого нужно использовать процеруру, которую мы рассмотрим ниже.

Процедура FillClosedCurve

**procedure** FillClosedCurve(points: **array of** Point);

— Заполняет замкнутую кривую по точкам, координаты которых заданы в массиве points

Эта процедура только заполняет цветом кривую, но не рисует самой линии.

uses
  GraphABC;

var
  P: array of point;

begin
  SetWindowSize(400, 300); //размеры окна
  SetLength(P, 4); //количество точек кривой
  p[0].X := 100; p[0].Y := 50;  //1-я точка
  p[1].X := 350; p[1].Y := 100; //2-я точка
  p[2].X := 200; p[2].Y := 250; //3-я точка
  p[3].X := 70;  p[3].Y := 200; //4-я точка
  SetBrushColor(clRandom); //цвет заливки кривой
  FillClosedCurve(P) { <-- Заполняем замкнутую 
  кривую по точкам из массива P }
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

Заполнение замкнутой кривой FillClosedCurve в PascalABC.Net

Как видно из рисунка, он отличается от картинки выше только тем, что у него отсутствует граница. Так и должно быть, это и есть главное отличие процедуры ClosedCurve (замкнутая кривая с границей) от FillClosedCurve (заполнение замкнутой кривой).

Приведем ещё один приер. Нарисуем сначала линию с помощью процедуры DrawClosedCurve (см. статью), а потом заполним её цветом процедурой FillClosedCurve. Последовательность такова: сначала рисуется линия, а потом через 2 секунды (процедура sleep) по тем же точкам заполняем данную кривую цветом. Комментарии все в коде программы.

uses
  GraphABC;
  
const
  n = 10;
  
var
  points: array of point;
  
begin
  SetWindowSize(400, 300); //размеры окна
  SetLength(points, n); //количество точек кривой
  randomize;
  { Вычисляем случайные координаты точек: }
  for var i := 0 to n - 1 do begin
    points[i].X := random(20, Window.Width - 20);
    points[i].Y := random(20, Window.Height - 20);
  end;

  { Рисуем линию: }
  SetPenWidth(2); //толщина линии
  SetPenColor(clred); //цвет линии
  DrawClosedCurve(points); //рисуем саму линию
  
  sleep(2000); //пауза на 2 секунды
  
  { Заливаем линию цветом: }
  SetBrushColor(Cllime); //цвет заливки
  FillClosedCurve(points); //вызываем процедуру для заливки кривой
end.

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

**unit** GraphABC;: Модуль предоставляет константы, типы, процедуры, функции и классы для рисования в графическом окне

На этом все. Пишите в комментариях, спрашивайте.