12402

РОДОСЛІДЖЕННЯ АЛГОРИТМУ ДИНАМІЧНОЇ ГРАФІКИ

Лабораторная работа

Информатика, кибернетика и программирование

ЛАБОРАТОРНА РОБОТА № 7 РОДОСЛІДЖЕННЯ АЛГОРИТМУ ДИНАМІЧНОЇ ГРАФІКИ Ціль лабораторної роботи складається з вивчення: структури і призначення елементів інтегрованого середовища С Buіlder для розробки функцій прикладної програми С до блоксхем алгоритмів з динамічної...

Украинкский

2013-04-27

75 KB

1 чел.

ЛАБОРАТОРНА РОБОТА № 7

РОДОСЛІДЖЕННЯ АЛГОРИТМУ ДИНАМІЧНОЇ ГРАФІКИ

Ціль лабораторної роботи складається з вивчення: структури і призначення елементів інтегрованого середовища С++ Buіlder для розробки функцій прикладної програми С++ до блок-схем алгоритмів з динамічної графіки на формі вікна.

1. Загальні зведення до динамічної графіки на формі вікна

Динамічна графіка на формі вікна програми будується на принципах мультиплікації окремих кадрів з зображенням. Для динамічної графіки необхідно будувати набір кадрів і кожних з них трішечки повинен відрізнятися деяким елементом від попереднього кадру в послідовності. Динамічне графічне зображення виникає за рахунок перегляду кадрів у завданій послідовності при відповідному інтервалі часу між змінами кадрів. Зменшення інтервалу часу між кадрами збільшує динаміку графічного зображення, а збільшення інтервалу часу – навпаки уповільнює динаміку спостереження графічних кадрів.

В С++ Builder для розробки прикладних програм з керуванням інтервалів часу використовується компонента Timer . Таймер має дві властивості , яки дозволяють керувати роботою компоненти Timer :

- перша властивість Interval визначає в мілісекундах інтервал зміни часу між кадрами динамічної графіки або іншими подіями в прикладній програмі. Наприклад, значення 500 для властивості Interval фізично відповідає 0,5 сек.;

- друга властивість Enabled  доступність до роботи компоненти.

Властивість Interval задає період спрацьовування таймеру і може налаштовуватись при проектуванні форми або встановлюватись програмно при роботі програми. Якщо при запуску програми властивість Interval завдано, тоді активним буде у програмі С++ обробник події OnTimer  кожен раз після закінчення інтервалу часу, завданого у властивості Interval . Якщо задати для   Interval = 0 або для  Enabled = false, тоді таймер стане вимкнутим. Для включення відліку часу потрібно задати Enabled = true. Оператори у програмі С++ для керування властивостями компоненти таймер записуються у таких форматах:  

Timer->Interval = 5000;

Timer->Enabled = true; .

Кнопка SpeedButton з фіксацією положення (натиснута / не натиснута) може мати напис або зображення іконки. У властивості Caption задається напис на кнопку та можливо додати зображення іконки у властивості Glyph . 

2. Постановка задачі до виконання лабораторної роботи

При виконанні лабораторної роботи потрібно створити програму С++ для роботи у Wіndows, в який на формі вікна можливо буде вести спостереження за динамічною графікою зображення та досліджувати при допомозі відладчіка С++ Builder у покроковому режимі виконання алгоритму з динамічної графіки. По результатах досліджень алгоритму з динамічної графіки потрібно:

- визначити перелік функцій, яки забезпечують динаміку для графічного зображення на формі програми С++;

- скласти специфікацію на визначені функції та їх призначення у програмі С++ з динамічним графічним зображенням на формі;

- розробити блок-схеми алгоритмів до функцій, записаних до специфікації;

- розробити блок-схему алгоритму з функціонування програми С++ з динамічним графічним зображенням на формі.

3. Послідовності дій і команд для програмування

задачі з лабораторної роботи

Крок 1.  Активізуємо проект файлів для нової програми С++ та виконайте команду для зберігання їх на диску в задану папку (каталог):

  •  Виконайте команду Fіle/New Applіcatіon, щоб з'явилася нова чиста форма Form1;
  •  Перейдіть у вікно інспектора об'єкта і у властивості Captіon задайте назву лабораторної роботи " Динамічна графіка ,  щоб на заголовку вікна форми програми С++ замість назви Form1 з'явився напис " Динамічна графіка ";
  •  Збережить новий проект файлів разом з порожньою формою і змінамі в заголовку вікна. Це автоматично активізує новий проект файлів і C++ Buіlder запам'ятає шлях для швидкого збереження змін у файлах, розробляємої програми. Для збереження файлів проекту відрийте на диску таки папки D:\LA_NN\LAB-Dinamica, де NN - номер навчальної групи;
  •  Далі у меню Fіle виберіть команду Save Project As та при появі запиту на збереження змінюємо назву файлу Unіt1 на файл U_dinamica.срр, а пропонуєму назву проекту Project1.bpr змінюємо на P_dinamica.bpr.

