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

Процедури arc, drawpie, fillpie, pie

Тут ми намалювали дугу радіуса 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 - малювання походить від меншого кута до більшого.

Процедури arc, drawpie, fillpie, pie

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

Процедури arc, drawpie, fillpie, pie

Як бачимо, внутрішня область сектора дійсно проглядається наскрізь.

процедура FillPie

Буває, що необхідно тільки залити сектор кольором, що не малюючи його межі. В такому випадку в PascalABC.Net використовується процедура FillPie. Наводимо визначення і відразу наведемо приклад.

✎ procedure FillPie (x, y, r, a1, a2: integer);

- Заповнює внутрішність сектора кола. обмеженого дугою з центром в точці (x, y) і радіусом r, укладеної між двома променями, що утворюють кути a1 і a2 з віссю OX (a1 і a2 - речові, задаються в градусах і відраховуються проти годинникової стрілки)

Процедури arc, drawpie, fillpie, pie
Процедури arc, drawpie, fillpie, pie

Перший сектор із зазначених відповідає коду програми вище. Щоб намалювати інший сектор (нагадує печиво або вафлі), необхідно спочатку змінити стиль заливки, а потім змінити колір на оранжевий.

Так, рядок 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

Процедури arc, drawpie, fillpie, pie
Процедури arc, drawpie, fillpie, pie

Щоб отримати другий малюнок, потрібно змінити стиль заливки з "суцільний" (за замовчуванням) на "штриховий". Для цього в 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>