Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_ЛБР_ММ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.43 Mб
Скачать

7. Контрольні запитання для підготовки до лабораторної роботи :

1. Обгрунтуйте поняття "модель" та "моделювання".

2. Вкажіть основні типи класичних моделей механічних систем.

3. Обгрунтуйте поняття "динамічна система".

4. Що таке дискретна модель?

5. Що таке континуальна модель?

6. Що таке масив значень?

7. Яким чином параметризуються об’єкти?

8. Обгрунтуйте поняття "локальні та глобальні дані".

9. Що таке функція користувача? Фактичні та формальні параметри.

10. Вкажіть класи обробки графічних зображень.

12. Які основні методи побудови графічних зображень?

13. Вкажіть методи зафарбування об’єктів засобами C++ Bilder.

14. Вкажіть варіанти створення анімації.

Додаток А. Завдання до виконання лабораторної роботи

Рисунок А.1 – Варіанти бойків

Рисунок А.2 – Варіанти інструментів

Рисунок А.3 – Дані для системи “бойок – інструмент - масив”.

Рисунок А.4 – Параметризація контенуальної системи “бойок – інструмент - масив”

в системі AutoCad.

Рисунок А.5 – Параметризація дискретної системи “бойок – інструмент - масив”

в системі AutoCad.

Додаток B. Листинг програми – аналога

.

Рисунок B.1 – Інтерфейс для введення даних та виведення результатів виконання всіх чотирьох лабораторних робіт

Далі наводиться текст Unit1.cpp файлу - програмного коду та Unit1.h файлу - заголовочного файлу опису компонент, методів та змінних.

Unit1.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

dany(); // функція зчитування даних

Form1->Visible=false; // перша форма невидима

Form2->Visible=true; // перехід на другу форму

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{

dany(); // функція зчитування даних

Form1->Visible=false; // перша форма невидима

Form3->Visible=true; // перехід на третю форму

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

dany(); // функція зчитування даних

Form1->Visible=false; // перша форма невидима

Form4->Visible=true; // перехід на четверту форму

}

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

void __fastcall TForm1::Button4Click(TObject *Sender)

{

dany(); // функція зчитування даних

Form1->Visible=false; // перша форма невидима

Form5->Visible=true; // перехід на п’яту форму

}

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

void dany(void)

{

lb[1]=StrToFloat(Form1->Edit1->Text);

lb[2]=StrToFloat(Form1->Edit2->Text);

lb[3]=StrToFloat(Form1->Edit3->Text);

lb[4]=StrToFloat(Form1->Edit4->Text);

lb[5]=StrToFloat(Form1->Edit5->Text);

db[1]=StrToFloat(Form1->Edit6->Text);

db[2]=StrToFloat(Form1->Edit7->Text);

db[3]=StrToFloat(Form1->Edit8->Text);

db[4]=StrToFloat(Form1->Edit9->Text);

db[5]=StrToFloat(Form1->Edit10->Text);

rb[1]=StrToFloat(Form1->Edit16->Text);

li[1]=StrToFloat(Form1->Edit11->Text);

li[2]=StrToFloat(Form1->Edit12->Text);

li[3]=StrToFloat(Form1->Edit13->Text);

di[1]=StrToFloat(Form1->Edit14->Text);

di[2]=StrToFloat(Form1->Edit15->Text);

ri[1]=StrToFloat(Form1->Edit21->Text);

ri[2]=StrToFloat(Form1->Edit22->Text);

lm[1]=StrToFloat(Form1->Edit17->Text);

dm[1]=StrToFloat(Form1->Edit18->Text);

}

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

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Close(); // вихід з додатку

}

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

Unit1.h

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

#ifndef Unit1H

#define Unit1H

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

#include <Menus.hpp>

#include <jpeg.hpp>

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

class TForm1 : public TForm

