На попередній сторінці Лінії в паскаль ми розглядали побудова послідовних прямих ліній, використовуючи процедури 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
В обох варіантах отримаємо однаковий результат:
Наведемо приклад тієї ж програми, але в PascalABC.Net:
Графік квадратного кореня
Результат побудови графіка функції корінь квадратний в середовищі PascalABC.Net видно на малюнку:
Процедура 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" і т.д. і якщо вам будуть не потрібні ці малюнки, то їх треба видалити. Ось приклади таких багатокутників (наведіть мишкою на картинку і прокручуйте вперед-назад):
Нарешті, хотілося б відзначити важливе зауваження щодо процедури Polygon. в PascalABC вона малює незаповнений багатокутник, а в PascalABC.Net - заповнений. Це означає, що для зафарбовування багатокутника в PascalABC потрібно використовувати процедуру FloodFill (x, y, Color: integer) заповнення замкнутої області кольору color починаючи з точки (x, y), а в PascalABC.Net - тільки задати колір кисті SetBrushColor (C: Color).