Курсовая работа: Побудова динамічної графіки

Курсовая работа: Побудова динамічної графіки




🛑 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
не тему: ”Побудова динамічної графіки”
асистент кафедри КС студент І-го курсу
допущено до захисту: _______________
Починаючи з версією 4.0, до складу Турбо Паскаля включена могутня бібліотека графічних підпрограм Graph, що залишається практично незмінною у всіх подальших версіях. Бібліотека містить в цілому більше 50 процедур і функцій, що надають програмісту найрізноманітніші можливості управління графічним екраном. Для полегшення знайомства з бібліотекою всі процедури і функції, що входять до неї, згруповані за функціональним принципом.
Процедура InitGraph. Ініціює графічний режим роботи адаптера.
Procedure
InitGraph(var Driver,Mode: Integer; Path: String);
Тут Driver - змінна типу Integer, визначає тип графічного драйвера; Mode - змінна того ж типу, задаюча режим роботи графічного адаптера; Path - вираз типа String, що містить ім'я файлу драйвера і, можливо, маршрут його пошуку.
До моменту виклику процедури на одному з дискових носіїв інформації повинен знаходитися файл, що містить потрібний графічний драйвер. Процедура завантажує цей драйвер в оперативну пам'ять і переводить адаптер в графічний режим роботи. Тип драйвера повинен відповідати типу графічного адаптера. Для вказівки типу драйвера в модулі приречені наступні константи:
Detect=0;{Режим автовизначення типу}
Більшість адаптерів може працювати в різних режимах. Для того, щоб вказати адаптеру необхідний режим роботи, використовується змінна Mode, значенням якої у момент звернення до процедури можуть бути такі константи:
IBM8514LO =0; {640x480, 256 кольорів}
IBM8514H1 = 1; {1024x768, 256 кольорів}
Нехай, наприклад, драйвер CGA.BGI знаходиться в каталозі TP\BGI на диску З і встановлюється режим роботи 320x200 з палітрою 2. Тоді звернення до процедури буде таким:
InitGraph(Driver, Mode,' З:\TP\BGI');
Якщо тип адаптера ПК невідомий або якщо програма розрахована на роботу з будь-яким адаптером, використовується звернення до процедури з вимогою автоматичного визначення типу драйвера:
InitGraph(Driver, Mode, 'C:\TP\BGI');
Після такого звернення встановлюється графічний режим роботи екрану, а при виході з процедури змінні Driver і Mode містять цілочисельні значення, що визначають тип драйвера і режим його роботи. При цьому для адаптерів, здатних працювати в декількох режимах, вибирається старший режим, тобто той, що закодований максимальною цифрою. Так, при роботі з CGA -адаптером звернення до процедури із значенням Driver = Detect поверне змінній Driver значення 1 (CGA) і в Mode -значення 4 (CGAHi), а також звернення до адаптера VGA поверне Driver = 9 (VGA) і Mode = 2 (VGAHi).
Повертає значення типу String, в якому за вказаним кодом помилки дається відповідне текстове повідомлення.
Function
GraphErrorMsg(Code: Integer): String;
Тут Code - код помилки, що повертається функцією GraphResult.
Частіше за все причиною виникнення помилки при зверненні до процедури InitGraph є неправильна вказівка місцеположення файлу з драйвером графічного адаптера (наприклад, файлу CGA.BGI для адаптера CGA). Настройка на місцеположення драйвера здійснюється завданням маршруту пошуку потрібного файлу в імені драйвера при виклику процедури InitGraph. Якщо, наприклад, драйвер зареєстрований в підкаталозі DRIVERS каталога PASCAL на диску D, то потрібно використовувати виклик:
InitGraph(Driver, Mode, 'd:\Pascal\Drivers');
Завершує роботу адаптера в графічному режимі і відновлює текстовий режим роботи екрану.
Слугує для короткочасного повернення в текстовий режим. На відміну від процедури CloseGraph не скидаються встановлені параметри графічного режиму і не звільняється пам'ять, виділена для розміщення графічного драйвера.
Повертає значення типу Integer, в якому міститься код встановленого режиму роботи графічного адаптера.
Встановлює новий графічний режим роботи адаптера.
Procedure
SetGraphMode(Mode: Integer);
Тут Mode - код встановлюваного режиму.
Повертає тип драйвера і режим його роботи.
Procedure
DetectGraph(var Driver,Mode: Integer);
Тут Driver - тип драйвера; Mode - режим роботи.
На відміну від функції GetGraphMode описувана процедура повертає змінній Mode максимально можливий для даного адаптера номер графічного режиму.
Повертає значення типу String, що містить ім'я завантаженого графічного драйвера. Заголовок:
Повертає значення типу Integer, що містить кількість можливих режимів роботи адаптера.
Повертає значення типу String, що містить розширення екрану і ім'я режиму роботи адаптера по його номеру.
Function
GetModName(ModNumber: Integer): String;
Повертає діапазон можливих режимів роботи заданого графічного адаптера. Заголовок:
Procedure
GetModeRange(Drv: Integer; var Min, Max: Integer);
Тут Drv - тип адаптера; Min - змінна типа Integer, в якій повертається нижнє можливе значення номера режиму; Мах - змінна того ж типу, верхнє значення номера.
Багато графічних процедур і функції використовують покажчик поточної позиції на екрані, який на відміну від текстового курсора невидимий. Положення цього покажчика, як і взагалі будь-яка координата на графічному екрані, задається щодо лівого верхнього кута, який, у свою чергу, має координати 0,0. Таким чином, горизонтальна координата екрану збільшується зліва направо, а вертикальна - зверху вниз.
Повертають значення типу Word, що містять максимальні координати екрану в поточному режимі роботи відповідно по горизонталі і вертикалі.
Повертають значення типу Integer, що містять поточні координати покажчика відповідно по горизонталі і вертикалі. Координати визначаються щодо лівого верхнього кута вікна або, якщо вікно не встановлено, екрану.
Встановлює прямокутне вікно на графічному екрані.
Procedure
SetViewPort(XI,Y1,X2,Y2: Integer; ClipOn: Boolean);
Тут X1...Y2 - координати лівого верхнього (XI,Y1) і правого нижнього (X2,Y2) кутів вікна; СНрОп - вираз типа Boolean, що визначає «відсічення» елементів зображення, що не уміщаються у вікні.
Координати вікна завжди задаються щодо лівого верхнього кута екрану. Якщо параметр ClipOn має значення True, елементи зображення, що не уміщаються в межах вікна, відсікаються, інакше межі вікна ігноруються. Для управління цим параметром можна використовувати такі певні в модулі константи:
ClipOn = True; {Включити відсічення}
ClipOff = False; {He включати відсічення}
Повертає координати і ознаку відсічення поточного графічного вікна.
Procedure
GetViewSettings(var Viewlnfo: ViewPortType);
Тут Viewlnfo - змінна типа ViewPortType. Цей тип в модулі Graph визначений таким чином:
x1,y1,x2,y2: Integer; {Координати вікна}
Встановлює нове поточне положення покажчика.
Тут X, Y - нові координати покажчика відповідно по горизонталі і вертикалі.
Координати визначаються щодо лівого верхнього кута вікна або, якщо вікно не встановлено, екрану.
Встановлює нове положення покажчика у відносних координатах.
Тут DX,DY- прирости нових координат покажчика відповідно по горизонталі і вертикалі.
Прирости задаються щодо того положення, яке займав покажчик до моменту звернення до процедури.
Очищає графічний екран. Після звернення до процедури покажчик встановлюється в лівий верхній кут екрану, а сам екран заповнюється кольором фону, заданим процедурою SetBkColor.
Очищає графічне вікно, а якщо вікно не визначено до цього моменту - весь екран. При очищенні вікно заповнюється кольором з номером 0 з поточної палітри. Покажчик переміщається в лівий верхній кут вікна.
Повертає два числа, дозволяючи оцінити співвідношення сторін екрану.
Procedure
GetAspectRatio(var X,Y: Word);
Тут X, Y - змінні типу Word. Значення, що повертаються в цих змінних, дозволяють обчислити відношення сторін графічного екрану в пікселях. Знайдений з їх допомогою коефіцієнт може використовуватися при побудові правильних геометричних фігур, таких як кола, квадрати і т.п. Наприклад, якщо Ви хочете побудувати квадрат із стороною L пікселів по вертикалі, Ви повинні використовувати оператори
Rectangle(x1, y1, x1+L*round (Yasp/Xasp), y1+L);
а якщо L визначає довжину квадрата по горизонталі, то використовується оператор
Rectangle (x1,y1,x1+L,y1+L*round(Xasp/Yasp));
Встановлює масштабний коефіцієнт відношення сторін графічного екрану. Заголовок:
Procedure
SetAspectRatio(X,Y: Word);
Тут X, Y- встановлювані співвідношення сторін.
Робить активною вказану сторінку відеопам'яті.
Procedure
SetActivePage(PageNum: Word);
Процедура може використовуватися тільки з адаптерами, що підтримують багатосторінкову роботу (EGA, VGA і т.п.). Фактично процедура просто переадресує графічний висновок в іншу область відеопам'яті, проте виведення текстів за допомогою Write/WriteLn завжди здійснюється тільки на сторінку, яка є видимою в даний момент (активна сторінка може бути невидимою). Нумерація сторінок починається з нуля.
Робить видимою сторінку з вказаним номером.
Procedure
SetVisualPAge(PageNum: Word);
Процедура може використовуватися тільки з адаптерами, що підтримують багатосторінкову роботу (EGA, VGA і т.п.). Нумерація сторінок починається з нуля.
Викреслює прямокутник з вказаними координатами кутів.
Procedure
Rectangle(X1,Y1,X2,Y2: Integer);
Тут X1... Y2 - координати лівого верхнього (X1, Y1) і правого нижнього (Х2, Y2) кутів прямокутника. Прямокутник викреслюється з використанням поточного кольору і поточного стилю ліній.
Викреслює довільну ламану лінію, задану координатами точок зламу.
Procedure
DrawPoly(N: Word; var Points)
Тут N - кількість точок зламу, включаючи обидві крайні крапки; Points - змінна типа PointType, що містить координати точок зламу.
Координати точок зламу задаються парою значень типа Word: перше визначає горизонтальну, друге - вертикальну координати. Для них можна використовувати наступний певний в модулі тип:
Procedure
Circle(X,Y: Integer; R: Word);
Тут X, Y- координати центру; R - радіус в пікселях.
Коло виводиться поточним кольором. Товщина лінії встановлюється поточним стилем, вид лінії завжди SolidLn (суцільна). Процедура викреслює правильне коло з урахуванням зміни лінійного розміру радіусу залежно від його напряму щодо сторін графічного екрану, тобто з урахуванням коефіцієнта GetAspectRatio. У зв'язку з цим параметр R визначає кількість пікселів в горизонтальному напрямі.
Procedure
Arc(X,Y: Integer; BegA,EndA,R: Word);
Тут X, У - координати центру; BegA, EndA - відповідно початковий і кінцевий кути дуги; R - радіус.
Кути відлічуються проти годинникової стрілки і вказуються в градусах. Нульовий кут відповідає горизонтальному напряму вектора зліва направо. Якщо задати значення початкового кута 0 і кінцевого - 359, то буде виведено повне коло. При викреслюванні дуги кола використовуються ті ж угоди щодо ліній і радіусу, що і в процедурі Circle.
От як виглядають дві дуги: одна з кутами 0 і 90, друга 270 і 540 градусів (мал. 1):
Повертає координати трьох крапок: центру, початку і кінця дуги.
Procedure
GetArcCoords(var Coords: ArcCoordsType);
Тут Coords - змінна типа ArcCoordsType, в якій процедура повертає координати центру, початку і кінця дуги.
Тип ArcCoordsType визначений в модулі Graph таким чином:
Xstart,Ystart: Integer; {Початок дуги}
Procedure
Ellipse(X,Y: Integer; BegA,EndA,RX,RY: Word);
Тут X, Y - координати центру; BegA, EndA - відповідно початковий і кінцевий кути дуги; RX, RY- горизонтальний і вертикальний радіуси еліпса в пікселях.
При викреслюванні дуги еліпса використовуються ті ж угоди щодо ліній, що і в процедурі Circle, і ті ж угоди щодо кутів, що і в процедурі Arc. Якщо радіуси погоджувати з урахуванням масштабного коефіцієнта GetAspectRatio, буде викреслено правильне коло.
Встановлює поточний колір для ліній і символів, що виводяться. Заголовок:
В модулі Graph визначені точно такі ж константи для завдання кольору, як і в модулі СИГ .
Функція GetColor. Повертає значення типа Word, що містить код поточного кольору.
Повертає значення типу Word, що містить максимальний доступний код кольору, який можна використовувати для звернення до SetColor.
На відміну від текстового режиму, в якому колір фону може бути тільки темного відтінку, в графічному режимі він може бути будь-ким. Установка нового кольору фону негайно змінює колір графічного екрану. Це означає, що не можна створити зображення, дві ділянки якого мали б різний колір фону. Для CGA -адаптера в режимі високого розширення установка кольору фону змінює колір активних пікселів. Після заміни кольору фону на будь-який, відмінний від 0 (Black) колір, Ви не зможете більш використовувати колір 0 як чорний, він замінюватиметься на колір фону, оскільки процедури модуля Graph інтерпретують колір з номером 0 як колір фону. Це означає, зокрема, що Ви вже не зможете повернути фону чорний колір!
Повертає значення типу Word, що містить поточний колір фону. Заголовок:
Замінює один з кольорів палітри на новий колір.
Procedure
SetPalette(N: Word; Color: Shortlnt);
Тут N - номер кольору в палітрі; Color - номер знов встановлюваного кольору.
Дана процедура може працювати тільки з адаптерами EGA або VGA. Вона не повинна використовуватися з IBM8514 або 256-кольоровим варіантом VGA - для цих адаптерів призначена особлива процедура SetRGBPalette (див. нижче). Первинне розміщення кольорів в палітрах EGA/VGA відповідає послідовності їх опису константами Black....White, тобто колір з індексом 0 - чорний, 1 - синій, 2 - зелений і т.д. Після звернення до процедури всі фрагменти зображення, виконані кольором з індексом N з палітри кольорів, одержать колір Color. Наприклад, якщо виконати оператор
то колір з індексом 2 (первинно це - бірюзовий колір Cyan) буде замінений на білий. Колір з індексом 0 ототожнюється з кольором фону і може змінюватися разом з будь-яким іншим кольором.
Повертає розмір і кольори поточної палітри.
Procedure
GetPalette(var Palettelnfo: PaletteType);
Тут Palettelnfo - змінна типа PaletteType, що повертає розмір і кольори палітри.
Size : Word; {Кількість кольорів в палітрі}
Colors : array [0..MaxColors] Shortlnt
{Номери вхідних в палітру кольорів}
Змінює одночасно декілька кольорів палітри.
Procedure
SetAllPalette(var Palette);
Параметр Palette в заголовку процедури описаний як параметр, що не типізується. Перший байт цього параметра повинен містити довжину N палітри, решта N байтів - номери знов встановлюваних кольорів в діапазоні від -1 до MaxColors. Код -1 означає, що відповідний колір початкової палітри не міняється.
Повертає значення типу Integer, що містить розмір палітри (максимальна кількість доступних кольорів).
Повертає структуру палітри, встановлювану за змовчуванням (в режимі автонастройки).
Procedure
GetDefaultPalette(var Palette: PaletteType);
Тут Palette - змінна типа PaletteType (див. процедуру GetPalette), в якій повертаються розмір і кольори палітри.
Встановлює стиль (тип і колір) заповнення.
Procedure
SetFillStyle(Fill,Color: Word);
Тут Fill - тип заповнення; Color - колір заповнення.
За допомогою заповнення можна покривати які-небудь фрагменти зображення узором, що періодично повторюється. Для вказівки типу заповнення використовуються наступні заздалегідь певні константи:
EmptyFill = 0;{Заповнення фоном (узор відсутній)}
SolidFill = 1;{Суцільне заповнення}
LtSlashFill = 3;{Заповнення ///////}
SlashFill = 4;{Заповнення потовщеними ///}
BkSlashFill = 5;{Заповнення потовщеними \\\}
LtBkSlashFill = 6;{Заповнення \\\\\\\}
XHatchFill = 8;{Заповнення ххххххх}
InterleaveFill= 9;{Заповнення прямокутну клітинку}
WideDotFill = 10;{Заповнення рідкісними крапками}
CloseDotFill = 11;{Заповнення частими крапками}
UserFill = 12;{Узор визначається користувачем}
Встановлює зразок малюнка і колір штрихування. Заголовок:
Procedure
SetFillPattern(Pattern: FillPatternType;Color: Word);
Тут Pattern - вираз типу FillPatternType; встановлює зразок малюнка для Fill - UserFill в процедурі SetFillStyle; Color - колір заповнення.
Зразок малюнка задається у вигляді матриці з 8x8 пікселів і може бути представлений масивом з 8 байт наступного типу:
FillPatternType = array [1..8] Byte;
Кожний розряд будь-якого з цих байтів управляє світимістю пікселя, причому перший байт визначає 8 пікселів першого рядка на екрані, другий байт - 8 пікселів другого рядка і т.д.
Повертає зразок заповнення, встановлений раніше процедурою SetFillPattern. Заголовок:
Procedure
GetFillPattern(var Pattern: FillPatternType);
Тут Pattern - змінна типа FillPatternType, в якій повертається зразок заповнення.
Якщо програма не встановлювала зразок за допомогою процедури SetFillPattern, масив Pattern заповнюється байтами із значенням 255 ($FF).
Повертає поточний стиль заповнення. Заголовок:
Procedure
GetFillSettings(var Pattlnfo: FillSettingsType);
Тут Pattlnfo - змінна типа FillSettingsType, в якій повертається поточний стиль заповнення.
Поля Pattern і Color в цьому, записі мають те ж призначення, що і аналогічні параметри при зверненні до процедури SetFillStyle.
Встановлює колірну гамму при роботі з дисплеєм IBM 8514 і адаптером VGA. Заголовок:
Procedure
SetRGBPalette(ColNum,RedVal, GreenVal,BlueVal:Integer);
Тут ColNum - номер кольору; RedVal, GreenVal, BlueVal - вирази типу Integer, що встановлюють інтенсивність відповідно червоній, зеленій і сині складових кольору.
Ця процедура може працювати тільки з дисплеєм IBM 8514, а також з адаптером VGA, що використовує відеопам'ять об'ємом 256 Кбайт. В першому випадку параметр ColNum задається числом в діапазоні 0...255, в другому - в діапазоні 0...15. Для установки інтенсивності використовуються 6 старших розрядів молодшого байта будь-якого з параметрів RedVal, GreenVal, BlueVal.
Заповнює довільну замкнуту фігуру, використовуючи поточний стиль заповнення (узор і колір). Заголовок:
Procedure
FloodFill(X,Y: Integer; Border: Word);
Тут X, Y- координати будь-якої точки всередині замкнутої фігури; Border - колір граничної лінії.
Якщо фігура незамкнута, заповнення «розіллється» по всьому екрану.
Слід врахувати, що реалізований в процедурі алгоритм проглядання меж замкнутої фігури не відрізняється досконалістю. Зокрема, якщо виводяться підряд два порожні рядки, заповнення припиняється. Така ситуація звичайно виникає при заповненні невеликих фігур з використанням типу LtSlashFill. У фірмовому керівництві по Турбо Паскалю рекомендується, по можливості, замість процедури FloodFill використовувати FillPoly (заповнення прямокутника).
Заповнює прямокутну область екрану.
Procedure
Bar(X1,Y1,X2,Y2: Integer);
Тут XJ...Y2 - координати лівого верхнього (X1, Y1) і правого нижнього (Х2, Y2) кутів закрашуваної області.
Процедура закрашує (але не обводить) прямокутник поточним зразком узору і поточним кольором, які встановлюються процедурою SetFillStyle.
Викреслює тривимірне зображення паралелепіпеда і закрашує його передню грань . Заголовок:
Procedure
Ваr3D (X1,Y1,X2,Y2,Depth: Integer; Top: Boolean);
Тут X1... Y2 - координати лівого верхнього (X1, Y1) і правого нижнього (Х2, Y2) кутів передньої грані; Depth - третє вимірювання тривимірного зображення («глибина») в пікселях; Тор - спосіб зображення верхньої грані.
Якщо параметр Тор має значення True, верхня грань паралелепіпеда викреслюється, інакше - не викреслюється (цей варіант використовується для зображення поставлених один на одного паралелепіпедів). Як значення цього параметра може використовуватися одна з наступних констант, визначених в модулі Graph:
При викреслюванні використовується поточний стиль ліній (SetLineStyle) і поточний колір (SetColor). Передня грань заливається поточним стилем заповнення (SetFillStyle).
Процедура звичайно застосовується при побудові стовпчикових діаграм. Слід врахувати, що паралелепіпед «прозорий», тобто за його незакрашеними гранями можуть бути видні інші елементи зображення.
Обводить лінією і закрашує замкнутий багатокутник.
Procedure
FillPoly(N: Word; var Coords);
Тут N - кількість вершин замкнутого багатокутника; Coords - змінна типа PointType, що містить координати вершин.
Координати вершин задаються парою значень типа Integer: перше визначає горизонтальну, друге - вертикальну координати. Для них можна використовувати наступний певний в модулі тип:
Стиль і колір лінії контура задаються процедурами SetLineStyle і SetColor, тип і колір заливки - процедурою SetFillStyle.
Procedure
FillEllipse(X,Y,RX,RY: Integer);
Тут X, У - координати центру; RX, RY- горизонтальний і вертикальний радіуси еліпса в пікселях.
Еліпс обводиться лінією, заданою процедурами SetLineStyle і SetColor, і заповнюється з використанням параметрів, встановлених процедурою SetFillStyle.
Викреслює і заповнює еліпсний сектор.
Procedure
Sector(X,Y: Integer; BegA,EndA,RX,RY: Word);
Тут BegA, EndA - відповідно початковий і кінцевий кути еліпсного сектора. Решта параметрів обігу аналогічна параметрам процедури FillEllipse.
Procedure
PieSlice(X,Y: Integer; BegA,EndA,R: Word);
На відміну від процедури Sector, указується лише один горизонтальний радіус R, решта параметрів аналогічна параметрам процедури Sector.
Повертає розмір пам'яті в байтах, необхідний для розміщення прямокутного фрагмента зображення.
Function
ImageSize(X1,Y1,X2,Y2: Integer): Word;
Тут X1... Y2 - координати лівого верхнього (X1, Y1) і правого нижнього (Х2, Y2) кутів фрагмента зображення.
Поміщає в пам'ять копію прямокутного фрагмента зображення.
Procedure
Getlmage(X1,Y1,X2,Y2: Integer; var Buf)
Тут X1...Y2 - координати кутів фрагмента зображення; Buf - змінна або ділянка купи, куди буде поміщена копія відеопам'яті з фрагментом зображення.
Розмір Buf повинен бути не менше значення, що повертається функцією ImageSize з тими ж координатами X1....Y2.
Виводить в задане місце екрану копію фрагмента зображення, раніше поміщену в пам'ять процедурою Getlmage.
Procedure
Putlmage(X,Y: Integer; var Buf; Mode: Word);
Тут X,Y- координати лівого верхнього кута того місця на екрані, куди буде скопійований фрагмент зображення; Buf - змінна або ділянка купи, звідки береться зображення; Mode - спосіб копіювання.
Як бачимо, координати правого нижнього кута не указуються, оскільки вони повністю визначаються розмірами копії зображення, що знов виводиться на екран. Координати лівого верхнього кута можуть бути якими завгодно, тільки щоб копія, що виводиться, уміщалася в межах екрану (якщо копія не може розміститися на екрані, вона не виводиться і екран залишається без змін).
Параметр Mode визначає спосіб взаємодії знов розміщуваної копії із зображенням, що вже є на екрані. Взаємодія здійснюється шляхом вживання кодованих цим параметром логічних операцій до кожного біта копії і зображення. Для вказівки вживаної логічної операції можна використовувати одну з наступних заздалегідь визначених констант:
NormalPut= 0;{Заміна існуючого зображення на копію}
Найбільш часто використовуються операції NormalPut, XORPut і NotPut. Перша з них просто стирає частину екрану і на це місце поміщає копію з пам'яті в тому вигляді, як вона там зберігається. Операція NotPut робить те ж саме, але копія виводиться в інверсному вигляді. Для монохромного режиму це означає заміну пікселів, що світяться, на темні і навпаки. В кольоровому режимі операція NotPut застосовується до коду кольору кожного пікселя. Наприклад, для White (код 15 або в двійковому вигляді 1111) ця операція дасть код 0000 = 0 = Black, для Red = 4 = 0100 одержимо 1011 = 11 = LightCyan і т.д. Операція XORPut, застосована до того ж місця екрану, звідки була одержана копія, зітре цю частину екрану. Якщо операцію застосувати двічі до однієї і тієї ж ділянки, вид зображення на екрані не зміниться. У такий спосіб можна досить просто переміщати зображення по екрану, створюючи ілюзію руху.
Описувані нижче стандартні процедури і функції підтримують виведення текстових повідомлень в графічному режимі. Це не одне і те ж, що використовування процедур Write або WriteLn. Річ у тому, що спеціально для графічного режиму розроблені процедури, що забезпечують виведення повідомлень різними шрифтами в горизонтальному або вертикальному напрямі, із зміною розмірів і т.д. Проте в стандартних шрифтах, розроблених для цих цілей фірмою Borland, відсутня кирилиця, що виключає виведення російськомовних повідомлень.
З другого боку, процедури Write і WriteLn після завантаження в пам'ять другої половини таблиці знакогенератора (а ця операція легко реалізується в адаптерах EGA і VGA) здатні виводити повідомлення з використанням національного алфавіту, але не володіють могутніми можливостями спеціальних процедур.
Нижче описуються стандартні засоби модуля Graph для виведення тексту.
Виводить текстовий рядок, починаючи з поточним положенням покажчика. Заголовок:
При горизонтальному напрямі висновку покажчик зміщується в кінець виведеного тексту, при вертикальному - не міняє свого положення. Рядок виводиться відповідно до встановленого стилю і вирівнювання. Якщо текст виходить за межі екрану, то при використовуванні штрихових шрифтів він відсікається, а у разі стандартного шрифту не виводиться.
Виводить рядок, починаючи із заданого місця.
Procedure
OutTextXY (X,Y: Integer; Txt: String);
Тут X, У - координати точки виведення; Txt - рядок, що виводиться. Відрізняється від процедури OutText тільки координатами виведення. Покажчик не міняє свого положення.
Встановлює стиль текстового висновку на графічний екран.
Procedure
SetTextStyle(Font,Direct,Size: Word);
Тут Font - код (номер) шрифту; Direct - код напряму; Size - код розміру шрифту.
Для вказівки коду шрифту можна використовувати наступні заздалегідь певні константи:
DefaultFont = 0;{Точковий шрифт 8x8}
TriplexFont = 1;{Потрійний шрифт TRIP.CHR}
SmallFont = 2;{Зменшений шрифт LITT.CHR}
SansSerifFont = 3;{Прямий шрифт SANS.CHR}
GothicFont = 4;{Готичний шрифт GOTH.CHR}
Зазначу, що ці константи визначають всі шрифти для версій 4.0, 5.0, 5.5 і 6.0. У версії 7,0 набір шрифтів значно розширено, проте для нових шрифтів не передбачені відповідні мнемонічні константи. В цій версії крім перерахованих Ви можете при зверненні до SetTextStyle використовувати такі номери шрифтів:
Шрифт DefaultFont входить в модуль Graph і доступний у будь-який момент. Це -единий матричний шрифт, тобто його символи створюються з матриць 8x8 пікселів. Вся решта шрифтів - векторна: їх елементи формуються як сукупність векторів (штрихів), що характеризуються напрямом і розміром. Векторні шрифти відрізняються більш образотворчими можливостями, але головна їх особливість полягає в легкості зміни розмірів без істотного погіршення якості зображення. Кожний з цих шрифтів розміщується в окремому дисковому файлі. Якщо Ви збираєтеся використовувати який-небудь векторний шрифт, відповідний файл повинен знаходитися у Вашому каталозі, інакше виклик цього шрифту ігнорується і підключається стандартний.
Помічу, що шрифт DefaultFont створюється графічним драйвером у момент ініціалізації графіки на підставі аналізу текстового шрифту. Тому, якщо Ваш ПК здатний виводити кирилицю в текстовому режимі, Ви зможете за допомогою цього шрифту виводити російськомовні повідомлення і в графічному режимі. В решті шрифтів ця можливість з'являється тільки після їх модифікації.
Для завдання напряму видачі тексту можна використовувати константи:
Як бачимо, стандартні процедури OutText і OutTextXY здатні виводити повідомлення лише в двох можливих напрямах - зліва направо або від низу до верху. Знаючи структуру векторних шрифтів, неважко побудувати власні процедури, здатні виводити повідомлення в будь-якому напрямі.
Кожний шрифт здатний десятиразово змінювати свої розміри. Розмір символів, що виводяться, кодується параметром Size, який може мати значення в діапазоні від 1 до 10 (точковий шрифт - в діапазоні від 1 до 32). Якщо значення параметра рівно 0. встановлюється розмір 1, якщо більше 10 - розмір 10. Мінімальний розмір шрифту. при якому ще виразно розрізняються всі його деталі, рівний 4 (для точкового шрифту - 1).
Задає вирівнювання тексту, що виводиться, по відношенню до поточного положення покажчика або до заданих координат.
Procedure
SetTextJustify(Horiz,Vert: Word);
Тут Horiz - горизонтальне вирівнювання; Vert - вертикальне вирівнювання. Вирівнювання визначає як розміщуватиметься текст - лівіше або правіше вказаного місця, вище, нижче або по центру. Тут можна використовувати такі константи:
LeftText = 0;{Покажчик зліва від тексту}
CenterText= 1;{Симетрично зліва і справа, верху і знизу}
RightText = 2;{Покажчик праворуч від тексту}
BottomText= 0;{Покажчик знизу від тексту}
TopText = 2;{Покажчик зверху від тексту}
Зверніть увагу на невдалі, з моєї точки зору, імена мнемонічних констант: якщо, наприклад, Ви задасте LeftText, що в перекладі означає «Лівий Текст», повідомлення буде розташовано праворуч від поточного положення покажчика (при висновку процедурою OutTextXY - праворуч від заданих координат). Також «навпаки» потрактує і решта констант.
Змінює розмір символів, що виводяться, відповідно до заданих пропорцій.
Procedure
SetUserCharSize(XI,X2,Yl,Y2: Word);
Тут X1...Y2 - вирази типа Word, що визначають пропорції по горизонталі і вертикалі.
Процедура застосовується тільки по відношенню до векторних шрифтів. Пропорції задають масштабний коефіцієнт, що показує в скільки разів збільшиться ширина і висота символів, що виводяться, по відношенню до стандартно заданих значень. Коефіцієнт по горизонталі знаходиться як відношення X1 до Х2, по вертикалі - як відношення Y1 до Y2. Щоб, наприклад, подвоїти ширину символів, необхідно задати X1=2 і Х2=1. Стандартний розмір символів встановлюється процедурою SetTextStyle, яка відміняє попереднє їй звернення до SetUserCharSize.
Повертає довжину в пікселях текстового рядка, що виводиться.
Function
TextWidth (Txjt: String): Word;
Враховуються поточний стиль і коефіцієнти зміни розмірів символів, задані відповідно процедурами SetTextStyle і SetUserCharSize.
Function
TextHeight(Txt: String): Word;
Повертає поточний стиль і вирівнювання тексту.
Procedure
GetTextSettins(var Textlnfo: TextSettingsType);
Тут Textlnfo - змінна типа TextSettingsType, який в модулі Graph визначений таким чином:
Horiz : Word; {Горизонтальне вирівнювання}
Vert : Word; {Вертикальне вирівнювання}
Дозволяє програмі використовувати нестандартний векторний шрифт. Заголовок функції:
Function
InstallUserFont(FileName: String): Integer;
Тут FileName - ім'я файлу, що містить векторний шрифт.
Як вже мовилося, в стандартну поставку Турбо Паскаля версій 4.0 - 6.0 включено три векторні шрифти, для версії 7.0 - 10. Функція InstallUserFont дозволяє розширити цей набір. Функція повертає ідентифікаційний номер нестандартного шрифту, який може використовуватися при зверненні до процедури SetTextStyle.
Включає нестандартний графічний драйвер в систему BGI-драйверів. Заголовок функції:
Function
InstallUserDriver(FileName: String; AutoDetectPtr: Pointer): Integer;
Ця функція розширює і без того достатньо обширний набір стандартних графічних драйверів і призначена в основному для розробників апаратних засобів.
Driver, Mode:integer; x,j,i,i1,j1,i2,j2,j3,i3,k:integer;Size:word;m:char;
procedure raket;{Процедура створення ракети}
line(i+20,j+13,i+260,j+13);{Основа ракети}
outtextxy(344,390,'CCCP');{Напис на ракеті}
Line(i,j,i+20,j+13);{Кінець ракети}
InitGraph(Driver, Mode,'d:\BP\BGI') ;{Ініціалізація графіки}
Circle(479,449,30);{Створення шасі}
Line(300,417,300,407); {Тримачі ракети}
Floodfill(241,394,3); {Розфарбування ракети}
Circle(50,50,30); {Створення нового колеса}
GetImage(20,20,80,80,p2^); { Занесення нового колеса в пам’ять}
PutImage(15,418,p2^,0); {Створення нових шасі}
GetImage(1,380,270,479,p2^);{Занесення установки в пам’ять}
readkey;{ Рух установки вліво вздовж екрану}
while (x<226) do{Підняття ракети на 45 }
SetFillStyle(6,9); {Розфарбування ракети}
for k:=1 to 300 do {Стартовий вогонь}
GetImage(228,215,519,406,p1^); {Занесення піднятої ракети в пам’ять}
while (i>1) do {Рух ракети в лівий верхній кут}

Название: Побудова динамічної графіки
Раздел: Рефераты по информатике, программированию
Тип: курсовая работа
Добавлен 03:22:46 14 декабря 2005 Похожие работы
Просмотров: 16
Комментариев: 16
Оценило: 3 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Красивий похилий шрифт типуTimes Italic
Шрифт типу Courier збільшеного розміру
Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Курсовая работа: Побудова динамічної графіки
Методы Обследования В Гинекологии Реферат
Способы размещения ценных бумаг
Реферат: Социальные общности в современном мире
Курсовая работа: Мир элементарных частиц
Курсовая Работа На Тему Сеть Связи России
Реферат Выбор Средств Измерений
Титульный Лист Реферата Онлайн Бесплатно
Контрольная Работа На Тему Ведение Домашнего Хозяйства По Системе Национальных Счетов
Сочинение Субботний Вечер 5 Класс
Краткое Сочинение О Державине
Реферат по теме Современные проблемы безработицы
Курсовая работа: Менталитет и бизнес в России. Скачать бесплатно и без регистрации
Реферат по теме Абсолютная монархия во Франции
Сочинение Огэ Взросление
Курсовая работа по теме Политические партии в дореволюционной России
Реферат по теме Влияние налогообложения на инвестиции
Сочинение Рассуждение Живой Как Жизнь
Сочинение На Тему Драма Гроза Катерина
Курсовая Работа На Тему Вал
Реферат: Культура общества. Скачать бесплатно и без регистрации
Реферат: Предмет и задачи биогеографии
Реферат: Внешние устройства ПК
Реферат: ТЕРМОДИНАМИЧЕСКИЕ ФУНКЦИИ

Report Page