{ // перелік класів компонент, які використовуються на першій формі

__published: // IDE-managed Components

TImage *Image2;

TLabel *Label19;

TLabel *Label20;

TButton *Button1;

TButton *Button2;

TLabel *Label21;

TLabel *Label22;

TButton *Button3;

TLabel *Label23;

TButton *Button4;

TLabel *Label24;

TLabel *Label25;

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TLabel *Label4;

TLabel *Label5;

TLabel *Label6;

TLabel *Label7;

TLabel *Label8;

TLabel *Label9;

TLabel *Label10;

TLabel *Label11;

TLabel *Label12;

TLabel *Label13;

TLabel *Label14;

TLabel *Label15;

TLabel *Label16;

TLabel *Label17;

TLabel *Label18;

TEdit *Edit1;

TEdit *Edit2;

TEdit *Edit3;

TEdit *Edit4;

TEdit *Edit5;

TEdit *Edit6;

TEdit *Edit7;

TEdit *Edit8;

TEdit *Edit9;

TEdit *Edit10;

TEdit *Edit11;

TEdit *Edit12;

TEdit *Edit13;

TEdit *Edit14;

TEdit *Edit15;

TButton *Button5;

TLabel *Label26;

TLabel *Label27;

TLabel *Label28;

TEdit *Edit17;

TEdit *Edit19;

TEdit *Edit18;

TLabel *Label29;

TEdit *Edit16;

TLabel *Label30;

TEdit *Edit20;

TLabel *Label31;

TLabel *Label32;

TEdit *Edit22;

TEdit *Edit21;

// прототипи методів, які викоистовуються на першій формі

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

};

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

extern PACKAGE TForm1 *Form1,*Form3,*Form2,*Form4,*Form5;

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

#endif

void dany(void); // прототип функції зчитування даних

float lb[6],db[6], rb[3], // масиви даних точок бойка

li[4],di[3], ri[3], // масиви даних точок інструменту

lm[2],dm[2]; // масиви даних точок породи

Рисунок В.2 – Результат виконання програми - роздрук дисплею з відображенням елементів

керування анімацією

Unit2.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit2.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

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

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

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

void __fastcall TForm2::Button1Click(TObject *Sender)

{

float kd[4]={1,2,3,10},k=4,a[40],b[40];

// виведення дискретної моделі

a[0]=Image1->Width/10; b[0]=Image1->Height/4;

a[1]=a[0]+kd[3]*kd[1]*k; b[1]=b[0];

a[2]=a[1]+kd[1]*kd[1]*kd[2]*k; b[2]=b[1]+kd[1]*kd[1]*kd[2]*k;

a[3]=a[1]; b[3]=b[1]+kd[1]*kd[2]*k;

a[4]=a[1]-kd[3]*k; b[4]=b[1]+kd[1]*kd[2]*k;

a[5]=a[2]; b[5]=b[3];

a[6]=a[5]+kd[3]*k; b[6]=b[3];

a[7]=a[6]; b[7]=b[6]+kd[3]*k;

a[8]=a[6]; b[8]=b[6]-kd[3]*k;

//визначення точок для малювання пружини

a[9]=a[8]+kd[3]*k; b[9]=b[8];

a[10]=a[9]+kd[2]/kd[1]*k; b[10]=b[9]+kd[2]*k;

a[11]=a[10]+kd[2]*k; b[11]=b[9]-kd[2]*k;

a[12]=a[11]+kd[2]*k; b[12]=b[9]+kd[2]*k;

a[13]=a[12]+kd[2]*k; b[13]=b[9]-kd[2]*k;

a[14]=a[13]+kd[2]*k; b[14]=b[9]+kd[2]*k;

a[15]=a[14]+kd[2]*k; b[15]=b[9]-kd[2]*k;

a[16]=a[15]+kd[2]/kd[1]*k; b[16]=b[9];

a[17]=a[16]+kd[2]/kd[1]*kd[3]*k; b[17]=b[9];

// визначення точок для малювання дисипації

a[18]=a[7]+kd[1]*kd[3]*k; b[18]=b[7];

a[19]=a[18]; b[19]=b[18]+kd[2]*k;

a[20]=a[18]; b[20]=b[18]-kd[2]*k;

a[21]=a[20]-kd[0]*k; b[21]=b[20]-kd[0]*k;

a[22]=a[19]-kd[0]*k; b[22]=b[19]+kd[0]*k;

a[23]=a[22]+kd[2]*k; b[23]=b[22];

a[24]=a[21]+kd[2]*k; b[24]=b[21];

a[25]=a[24]; b[25]=b[18];

a[26]=a[17]; b[26]=b[25];

a[27]=a[26]; b[27]=b[6];

a[28]=a[26]+kd[3]*k; b[28]=b[6];

a[29]=a[28]; b[29]=b[17];

a[30]=a[28]+kd[3]*k; b[30]=b[26];

// визначення точок для малювання стрілки

a[31]=a[1]+kd[1]*kd[2]*k; b[31]=b[3];

a[32]=a[31]; b[32]=b[31]+kd[1]*kd[3]*k;

a[33]=a[31]+kd[2]/kd[1]*kd[3]*k; b[33]=b[32];

a[34]=a[33]-kd[1]*kd[1]*k; b[34]=b[33]+kd[1]*k;

a[35]=a[33]-kd[1]*kd[1]*k; b[35]=b[33]-kd[1]*k;

a[36]=a[24]-kd[2]*k; b[36]=b[24];

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

Image1->Canvas->Brush->Style = bsBDiagonal;

Image1->Canvas->Ellipse(a[1],b[1],a[2],b[2]);

for(i=3; i<8; i=i+2)

{

Image1->Canvas->MoveTo(a[i],b[i]);

Image1->Canvas->LineTo(a[i+1],b[i+1]);

}

//пружина

for(i=9; i<18; i++)

Image1->Canvas->LineTo(a[i],b[i]);

//Дисипація

Image1->Canvas->MoveTo(a[7],b[7]);

for(i=18; i<21; i=i+2)

{

Image1->Canvas->LineTo(a[i],b[i]);

Image1->Canvas->MoveTo(a[i+1],b[i+1]);

}

Image1->Canvas->MoveTo(a[22],b[22]);

Image1->Canvas->LineTo(a[23],b[23]);

Image1->Canvas->LineTo(a[24],b[24]);

Image1->Canvas->LineTo(a[36],b[36]);

Image1->Canvas->MoveTo(a[25],b[25]);

Image1->Canvas->LineTo(a[26],b[26]);

Image1->Canvas->LineTo(a[17],b[17]);

Image1->Canvas->MoveTo(a[27],b[27]);

Image1->Canvas->LineTo(a[28],b[28]);

Image1->Canvas->Rectangle(a[29],b[29],a[30],b[30]);

//стрілка

Image1->Canvas->MoveTo(a[31],b[31]);

for(i=32; i<35; i++)

Image1->Canvas->LineTo(a[i],b[i]);

Image1->Canvas->MoveTo(a[33],b[33]);

Image1->Canvas->LineTo(a[35],b[35]);

Image1->Canvas->TextOutA(a[1]-kd[3],b[1]+kd[2]*kd[3],"m");

Image1->Canvas->TextOutA(a[3]-kd[1]*kd[3],b[3]-kd[1]*kd[3],"F(t)");

Image1->Canvas->TextOutA(a[33],b[33],"x");

Image1->Canvas->TextOutA(a[13],b[13]-(kd[3]+kd[2]),"c");

Image1->Canvas->TextOutA(a[25]-kd[2]/kd[1]*kd[3],b[25]+kd[3]+kd[3],"b");

}

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