Крок 2.  Далі потрібно скомпонувати форму для прикладної програми з елементами, показаними на рис. 1.

Рис. 1. Форма програми для роботи з динамічною графікою.

Крок 3. Після закінчення розроби форми програми по рис. 1 потрібно у вікні редактора текстів сформувати наступний лістинг команд для обробок подій при роботі з динамічною графікою в Image.

//------------------------------- U_dinamica.срр --------------------------------------

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "U_dinamica.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

short int num = 0;

short int H=20;                              // шаг

short int Xpos = 2 * H;                 // координати тіла

short int Ypos = 120;                    // "земля"

short int Hmen = 30;                     // висота тіла

short int Rhead = 10;                    // радіус голови

short int Rhead2 = Rhead / 2;      // радіус ладоньок

short int revers = 1;                      // напрямок руху

short int L = H * 1.41;                  // довжина ноги

//---------------------------------------------------------------------------

void __fastcall TForm1::Draw()

{

short int Yhead;                            // координата голови знизу

switch (num)

{

case 0:

  Yhead = Ypos-H-Hmen;

  Image1->Canvas->MoveTo(Xpos-H,Ypos);

  Image1->Canvas->LineTo(Xpos,Ypos-H);                                  // нога

  Image1->Canvas->LineTo(Xpos+H,Ypos);                                // друга нога

  Image1->Canvas->MoveTo(Xpos,Ypos-H);

  Image1->Canvas->LineTo(Xpos,Yhead);                                   // тіло

  Image1->Canvas->MoveTo(Xpos+revers*H,Yhead-H);

  Image1->Canvas->LineTo(Xpos,Yhead+4);                              // рука

  Image1->Canvas->Ellipse(Xpos+revers*H-Rhead2,Yhead-H-Rhead2,Xpos+revers*H+Rhead2,Yhead-H+Rhead2);

  Image1->Canvas->LineTo(Xpos+revers*H,Yhead+H);           // друга рука

  Image1->Canvas->Ellipse(Xpos+revers*H-Rhead2,Yhead+H-Rhead2,Xpos+revers*H+Rhead2,Yhead+H+Rhead2);

  Image1->Canvas->Ellipse(Xpos-Rhead,Yhead,Xpos+Rhead,Yhead-2*Rhead);

  Image1->Canvas->Rectangle(Xpos-Rhead,Yhead-2*Rhead-1,

                  Xpos+Rhead,Yhead-2*Rhead-4);                                // шляпа

  break;

case 1:

  Yhead = Ypos-L-Hmen;

  Image1->Canvas->MoveTo(Xpos,Ypos);

  Image1->Canvas->LineTo(Xpos,Yhead);

  Image1->Canvas->MoveTo(Xpos,Yhead+4);

  Image1->Canvas->LineTo(Xpos+revers*L,Yhead+4);

  Image1->Canvas->Ellipse(Xpos+revers*L-Rhead2,Yhead+4-Rhead2,Xpos+revers*L+Rhead2,Yhead+4+Rhead2);

  Image1->Canvas->Ellipse(Xpos-Rhead,Yhead,Xpos+Rhead,Yhead-2*Rhead);

  Image1->Canvas->Rectangle(Xpos-H / 2,Yhead-2*Rhead-1,

                            Xpos+H / 2,Yhead-2*Rhead-4);

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

Draw();

if ((Xpos >= Image1->Picture->Width-H)||(Xpos <= H))

  revers = -revers;

Xpos = Xpos + revers * H;

num = 1 - num;

Draw();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BRunClick(TObject *Sender)

{

Timer1->Enabled = ! Timer1->Enabled;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

//можна зняти коментар для зміни фону

//  if (OpenPictureDialog1->Execute())

//    Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

 Image1->Canvas->Brush->Color = 0;

 Image1->Canvas->Rectangle(90,0,200,100);

 Image1->Canvas->Brush->Color = clWhite;

 Image1->Canvas->MoveTo(0,Ypos+3);

 Image1->Canvas->Pen->Width = 4;

 Image1->Canvas->LineTo(Image1->ClientWidth,Ypos+3); // çåìëÿ

 Image1->Canvas->Pen->Width = 1;

 Image1->Canvas->Pen->Mode = pmNotXor;

Draw();

}

//---------------------------------------------------------------------------

//--------------- U_dinamica.h---------------------------------------

//---------------------------------------------------------------------------

#ifndef UMult1H

#define UMult1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Buttons.hpp>

#include <Dialogs.hpp>

#include <ExtCtrls.hpp>

#include <ExtDlgs.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TImage *Image1;

TSpeedButton *BRun;

TTimer *Timer1;

TOpenPictureDialog *OpenPictureDialog1;

void __fastcall FormCreate(TObject *Sender);

void __fastcall BRunClick(TObject *Sender);

void __fastcall Timer1Timer(TObject *Sender);

private: // User declarations

public:  // User declarations

void __fastcall Draw();

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

//-----------------------------------------------------------------

/------------ P_dinamica.cpp ---------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

USERES("P_dinamica.res");

USEFORM("U_dinamica.cpp", Form1);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

 Application->Initialize();

 Application->CreateForm(__classid(TForm1), &Form1);

 Application->Run();

}

catch (Exception &exception)

{

 Application->ShowException(&exception);

}

return 0;

}

