Рух Зображення В Pascal Abc - Файли kophzip.bitballoon.com

Рух Зображення В Pascal Abc 5,0 / 5 793 reviews

Напишіть програму в PascalABC за допомогою якої малюється рухомий малюнок (має рухатися не менше трьох частин), наприклад - машина з обертовими колесами.

Напишіть програму в PascalABC за допомогою якої малюється рухомий малюнок (має рухатися не менше трьох частин), наприклад - машина з обертовими колесами

Завдання 13: Графіка в Паскалі Примітка: При виконанні завдань в середовищі Borland Pascal слід слово «графічне вікно» замінити на «екран». Тобто замість «намалюйте в центрі графічного вікна» слід читати «намалюйте в центрі екрану» і т.п. Увійшовши в графічний режим, визначте ширину і висоту графічного вікна в пікселях. Виведіть її на екран, не виходячи з графічного режиму. Намалюйте кола радіусом 20 пікселів (а) в центрі графічного вікна, (б) по кутах вікна. За допомогою процедур малювання ліній намалюйте квадрат зі стороною 200 пікселів так, щоб він відображався по центру вікна.

Створіть процедуру, малює квадрат заданої величини по центру вікна. Перейдіть в графічному вікні 1000 точок (а) з випадковими координатами, (б) з випадковими координатами і лежать всередині квадрата з попередньої задачі. Ускладнений варіант: з випадковими координатами, що лежать всередині заданої окружності. Розпочніть відтворення орнаменти, оформивши малювання їх окремих елементів у вигляді процедур: 7. Намалюйте будиночок, над яким світить сонечко.

Ускладнений варіант: (а) Сонечко має промінчики, (б) сонечко рухається по небу: картинка малюється процедурою, параметрами якої є координати сонечка. Розпочніть відтворення малюнки, отримані за допомогою поворотів трикутника і кола: 9. Намалюйте графік функції. Параметрами процедури повинні бути інтервал значень t, амплітуда a, частота і кількість точок, що виводяться на графік. Наступний розділ. Taras WindowWidth і WindowHeight повертають ширину і висоту в момент виконання програми.

Якщо ти розтягуєш вікно, то це, очевидно, відбувається вже після того, як твій код виконався. Дізнатися розмір після розтягування все-таки можна, але для цього треба, щоб якась частина програми виконувалася не відразу, а у відповідь на виникнення події. Прочитати про них можна в довідці по F1 (розділ Уроки PascalABC.NET Приклади Найпростіші події). Для прикладу: uses GraphABC; procedure PressEnter (ch: char); var ww, wh: integer; begin if ord (ch) = VK_Enter then begin ww: = WindowWidth; wh: = WindowHeight; writeln (ww, ',', wh); end; end; begin // OnKeyPress - змінна процедурного типу, описана як // OnKeyPress: procedure (ch: char); // Привласнене їй значення-процедура будуть викликатися при натисканні будь-якої // клавіші на клавіатурі OnKeyPress: = PressEnter; end. Можна розтягнути вікно, натиснути Enter і отримати його поточні розміри. У 6 - і, правда, накладаються. Треба використовувати процедуру DrawCircle.

Малює тільки окружність без заливки. Taras Виглядає добре) За стилем реалізації приходить в голову таке: 1) Напрошується розбиття програми на три частини (кола і лінії по краях, візерунок, круги в середині). Відповідні частини можна було б помістити в окремі процедури або, хоча б, відокремити один від одного порожніми рядками. Потрібно щоб структура програми була очевидна відразу, а не ставала зрозуміла після декількох хвилин уважного углядування. 2) Явна використання числових констант, як, наприклад, в x: = 320 - (12 * (2 * r + 4)) div 2; y: = 240 - 20; це не добре.

Було б набагато краще, якби відповідні значення були присвоєні змінним з промовистими назвами. А вже з цих змінних складалися б вираження. Що таке 320 і 240 зрозуміло відразу (хоча, звичайно, використовувати WindowWidth в вираженні було б правильніше).

А ось дізнатися, що є 12, 4 і 20, без аналізу програми цілком неможливо. Гарна з точки зору стилю програма не повинна вимагати «забігання вперед» для свого розуміння. 3) Пам'ятаю, коли ще працював викладачем, вимагав від студентів робити кількість кроків спіральок в візерунку параметром процедури. Якраз, щоб всю спіральку окремими line'мі не малював. Але, в цілому, все дуже непогано.