void param_boyok(void)

{

float rb;

// функція малювання бойка

xb[0]=xb_0; yb[0]=yb_0;

xb[1]=xb[0]+lb[5]*K; yb[1]=yb[0]+db[5]*K;

xb[2]=xb[1]; yb[2]=yb[1]-(db[4]+(db[5]-db[4])/2)*K;

xb[3]=xb[2]+lb[4]*K; yb[3]=yb[2]+db[4]*K;

xb[4]=xb[3]; yb[4]=yb[2]-(db[3]-db[4])/2*K;

xb[5]=xb[4]+lb[3]*K; yb[5]=yb[4]+db[3]*K;

xb[6]=xb[5]; yb[6]=yb[4]-(db[2]-db[3])/2*K;

xb[7]=xb[6]+lb[2]*K; yb[7]=yb[6]+db[2]*K;

xb[8]=xb[7]; yb[8]=yb[7]-(db[1]+(db[2]-db[1])/2)*K;

xb[9]=xb[6]+lb[1]*K; yb[9]=yb[8]+db[1]*K;

xb[10]=xb[9]+li[3]*K; yb[10]=yb[9]-db[1]/2*K;

rb=0.5*(li[3]+(db[1]*db[1])/(4*li[3]));

xb[11]=xb[10]-2*rb*K; yb[11]=yb[10]-rb*K;

xb[12]=xb[10]; yb[12]=yb[10]+rb*K;

Form2->Canvas->Brush->Style=bsSolid;

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

Form2->Canvas->Pen->Color = clRed;

Form2->Canvas->Pen->Width = 3;

Form2->Canvas->Rectangle(xb[0],yb[0],xb[1],yb[1]);

Form2->Canvas->Rectangle(xb[2],yb[2],xb[3],yb[3]);

Form2->Canvas->Rectangle(xb[4],yb[4],xb[5],yb[5]);

Form2->Canvas->Rectangle(xb[6],yb[6],xb[7],yb[7]);

Form2->Canvas->Rectangle(xb[8],yb[8],xb[9],yb[9]);

Form2->Canvas->Arc(xb[11],yb[11],xb[12],yb[12],xb[9],yb[9],xb[9],yb[8]);

}

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

void param_instr(void)