//---------------------------------------------------------------------------

PAGE  - 1 -


 

А также другие работы, которые могут Вас заинтересовать

53749. Прогнозирование экономических показателей. Модели финансового планирования 27.5 KB
  Экономический прогноз — это научно обоснованное предвидение возможных направлений и результатов развития субъектов хозяйствования и их структурных подразделений. Методы экономического прогнозирования можно условно объединить в две группы. Наверняка все из вас пускали самолетики лодочки красовались в треуголке из бумаги различных форм фигурок это и есть оригами. Однако независимые традиции складывания из бумаги хоть и не столь развитые как в Японии существовали среди прочего в Китае Корее Германии и Испании.
53750. День святого Валентина 43.5 KB
  Как они называются валентинки А знаете ли вы что согласно легенде в далекие времена жестокий римский император Клавдий II решил что одинокий мужчина без семьи и жены лучше сражается на поле битвы и запретил мужчинам жениться. Сегодня нам предстоит пусть с опозданием но изготовить валентинки для своих родных а может и любимых своими руками потому что мы знаем знаменитую пословицу: Лучше поздно чем ...
53751. Звери в лесу 48.5 KB
  Закрепить навык разметки по шаблонам, вырезание деталей сложной формы в виде встречного реза, выполнение алгоритма изготовления аппликации умение составлять композицию, намазывать детали клеем используя подкладной лист, приклеивать последовательно детали аппликации используя притирочный лист.
53752. Целеполагание в воспитательной работе педагога 62.5 KB
  Сущность цели и целеполагания в воспитательной работе педагога. Особенности цели и целеполагания в воспитательной работе педагога. В педагогической литературе встречаются различные определения цели Рожков М. Важность правильной постановки цели трудно переоценить.
53753. Ordering food 372 KB
  On the slide you see the picture with a lot of fruit and vegetables. You must write the name of them in your card in right column. If you know more words, you can write them too.
53754. Народные движения первой четверти XVIII века 140.5 KB
  Я уроженец станицы Зимовейской под моим командованием небольшая флотилия кораблей разгромила флот иранского шаха в 1671 году меня предала казацкая верхушка хотя именно я поднял восстание с боярами воеводами и другими притеснителями народа . Сейчас ребята мы с вами оказались на Юго Восток России в начале18 веке здесь произошло крупное восстание. Астраханское восстание В 18 веке г Астрахань Рассказ учителя о восстании в Астрахани. Вспыхнув в Астрахани восстание быстро распространилось на...
53755. АЛГОРИТМЫ В НАШЕЙ ЖИЗНИ 108.5 KB
  Формирование умения грамотно излагать свою точку зрения Задачи урока: Развивать логическое и алгоритмическое мышление умение анализировать делать выводы; Ввести понятие алгоритм витражи; Ознакомить с видами алгоритмов; Отработать навык создания орнамента по алгоритму. Разминка Сейчас мы с вами проведем небольшую разминку нам необходимо будет расшифровать слово это и...
53756. Усі уроки технології. 10 клас. Рівень стандарту 2.76 MB
  Базовий модуль «Проектна технологія у перетворювальній діяльності людини» має на меті поглиблене оволодіння старшокласниками провідними засадами проектно-технологічної діяльності, елементами пошукової діяльності, розвиток творчого та критичного мислення, формування вмінь не лише знаходити потрібні знання, а й застосовувати їх на практиці для досягнення поставлених завдань, що є основою будь-якого виду виробничої діяльності людини.
53757. Факторы, определяющие дивидендную политику 27 KB
  Дивидендная политика – это политика распределения прибыли в акционерном обществе. В качестве основной цели дивидендной политики можно сформулировать максимизацию рыночной стоимости компании.