Розширений додатковий матеріал для вивчення теми "Комп'ютерна графіка Pascal"
Структура:
Стандартні графічні процедури і функції для роботи з лініями, точками, багатокутниками.
Для побудови зображення у графічному режимі використовують систему координат, яка відрізняється від текстового режиму (екран представляється у вигляді прямокутного масиву символів і координати Х, Y починаються з 1 … max значення).
Відлік координат починається з верхнього лівого кута екрана з координатами (0, 0). При цьому екран представляється у вигляді прямокутного масиву адресованих точок (пікселів). Для різних типів адаптерів та режимів кількість точок по вертикалі та горизонталі суттєво відрізняється.
Для визначення максимальних значень координат екрану, в модулі GRAPH використовують функції:
GetMaxX: integer; GetMaxY: integer.
Особливості: якщо при адресації точок вказуються значення координат, які перевищують максимальні, то операція ігнорується.
Побудова графічного зображення починається з позначення початкової позиції. У текстовому режимі цю позицію позначає курсор, який розміщується за останнім символом і вказує на місце наступного символу. В графічних режимах відображеного на екрані курсору не має, але є прихований поточний покажчик СР (current pointer), який виконує аналогічні функції курсору текстового режиму.
В графічному режимі для переміщення СР використовують процедури:
MoveTo (x, y: integer) – переміщує поточний покажчик СР в точку з координатами x, y;
Move Rel (dx, dy: integer) – переміщує СР на dx точок по горизонталі і на dy точок по вертикалі відносно останнього положення поточного покажчика. Якщо dx, dy більше 0, то координати СР збільшуються; якщо менше 0 – зменшуються.
Для визначення поточного розташування графічного курсору СР використовують функції: GETX: integer;
GETY: integer; які повертають значення поточних координат покажчика.
Геометричні побудови.
Відображення точки:
В модулі Graph для відображення точки використовують процедуру:
PutPixel (x, y:integer, с:integer); - де x, y – координати точки, с – колір зафарбовування пікселя (змінюється від 0 до 15).
Приклад: Putpixel(3,3,red);
Putpixel(7,5,green);
Відображення ліній:
а) Процедура: Line (x1, y1, x2, y2: integer);
x1, y1, x2, y2 – координати початкової і кінцевої точок лінії. Лінія креслиться поточним стилем і поточним кольором.
Приклад: Line (3, 4, 10, 4)
б) Процедура: LineTo (x, y: integer); будує лінію від точки поточного розміщення
покажчика до точки з координатами (x,y).
в) Процедура: LineRel (dx, dy: integer); проводить відрізок від точки поточного
розміщення на величину заданого приросту.
При побудові горизонтальних, або вертикальних ліній, слід пам’ятати прості правила – у горизонтальної змінюються лише координати по осі 0Х, а у вертикальної – координати по осі 0Y.
Приклад: лінії, що проходять через центр екрану (319,239)
Line (0, 239, 639, 239) – горизонтальна лінія;
Line (319, 0, 319, 479) – вертикальна лінія;
Line (0, 0, 639, 479) – діагональна зліва на право;
Побудова прямокутників.
Процедура Rectangle (x1, y1, x2, y2: integer); створює прямокутник з координатами x1, y1 – лівого верхнього кута і x2, y2 – правого нижнього кута, хоча можна вказувати просто попарно координати протилежних кутів. Область середини прямокутника не зафарбована і співпадає з кольором фону екрану. Для ліній прямокутника використовується поточний стиль ліній і колір (заданий).
Приклад: Rectangle (50, 50, 200, 150);
Rectangle (150, 160, 60, 250);
Процедура Bar (x1, y1, x2, y2: integer); утворює прямокутник (прямокутну область, яка немає ліній границь) , внутрішня область якого заповнюється поточним стилем (тип і колір). Параметри процедури – відповідні координати протилежних вершин прямокутника. Використовують для побудови гістограм, діаграм і т.п.
Формування практичних вмінь і навичок.
Написати програму, яка будує трикутник, сніжинку, конверт, графік синуса.
Для того, щоб швидко навчитись малювати, та зекономити час при побудові, рекомендується виконати ескіз на аркуші в клітинку, попередньо розставивши координати точок.
Трикутник:
Сніжинка:
:
Конверт:
Графік синуса:
k=0.05; l=100; k=0.1; l=100;
k=0.05; l=50;
Код програми: program sinus; uses graph; var x,y:integer; driver, mode: integer; a,b:integer; k,l:real; begin driver:=detect;
InitGraph(driver, mode,'../bgi'); if GraphResult<>0 then writeln('Error') else
a:=10;b:=240; k:=0.05;l:=100; {задання початкових параметрів}
y:=-trunc(sin(0)*l); |
{розрахунок координати першої точки} |
moveto(a,y+b); |
{переміщення графічного курсора в першу точку} |
for x:=0 to 600 do begin |
|
y:=-trunc(sin(x*k)*l); |
{циклічно розраховуємо значення функції} |
lineto(x+a,y+b); |
{та з’єднуємо точки} |
end; readln; closegraph; end.