Ламана polyline і замкнута polygon

На попередній сторінці Лінії в паскаль ми розглядали побудова послідовних прямих ліній, використовуючи процедури MoveTo і LineTo. Але знаючи координати вершин ламаної (замкнутої чи ні), того ж можна добитися за допомогою процедур PolyLine і Polygon. Яким чином, і яка відмінність між цими підпрограмами?

Процедура PolyLine малювання ламаної лінії

✎ PolyLine - процедура. малює ламану лінію по точках, координати яких задані в масиві points. У PascalABC і PascalABC.Net ця процедура задається трохи по-різному.

Спочатку ми визначимо PolyLine в PascalABC і PascalABC.Net, а нижче наведемо приклади.

PolyLine в PascalABC:

procedure PolyLine (var points: array [1..n] of Point; n: integer);

- Будує ламану по n точкам, координати яких задані в масиві a елементів типу Point, що задається за допомогою запису:

PolyLine в PascalABC.Net:

procedure PolyLine (points: array of Point);

- Малює ламану по точках, координати яких задані в масиві points. Тобто points - це динамічний масив. для якого потрібно попередньо задати розмір, а тип Point описувати не потрібно (це вбудований тип PascalABC.Net).

Тут видно, що в PascalABC.Net процедура PolyLine має тільки один параметр - власне сам масив точок points (на відміну від простого PascalABC, де є ще другий параметр - розмір масиву, або кількість точок). Ще потрібно пам'ятати, що в динамічних масивах нумерація починається з 0.

Побудуємо приклад ламаної лінії з масиву точок PolyLine в PascalABC:

Те саме отримаємо при використанні MoveTo (x, y) і LineTo (x, y):

Код PascalABC, PascalABC.Net

В обох варіантах отримаємо однаковий результат:

Ламана polyline і замкнута polygon

Наведемо приклад тієї ж програми, але в PascalABC.Net:

Графік квадратного кореня

Результат побудови графіка функції корінь квадратний в середовищі PascalABC.Net видно на малюнку:

Ламана polyline і замкнута polygon

Процедура Polygon малювання багатокутника

✎ Polygon - процедура. малює замкнуту ламану в PascalABC і заповнений багатокутник в PascalABC.Net по точках, координати яких задані в масиві points.

Polygon в PascalABC:

procedure Polygon (var A: array [1..n] of Point; n: integer);

- Будує замкнуту ламану по n точкам, координати яких задані в масиві a елементів типу Point. Тут Point - тип точки в PascalABC.

Polygon в PascalABC.Net:

procedure Polygon (points: array of Point);

- Малює заповнений багатокутник. координати вершин якого задані в масиві points. Тут points - це динамічний масив точок типу Point, який має поля X, Y (координати точки в графічному вікні). Point в PascalABC.Net - це вбудований тип даних (примітивний, базовий), тобто такий, описувати який не потрібно.

Яка відмінність Polygon від PolyLine? Відмінність тільки в тому, що у випадку з Polygon перша точка замикається з останньої, і в результаті отримуємо не просто ламану лінію, а замкнуту ламану - багатокутник. Далі наводимо серію прикладів использвания процедури Polygon в PascalABC і PascalABC.Net для малювання багатокутників.

Мгогоугольнік в PascalABC

Малюємо трикутник в PascalABC:

Програма працює так: при запуску в графічному вікні кожні 2 секунди з'являються зафарбовані багатокутники з випадковим кількістю вершин від 3 до 30 (рядок 16 коду). Потім визначаємо координати вершин правильного багатокутника, і слідом за цим знаходимо вершини потрібного нам багатокутника як випадкове відхилення на 15 пікселів (рядки 20 - 28). Далі малюємо багатокутник (рядок 32) і зберігаємо його зображення (рядок 35).

Зверніть увагу, що цей процес запущений в бексонечном циклі (умова false на виході циклу repeat-until завжди помилково, тому він ніколи не зупиниться), тому зупинити його потрібно просто закривши вікно. А ще важливе: кожні дві секунди у вас в папці з програмою буде з'являтися новий файл зображення типу "Зафарбований чотирикутник-1.jpg". "Зафарбований чотирикутник-2.jpg". "Зафарбований чотирикутник-3.jpg" і т.д. і якщо вам будуть не потрібні ці малюнки, то їх треба видалити. Ось приклади таких багатокутників (наведіть мишкою на картинку і прокручуйте вперед-назад):

  • Ламана polyline і замкнута polygon

Нарешті, хотілося б відзначити важливе зауваження щодо процедури Polygon. в PascalABC вона малює незаповнений багатокутник, а в PascalABC.Net - заповнений. Це означає, що для зафарбовування багатокутника в PascalABC потрібно використовувати процедуру FloodFill (x, y, Color: integer) заповнення замкнутої області кольору color починаючи з точки (x, y), а в PascalABC.Net - тільки задати колір кисті SetBrushColor (C: Color).