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 -


 

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

70147. Расчет и выбор посадок с зазором, с натягом, колец подшипников качения 989.5 KB
  Взаимозаменяемостью издедий (машин, приборов, механизмов и т.д.), их частей или других видов продукции (сырья, материалов, полуфабрикатов и т.д.) называют их свойство равноценно заменять при использовании любой из множества экземпляров изделий, их частей или иной продукции...
70149. Отопление и вентиляция жилого четырехэтажного здания 143.02 KB
  Система отопления Выбор системы отопления и типа нагревательных приборов; Тепловой расчет стояка; Гидравлический расчет системы отопления; Расчет элеваторной установки; Расчет нагревательных приборов; Вентиляция Нормы вытяжки воздуха...
70150. Отопление и вентиляция жилого четырёхэтажного здания (жилого дома) 336.12 KB
  Назначение здания - жилой дом. СНиП- 23-02-03 «Тепловая защита зданий» СНиП- 23-01-99 «Строительная климатология» Район постройки г.Татарск Число этажей- 4 Температура воздуха наиболее холодной пятидневки, обеспеченностью 0,92 t= - 39 Температура наиболее холодных суток, обеспеченностью 0,92 t= - 41...
70151. Отопление и вентиляция жилого четырехэтажного здания в г. Минусинск 1.05 MB
  Район постройки г. Минусинск Число этажей- 4 Расчетная температура наружного воздуха обеспеченностью 0,92 t=-42 Температура холодных суток t=-43 Температура среднего отопительного периода t=-9,5 Средняя скорость ветра за январь...
70152. Деревянный каркас одноэтажного производственного здания 771.5 KB
  Ограждающей конструкцией покрытия является утеплённая клеефанерная плита с одной верхней обшивкой. Размер панели в плане 1518-4180 мм. Обшивка плиты выполнена из фанеры клееной повышенной водостойкости марки ФСФ ГОСТ 3916.2-96, порода древесины шпона фанеры – лиственница.
70154. Проектирование электрической печи сопротивления СШЗ-15.15/9 497 KB
  Назначение: втулки пальцы шестерни валики толкатели и другие цементируемые детали к которым предъявляется требование высокой поверхностной твердости при невысокой прочности сердцевины детали работающие в условиях износа при трении.
70155. Планировка участка по ремонту ДВС 4.4 MB
  Целью данного дипломного проекта является оценка существующей структуры автосервиса, освоение навыков организации и управления предприятием, анализ существующей технической базы обслуживания и ремонта автомобилей с внесением новых конструкторских разработок. В рамках данного проекта предстоит рассчитать городское СТО с детальной разработкой участка по ремонту двигателя.