if A[i]>Max then Мах:=А[і];
SizeY:=round(480/Max); {Перетворення масиву значень у відповідності з коефіцієнтом пропорційності}
for i:=l to N do A[i]:=A[i]*SizeY;
for i:=1 to N do
begin {Встановлення випадковим чином кольору зафарбування стовпчиків діаграми}
SetFillStyle (1,random(14)+1); Bar ((i-l)*SizeX,480,i*SizeX-5,480-A[i]);
end;
Readkey; {Затримка зображення на екрані}
CloseGraph; {Закриття графічного режиму}
end.
ЗАДАЧА № 618
Умова: Секторною діаграмою називають круг, площі секторів якого пропорційні відповідним числовим величинам, узятим з деякої послідовності. Для заданої послідовності з п дійсних чисел побудувати секторну діаграму. Для наочності сектори діаграми зафарбувати різними кольорами.
Розв’язування: Кількість елементів діаграми в цій задачі вводиться так само, як і в попередньому випадку, тобто з клавіатури, а заповнення масиву даними зробимо генератором випадкових чисел. Далі, як і в попередній задачі, необхідно промасштабувати початкові значення для виведення їх на екран у вигляді кругової діаграми. Для цього спочатку знаходимо суму всіх елементів масиву, а потім масштабуємо їх за формулою
де Sum - загальна сума елементів масиву, 360 - кількість градусів у повному колі.
Сама діаграма будується за допомогою процедури PieSlice , що виводить на екран зафарбований сектор круга. Колір зафарбування задається процедурою SetFillStyle , а початковий та кінцевий кути сектора обчислюються від поточного кута. Angle з урахуванням значення елементу масиву. Центр кола, на якому будується кругова діаграма, завжди константний (320; 240). Програма, що реалізує описаний алгоритм, має вигляд:
Program Example_618;
Uses graph; (Підключення бібліотек}
Var GraphDriver,GraphMode:integer; N, і : integer;
Sum,Ang : real;
A : array [1..100] of real; S : string; Begin
ClrScr; Randomize;
Write (ЛВведіть кількість елементів діаграми: *).;
ReadLn (N);
(Введення значень для побудови діаграми}
for i:=l to N do A[i]:=random*200;
GraphDriver:=VGA;
GraphMode:=VGAHi;
InitGraph(GraphDriver,GraphMode,»);
Sum:=0;
for i:=1 to N do Sum:=Sum+A[i];
for i:=1 to N do A[i]:=A[i]*360/Sum;
Ang:=0;
for i:=1 to N do
begin
SetFillStyle (l,Random(14)+l);
PieSlice (320,240,round (Ang), round (Ang+A[i]),230);
(Виведення на діаграмі числових значень)
Str (A[i]*Sum/360:3:0,S);
OutTextXY(round(320+120*coe((2*Ang+A[i]))*Pi/360),
round(240-120*ein((2*Ang+A[i])*Pi/360)),S);
Ang:=Ang+A[i];
end;
Readkey; CloseGraph; {Закриття графічного режиму)
end.
Домашнє завдання:
• повторити сторінки 221 - 229 запропонованого підручника;
• задачі №615,617,620.
УРОК 33. Методи створення мультфільмів
Мета уроку: показати створення рухомих графічних об’єктів та простих мультиплікаційних зображень засобами мови Паскаль.
Теоретичний матеріал
Щоб розпочати роботу над створенням найпростішого «мультика» (зображення, що рухається), спочатку розберемося, як воно створюється в реальних умовах. Всі знають, що художник мультиплікатор малює серію зображень, у кожному з яких показується один і той же рух з ледь помітними змінами. Тепер, якщо зображення швидко змінювати одне за одним, ми не помічаємо зміну малюнків, а бачимо рух цього персонажу. Поміркуємо, як відтворити послідовність схожих об’єктів на екрані монітору. Перше, що спадає на думку, це намалювати зображення, затримати його трохи на екрані, витерти зображення (очистити екран) та вивести нове зображення з ледь помітними змінами. При достатньо великій швидкості малювання око людини не помітить зміни малюнків і їй буде здаватися, що об’єкт рухається. Розв’яжемо таким методом наступну задачу.
ЗАДАЧА № 629
Умова : «Годинник». Змоделювати рух годинної та хвилинної стрілок.
Розв ‘язування : Якщо змоделювати роботу годинника в реальному часі, то наочність програми буде невеликою, тому що рух стрілок буде ледь помітним. Тому зробимо імітацію роботи годинника, тобто хвилинна стрілка буде рухатися достатньо швидко, а рух годинникової стрілки буде залежати від хвилинної. На початку роботи з’ясуємо, з яких елементів складається годинник. По-перше, це круг з поділками, а, по-друге, два відрізка різної довжини, що імітують стрілки (стрілки можна зробити і більш складними). Круг являється нерухомим об’єктом, тому він малюється статично з абсолютними координатами центру та радіусом, а стрілки рухаються, причому переміщується тільки один кінець стрілки-відрізка, а другий теж являється статичним (центр круга).
Читать дальше