>> а промінчики у сонця треба процедурою Line малювати? А як виконувати заливку? Промінчики - так, це лінії. Колір заливки: procedure SetBrushColor (c: Color); Процедура Circle якраз і малювала тебе залиту окружність. Просто колір заливки за замовчуванням білий.

Взагалі, за різноманітними графічними процедурами можна сходити в довідку по F1, розділ Стандартні модулі Модуль GraphABC GraphABC: графічні примітиви •. Taras Малювання засобами PascalABC відбувається дуже повільно. Поки воно йде, картинка на екрані встигає багато разів оновитися.

Звідси мерехтіння. Тобто, ми бачимо не остаточну картинку, а процес її малювання. Остаточну картинку в общем-то не бачимо - як тільки вона вишикувалася, ми її тут же стираємо і починаємо новий цикл малювання.

Для боротьби з цим ефектом придумали. Ідея в тому, щоб спочатку побудувати картинку в пам'яті (не вивільняючи на екран), а потім відобразити новий кадр на екрані цілком, без проміжних варіантів, де не вистачає половини промінчиків.

У PascalABC виявляється є підтримка подвійний буферизації. Для цього на початку програми викликаємо процедуру LockDrawing; Після цього всі команди малювання будуть створювати картинку в пам'яті (в так званому вторинному буфері). Безпосередньо на екрані нічого малюватися не буде. Після того, як черговий кадр анімації повністю відмалювали (тобто перед ClearWindow), потрібно викликати процедуру Redraw; яка, власне, і викличе перерисовку всієї картини. На рахунок, щоб лучілось, це скоріше математичне творчість. Треба придумати формулу для зміни довжини промінчиків. Підказувати не хочу - нехай у тебе по-своєму світитися)) •.

Оксана спасибі за коментарі, на жаль так і не придумала формулу для лучения (((С процедурою LockDrawing дійсно картинка не мерехтить. А ось частково завдання 8 (з трикутниками вирішила не морочитися): uses GraphABC; var x, y, r, i, z, z1, k: integer; a, b: real; procedure BolshoiKrug (x1, y1, r1: integer); begin DrawCircle (x1, y1, r1); end; begin x: = 320; y: = 240; r : = 200; a: = 1.26; BolshoiKrug (x, y, r); for k: = 1 to 5 do begin b: = a; z: = x + round (r div 2 * cos (a)); z1 : = y-round (r div 2 * sin (a)); b: = b + 0.04; for i: = 1 to 9 do begin z: = x + round (r div 2 * cos (b)); z1 : = y-round (r div 2 * sin (b)); DrawCircle (z, z1, r div 2); b: = b + 0.04; end; a: = a + 1.26; end; end. Taras Зауваження такі : 1) По можливості слід уникати явного використання числових констант. Думка з тоящая, наприклад, за операцією a: = a + 1.26; принаймні, відразу не очевидна. Варто було б ввести параметр для числа груп кіл і висловити цю надбавку через нього. Наприклад, N: = 5; // Кількість груп da: = 2 * pi / N; // то саме 1.26 2) Присвоєння на початку a: = 1.26; є нічим іншим як завдання кута повороту всієї конструкції.

Однак при повороті на 1.26 радіан картинка якраз не зміниться. Тобто це те ж саме, що a: = 0; 3) Операції z: = x + round (r div 2 * cos (a)); z1: = y - round (r div 2 * sin (a)); в зовнішньому циклі безглузді, так як присвоєні значення ніде не використовуються. 4) Напрошується заміна b: = a.

B: = b + 0.04; в зовнішньому циклі однією операцією. Втім, після такої заміни стає очевидним, що додаток 0.04 до b еквівалентно збільшенню його ж до початкового значення a.

Тобто це просто ще один спосіб повернути всю конструкцію тепер уже на 0.04 радіана. Думаю, цього не слід робити зовсім. Ну, а в цілому - так, задача вирішена. Решебник За білоруський Мові 2 Клас 2 Частина Свириденко .