{

// функція малювання інструмента

xi[0]=xi_0; yi[0]=yb[10]-di[2]/2*K;

xi[1]=xi[0]+li[2]*K; yi[1]=yi[0]+di[2]*K;

xi[2]=xi[1]+li[1]*K; yi[2]=yi[1]-(di[2]-di[1])/2*K;

xi[3]=xi[2]; yi[3]=yi[2]-di[1]*K;

Form2->Canvas->Brush->Style=bsSolid;

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

Form2->Canvas->Pen->Color = clRed;

Form2->Canvas->Pen->Width = 3;

Form2->Canvas->Rectangle(xi[0],yi[0],xi[1],yi[1]);

Form2->Canvas->MoveTo(xi[1],yi[1]);

Form2->Canvas->LineTo(xi[2],yi[2]);

Form2->Canvas->LineTo(xi[3],yi[3]);

Form2->Canvas->LineTo(xi[1],yi[0]);

}

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

void param_poroda(void)

{

// функція малювання масиву породи

xm[0]=xm_0; ym[0]=yb[10]-dm[1]/2*K;

xm[1]=xm[0]+lm[1]*K; ym[1]=ym[0]+dm[1]*K;

Form2->Canvas->Brush->Color = clBlack;

Form2->Canvas->Brush->Style = bsBDiagonal;

Form2->Canvas->Pen->Color = clRed;

Form2->Canvas->Pen->Width = 3;

Form2->Canvas->Rectangle(xm[0],ym[0],xm[1],ym[1]);

Form2->Canvas->Brush->Style=bsSolid;

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

}

void __fastcall TForm2::Timer1Timer(TObject *Sender)

{

// підключення таймеру

if (xb[10]+delta<xi_0)

{

xb_0+=delta;

lab_1();

}

else

{

if(xi[3]+delta<xm_0)

{

xi_0+=delta;

xb_0+=delta;

lab_1();

}

else

{

xb_0=50;

xi_0=450;

lab_1();

}

}

}

void __fastcall TForm2::Button5Click(TObject *Sender)

{

// перехід на першу форму

Form2->Visible=false;

Form1->Visible=true;

}

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

void __fastcall TForm2::Button2Click(TObject *Sender)

{

// прискорення руху

if(Timer1->Enabled==false)

Timer1->Enabled=true;

s+=10;

Timer1->Interval=s;

}

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

void __fastcall TForm2::Button3Click(TObject *Sender)

{

// уповільнення руху

if(Timer1->Enabled==false)

Timer1->Enabled=true;

if (s>50)

s-=10;

else

s=10;

Timer1->Interval=s;

}

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

void __fastcall TForm2::Button4Click(TObject *Sender)

{

// пауза

Timer1->Enabled=false;

}

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

void lab_1(void)

{

// функція малювання складових континуальної моделі

Form2->Canvas->Pen->Color = clWhite;

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

Form2->Canvas->Rectangle(0,0,Form2->Width,400);

param_boyok();

param_instr();

param_poroda();

Form2->Canvas->Pen->Color = clBlue;

Form2->Canvas->Pen->Style = psDashDot;

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

Form2->Canvas->MoveTo(10,yb[0]+db[5]/2*K);

Form2->Canvas->LineTo(1000,yb[0]+db[5]/2*K);

}

Unit2.h

#ifndef Unit2H

#define Unit2H

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

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

class TForm2 : public TForm

{

__published: // IDE-managed Components

TButton *Button1;

TButton *Button2;

TButton *Button3;

TButton *Button4;

TButton *Button5;

TTimer *Timer1;

TImage *Image1;

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button5Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

void __fastcall Button4Click(TObject *Sender);

void __fastcall Timer1Timer(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm2(TComponent* Owner);

};

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

extern PACKAGE TForm2 *Form2,*Form1;

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

#endif

void param_boyok(void);

void param_instr(void);

void param_poroda(void);

void lab_1(void);

float lb[7]={0,0.280,0.220,0.140,0.254,0.320};

float db[7]={0,0.165,0.181,0.145,0.136,0.145};

float li[4]={0,0.300,0.300,0.010};

float di[3]={0,0.100,0.165};

float lm[2]={0,0.100};

float dm[2]={0,0.500};

float xb[13],yb[13],xi[5],yi[5],xm[3],ym[3],delta=2;

int s=10, xb_0=50,yb_0=150,xi_0=450,xm_0=700, K=350,k1=3;

int i;

Лабораторна робота №2. Дослідження взаємозв'язку основних параметрів системи

бойок-інструмент-масив”

1. Мета: Дослідження взаємозв'язку параметрів одномасової моделі та визначення їх раціональних значень для математичної моделі - диференціального рівняння руху зведеної маси.