Процедури arc, drawpie, fillpie, pie
Привіт всім, хто цікавиться графікою в паскале. Тут поговоримо про те, як за допомогою процедур Arc, DrawPie, FillPie і Pie намалювати дугу і сектор кола в PascalABC, PascalABC.Net, тобто частини окружності і кола. З цих чотирьох подпрограм в простому PascalABC присутні тільки Arc і Pie.
Раніше ми вивчили процедури для роботи з окружністю і колом Circle, DrawCircle, FillCircle, тому рекомендую ознайомитися спочатку з тим матеріалом.
процедура Arc
Ця підпрограма є в PascalABC і PascalABC.Net, і призначена для малювання дуги окружності. Ось визначення:
✎ procedure Arc (x, y, r, a1, a2: integer);
- Малює дугу окружності з центром в точці (x, y) і радіусом r, укладеної між двома променями, що утворюють кути a1 і a2 з віссю OX (a1 і a2 - речові, задаються в градусах і відраховуються проти годинникової стрілки).
Як видно з визначення, для малювання дуги необхідно задати центр окружності, радіус і два кути. Промальовування відбувається як у звичайній системі координат - проти годинникової стрілки. Але необхідно мати на увазі, що в PascalABC процедура Arc малює від кута a1 до кута a2. а в PascalABC.Net - від меншого кута до більшого. не залежно від величин кутів a1 і a2. Це означає, що в PascalABC.Net зміна місцями кутів a1 і a2 ні до чого не приведе (процедура вибирає менший кут і малює до більшого), а в простому PascalABC буде намальована додаткова дуга.
Ще одне зауваження: величини кутів задаються в градусах, а не в радіанах. У розділі задачника ми розглядали, чим відрізняються градуси від радіанів. А тепер наводимо приклад, який демонструє сказане вище.
Код PascalABC, PascalABC.Net

Тут ми намалювали дугу радіуса 150px, утворену кутами 10 ° і 120 °, з центром в точці (150, 250) графічного вікна.
процедура DrawPie
Ця підпрограма присутній в PascalABC.Net.
✎ procedure DrawPie (x, y, r, a1, a2: integer);
- Малює сектор кола. обмежений дугою з центром в точці (x, y) і радіусом r, укладеної між двома променями, що утворюють кути a1 і a2 з віссю OX (a1 і a2 - речові, задаються в градусах і відраховуються проти годинникової стрілки)
Необхідно мати на увазі, що сектор DrawPie незаповнений. а тому використовувати в програмі процедури ля роботи з пензлем Brush (SetBrushColor, наприклад) не мати сенсу - вони все одно не застосуються.
А кути a1 і a2 поводяться так само як і в процедурі Arc для PascalABC.Net - малювання походить від меншого кута до більшого.

А тепер спробуйте додати в код програми процедуру для заливки SetBrushColor (clred); - Нічого не трапиться.

Як бачимо, внутрішня область сектора дійсно проглядається наскрізь.
процедура FillPie
Буває, що необхідно тільки залити сектор кольором, що не малюючи його межі. В такому випадку в PascalABC.Net використовується процедура FillPie. Наводимо визначення і відразу наведемо приклад.
✎ procedure FillPie (x, y, r, a1, a2: integer);
- Заповнює внутрішність сектора кола. обмеженого дугою з центром в точці (x, y) і радіусом r, укладеної між двома променями, що утворюють кути a1 і a2 з віссю OX (a1 і a2 - речові, задаються в градусах і відраховуються проти годинникової стрілки)


Перший сектор із зазначених відповідає коду програми вище. Щоб намалювати інший сектор (нагадує печиво або вафлі), необхідно спочатку змінити стиль заливки, а потім змінити колір на оранжевий.
Так, рядок 11 попереднього коду замініть на SetBrushStyle (bsHatch); SetBrushColor (clOrange); Перша процедура змінює стиль на штриховий, а друга задає колір.
процедура Pie
Процерура Pie присутній в PascalABC і PascalABC.Net, і призначена для малювання сектора з можливістю заливки.
✎ procedure Pie (x, y, r, a1, a2: integer);
- Малює заповнений сектор кола. обмежений дугою з центром в точці (x, y) і радіусом r, укладеної між двома променями, що утворюють кути a1 і a2 з віссю OX (a1 і a2 - речові, задаються в градусах і відраховуються проти годинникової стрілки)
Код PascalABC, PascalABC.Net


Щоб отримати другий малюнок, потрібно змінити стиль заливки з "суцільний" (за замовчуванням) на "штриховий". Для цього в PascalABC.Net замість 11 рядки вставте SetPenColor (clOrange); - колір кордону, а 13 рядок коду замініть на SetBrushStyle (bsHatch); SetBrushColor (clOrange); - стиль і колір заливки.
Щоб картинку-вафельку отримати в простому PascalABC, необхідно стиль bsHatch з PascalABC.Net замінити, наприклад, на bsCross з PascalABC. До того ж, колірної константи clOrange теж немає в PascalABC, тому замінимо його на рівнозначний RGB (255, 165, 0) - функція, яка повертає 255 червоною, 165 зеленою і 0 синьої складових кольору. Ось, що ми отримаємо:
div> .uk-panel '> "data-uk-grid-margin>