Після запуску PascalABC, за замовчуванням, запускається текстовий режим. Для роботи з графікою служить окреме графічне вікно. Щоб його відкрити, необхідно підключити модуль GraphABC. У цьому модулі міститься великий набір процедур і функцій, призначених для роботи з графічним екраном, а також деякі вбудовані константи і змінні, які можуть бути використані в програмах з графікою. З їх допомогою можна створювати різноманітні графічні зображення і супроводжувати їх текстовими написами. Підключення здійснюється в розділі описів. Формат підключення модуля GraphABC: uses GraphABC; Початок координат графічного вікна модуля знаходиться у верхньому лівому кутку.

Ось x спрямована вправо, а вісь y - вниз. Координати обчислюються в пікселях. Всі команди бібліотеки Graph ABC є підпрограмами і описані у вигляді процедур і функцій. Для того, що б команда виконалася необхідно вказати команду і задати значення параметрів. Деякі команди бібліотеки GraphABC Ім'я та параметри команди Дія команди Line (x1, y1, x2, y2) Малює відрізок з точки з координатами (x1, y1) в точку з координатами (x2, y2) LineTo (x, y) Малює відрізок з поточної точки в точку з координатами (x, y) (відповідає команді сместіться_в з опущеним пером для виконавця Чертежник) Rectangle (x1, y1, x2, y2) Малює контур прямокутника зі сторонами паралельними сторонам екрана. Точки з координатами (x1, y1) і (x2, y2) визначають діагональні вершини прямокутника. FillRect (x1, y1, x2, y2); Заливає прямокутник, заданий координатами протилежних вершин (x1, y1) і (x2, y2), кольором поточної кисті.

Circle (x, y, radius); Малює коло з центром в точці з координатами (x, y) і радіусом radius. Ellipse (x1, y1, x2, y2); Малює еліпс, заданий своїм описаним прямокутником з координатами протилежних вершин (x1, y1) і (x2, y2). TextOut (x, y, text) Виводить Text на екран. Початок тексту в точці з координатами (x, y) SetPixel (x, y, color) Зафарбовує кольором color точку з координатами (x, y) SetPenColor (color) Задає колір малювання ліній. Параметр color - число в проміжку від 0 до 256 3-1.

SetPenWidth (n) Задає товщину малювання ліній. Параметр n - число в проміжку від 1 до 50 SetPenStyle (ps) Встановлює стиль пера, що задається параметром ps. Стилі пера задаються наступними іменованими константами: Значення Опис psSolid Суцільна лінія psDash Штрихова лінія psDot Пунктирна лінія psDashDot Штріхпунктірная лінія psDashDotDot Лінія - штрих і два пунктиру psClear Відсутність лінії Arc (x, y, r, a1, a2) Малює дугу окружності з центром в точці (x, y) і радіусом r, укладеної між двома променями, що утворюють кути a1 і a2 з віссю OX (a1 і a2 - речові, задаються в градусах і відраховуються проти годинникової стрілки). FloodFill (x, y, color); Заливає область одного кольору кольором color, починаючи з точки (x, y). SetBrushColor (color) Встановлює колір кисті, що задається параметром color SetBrushStyle (bs); Встановлює стиль кисті, що задається параметром bs. Стилі пензля задаються наступними іменованими константами: Константа Константа bsSolid bsClear bsCross dsDiagCross bsHorizontal bsVertical bsBDiagonal bsFDiagonal SetFontColor (color); Встановлює колір шрифту SetFontSize (sz); Встановлює розмір шрифту в пунктах. ClearWindow; Очищає графічне вікно білим кольором ClearWindow (c); Очищає графічне вікно кольором (c).

SetWindowSize (w, h) Встановлює ширину і висоту графічного вікна. Приклад програми, яка малює окружність в квадраті program graf_1; uses graphABC; begin SetWindowSize (300,300); // установка розміру про КНА SetPenStyle (psdash); // установка стилю ліній SetPenWidth (10); // установка товщини ліній SetPenColor (clyellow); // установка кольору ліній Rectangle (50,50,250,250); // малювання прямокутника SetPenColor (clred); // установка кольору ліній Circle (150,150,50); // малювання окру жності end. Результат виконання програми.

Gt;> а промінчики у сонця треба процедурою Line малювати?
А як виконувати заливку?