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 -


 

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

23378. Определение скорости звука в воздухе 333 KB
  При распространении волны частицы среды колеблются около своих положений равновесия. Упругие волны бывают продольными и поперечными. В продольных волнах частицы среды колеблются в направлении распространения волны. В поперечных волнах частицы среды колеблются в направлениях перпендикулярных направлению распространения волны.
23379. Определение скорости полёта пули с помощью баллистического крутильного маятника 1.24 MB
  Мясников Определение скорости полёта пули с помощью баллистического крутильного маятника Методические указания к выполнению лабораторной работы № 10 по курсу механики молекулярной физики и термодинамики. Цель работы: ознакомиться с принципом действия баллистического крутильного маятника и с его помощью определить скорость полета пули. При определении скорости полета пули в данной работе используется закон сохранения момента импульса : если момент внешних сил относительно оси вращения равен нулю то где момент инерции системы маятник...
23380. Определение коэффициента трения качения методом наклонного маятника 2.35 MB
  Орлова Определение коэффициента трения качения методом наклонного маятника Методические указания к выполнению лабораторной работы № 12 по курсу механики молекулярной физики и термодинамики. Цель работы: экспериментальное изучение основных закономерностей возникающих при трении качения и определение коэффициента трения качения методом наклонного маятника. Сплошь и рядом силы трения являются вредными. Таковы например силы трения возникающие между осью и втулкой а также между другими деталями машины.
23381. Определение коэффициента внутреннего трения жидкости касторового масла по методу Стокса 381 KB
  Нехаенко Определение коэффициента внутреннего трения жидкости по методу Стокса Методические указания к выполнению лабораторной работы № 13 по курсу механики молекулярной физики и термодинамики. Внутреннее трение вязкость это свойство реальных жидкостей оказывать сопротивление перемещению одной части жидкости относительно другой. При перемещении одних слоев реальной жидкости относительно других возникают силы внутреннего трения направленные по касательной к поверхности слоев. и зависит от того насколько быстро меняется скорость...
23382. Определение ускорения свободного падения при помощи физического маятника 664 KB
  Китаева Определение ускорения свободного падения при помощи физического маятника Методические указания к выполнению лабораторной работы № 14 по курсу механики молекулярной физики и термодинамики. Цель работы: определение ускорения свободного падения при помощи физического маятника. Запишем основное уравнение динамики вращательного движения относительно неподвижной оси : 6 где момент инерции физического маятника...
23383. Определение коэффициента динамической вязкости воздуха 535 KB
  Нехаенко Определение коэффициента динамической вязкости воздуха Методические указания к выполнению лабораторной работы № 15 по курсу механики молекулярной физики и термодинамики. Цель работы заключается в определении коэффициента динамической вязкости воздуха методом истечения воздуха через капилляр. Сила внутреннего трения между двумя слоями газа подчиняется закону Ньютона: 1 где коэффициент динамической вязкости газа...
23384. Определение погрешностей при измерении периода колебаний математического маятника 1.3 MB
  Цель работы изучить характер распределения погрешностей прямых измерений и оценить их величину при определении периода колебания математического маятника. В задачу измерений кроме определения измеряемой величины входит оценка допущенных погрешностей. Систематические погрешности обусловлены ограниченной точностью измерительных приборов неточностью метода измерений неточностью изготовления объекта измерений. Оценка случайных погрешностей прямых измерений.
23385. Определение ускорения свободного падения с помощью прибора (машины) Атвуда 653 KB
  Прибор Атвуда предназначен для изучения прямолинейного равномерного и равномерноускоренного движения а в частности для определения ускорения свободного падения тел. 1 закон Ньютона: любое тело сохраняет состояние покоя или равномерного и прямолинейного движения до тех пор пока воздействие со стороны других тел не заставит его изменить это состоянии то есть: если 1 где равнодействующая всех сил действующих на тело. Запишем II закон Ньютона в виде:...
23386. Определение коэффициента поверхностного натяжения жидкости 276 KB
  Нехаенко Определение коэффициента поверхностного натяжения жидкости Методические указания к выполнению лабораторной работы № 3 по курсу молекулярной физики. Каждая молекула жидкости в течение некоторого времени колеблется около определённого положения равновесия после чего скачком переходит в новое положение отстоящее от исходного на расстоянии порядка межатомного. На молекулу жидкости со стороны окружающих её молекул действуют силы взаимного притяжения которые с расстоянием быстро убывают. Выделим внутри жидкости какуюлибо молекулу А...