Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Листинг программного продукта с комментариями




 

. Unit_handler.h

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

#ifndef Unit_handlerH

#define Unit_handlerH

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

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include "CSPIN.h"

#include <ExtCtrls.hpp>

#include "CGAUGES.h"

//---------------------------------------------------------------------------TForm1: public TForm

{

__published:// IDE-managed Components*Label1;*CSpinEdit1;*Label2;*CSpinEdit2;*CSpinEdit3;*Label3;*Label4;*Edit1;*Label5;*Memo1;*Label6;*Label8;*Label9;*Label10;*CSpinEdit5;*CSpinEdit6;*Label11;*Label12;*Label13;*Label15;*Label16;*Button1;*Label7;*Label14;*CSpinEdit4;*Image1;*Label17;*CGauge1;*Label18;*CSpinEdit7;*Label19;__fastcall Button1Click(TObject *Sender);__fastcall Edit1KeyPress(TObject *Sender, char &Key);__fastcall recalc (void);__fastcall barrier (int link);__fastcall paint (void);:// User declarations:// User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------PACKAGE TForm1 *Form1;

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

#endif

. Unit_handler.cpp

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

#include <vcl.h>

#pragma hdrstop

#include "Unit_handler.h"

#include <math.h>

#include <stdio.h>

#include <conio.h>

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

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma link "CGAUGES"

#pragma resource "*.dfm"

#define Ei 25.0

#define M 2

#define PI 3.1415936535897932384626433832795

// определяем сложное препятствие

#define Ex -40

#define Ey 30

#define Fx -40

#define Fy 130

#define Gx -20

#define Gy 130

#define Hx 20

#define Hy 130

#define Kx 40

#define Ky 130

#define Lx 40

#define Ly 30

#define Px 20

#define Py 30

#define Rx 20

#define Ry 70

// определяем простое препятствие

#define N1x -60

#define N1y -1

#define N2x 60

#define N2y -1

#define N3x -60

#define N3y -10

#define N4x 60

#define N4y -10n; /* количество звеньев */corner[100]={0}; /* углы звеньев манипулятора */link_x[100]={0}, link_y[100]={0}; /* координаты вершин манипулятора */number = 0; /* количество нвайденных ситуаций */x,y; /* координаты объекта */

/* линии, составляющие препятствие */lines[12][5]= {{N1x,N1y,N2x,N2y,1},

{N2x,N2y,N3x,N3y,0},

{N3x,N3y,N4x,N4y,1},

{N4x,N4y,N1x,N1y,0},

{Ex,Gy,Lx,Gy,1},

{Lx,Gy,Lx,Ly,0},

{Lx,Ly,Hx,Ly,1},

{Hx,Ly,Rx,Ry,0},

{Rx,Ry,Gx,Ry,1},

{Gx,Ry,Gx,Ey,0},

{Gx,Ey,Ex,Ey,1},

{Ex,Ey,Ex,Gy,0}};*Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

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

/* перерасчет координат звеньев */__fastcall TForm1::recalc (void)

{ int i, j;sum_e_cos[100]={0.0}, sum_e_sin[100]={0.0};sum_corner=0.0;buf[256];(i=0; i<n; i++)

{_corner = 0.0;(j=0; j<=i; j++)

{sum_corner += corner[j];_e_cos[i] = Ei*cos(sum_corner*(PI/180.0));_e_sin[i] = Ei*sin(sum_corner*(PI/180.0));(buf,"%.3f",sum_e_cos[i]);(buf,"%f", &(sum_e_cos[i]));(buf,"%.3f",sum_e_sin[i]);(buf,"%f", &(sum_e_sin[i]));

}_x[i] = 0.0;_y[i] = 0.0;(j=0; j<=i; j++)

{link_x[i] += sum_e_cos[j];_y[i] += sum_e_sin[j];

}

}

}

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

/* функция проверки попадания звена манипулятора в преграду */__fastcall TForm1::barrier (int link)

{int status = 1, i;A1,B1,C1, A2,B2,C2, xx, yy;=link_y[link]-link_y[link+1];=link_x[link+1]-link_x[link];=link_x[link]*link_y[link+1]-link_x[link+1]*link_y[link];(i=0; i<12; i++)

{A2=lines[i][1]-lines[i][3];=lines[i][2]-lines[i][0];=lines[i][0]*lines[i][3]-lines[i][2]*lines[i][1];(A1*B2-A2*B1 == 0.0 || B1 == 0.0 || B2 == 0.0)

{status++; status--;}

{= (C2*B1-C1*B2)/(A1*B2-A2*B1);= -((A1*xx+C1)/B1);= -((A2*xx+C2)/B2);((lines[i][4] == 0) && (xx == lines[i][0]) &&

((yy >= lines[i][1] && yy <= lines[i][3]) ||

(yy >= lines[i][3] && yy <= lines[i][1])) &&

((yy >= link_y[link] && yy <= link_y[link+1])||

(yy >= link_y[link+1] && yy <= link_y[link]))

) {status = 0;}((lines[i][4] == 1) && (yy == lines[i][1]) &&

((xx >= lines[i][0] && xx <= lines[i][2]) ||

(xx >= lines[i][2] && xx <= lines[i][0])) &&

((xx >= link_x[link] && xx <= link_x[link+1])||

(xx >= link_x[link+1] && xx <= link_x[link]))

) {status = 0;}

}

}status;

}

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

/* прорисовка ситуации */__fastcall TForm1::paint (void)

{ int i, px,py;buf[256];

/* очистка холста для рисования */->Canvas->Brush->Color = clWhite;->Canvas->FillRect(Image1->Canvas->ClipRect);

/* препятствия */->Canvas->Brush->Color = clGray;->Canvas->Pen->Color = clGray;->Canvas->Rectangle(N1x*M+320,240-N1y*M,N4x*M+320,240-N4y*M);->Canvas->Rectangle(Ex*M+320, 240-Gy*M, Gx*M+320, 240-Ey*M);->Canvas->Rectangle(Gx*M+320, 240-Gy*M, Rx*M+320, 240-Ry*M);->Canvas->Rectangle(Hx*M+320, 240-Hy*M, Lx*M+320, 240-Ly*M);

/* оси постороения */->Canvas->Brush->Color = clBlack;->Canvas->Pen->Color = clBlack;->Canvas->MoveTo(0,240);->Canvas->LineTo(640,240);->Canvas->LineTo(630,238);->Canvas->LineTo(630,242);->Canvas->LineTo(640,240);->Canvas->MoveTo(320,480);->Canvas->LineTo(320,0);->Canvas->LineTo(318,10);->Canvas->LineTo(322,10);->Canvas->LineTo(320,0);

/* построение положений манипулятора */->Canvas->MoveTo(320,240);->Canvas->Brush->Color = clBlue;->Canvas->Pen->Color = clBlue;(i=0; i<n; i++)

{=(int)(link_x[i]*M+320.0);=(int)(240.0-link_y[i]*M);->Canvas->LineTo(px,py);

}

/* рисуем объект для захвата */->Canvas->Brush->Color = clGreen;->Canvas->Pen->Color = clGreen;->Canvas->Ellipse(x*M+319,239-y*M,x*M+321,241-y*M);->Canvas->Ellipse(x*M+318,238-y*M,x*M+322,242-y*M);

/* рисуем точки соединения звеньев */->Canvas->Brush->Color = clRed;->Canvas->Pen->Color = clRed;(i=0; i<n; i++)

{=(int)(link_x[i]*M+320.0);=(int)(240.0-link_y[i]*M);->Canvas->Ellipse(px-1,py-1,px+1,py+1);->Canvas->Ellipse(px-2,py-2,px+2,py+2);

}

/* рисуем опорную точку манипулятора */->Canvas->Brush->Color = clYellow;->Canvas->Pen->Color = clYellow;->Canvas->Ellipse(319,239,321,241);->Canvas->Ellipse(318,238,322,242);->Canvas->Ellipse(317,237,323,243);

/* подписываем график */++;->Canvas->Brush->Color = clWhite;->Canvas->Pen->Color = clBlack;(buf,"Ситуация №%d", number);->Canvas->TextOutA(15,10,buf);(i=0; i<n; i++)

{(buf,"Corner %d: %d", i+1, corner[i]);->Canvas->TextOutA(2,18*(i+1)+10,buf);

}

/* прорисовка изменений */(CSpinEdit7->Value!= 0)(CSpinEdit7->Value);>ProcessMessages();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)

{prec; /* величина возм. отклонения */start,end; /* ограничение на обобщение коорд.*/i, j;status;done;*f;t1, t2, t3;

/* определение начала расчетов */= Time();

/* очистка холста для рисования */->Canvas->Brush->Color = clWhite;->Canvas->FillRect(Image1->Canvas->ClipRect);>ProcessMessages();

/* получение данных о количестве звеньев */= CSpinEdit1->Value;

/* получение данных о координатах объекта */= CSpinEdit2->Value;= CSpinEdit3->Value;

/* получение даннных о возможном отклонении */= StrToFloat(Edit1->Text);

/* получение данных на ограчение на обобщение координаты */= CSpinEdit5->Value;= CSpinEdit6->Value;

/* логи... */->Lines->Add("-------------------------------------");->Lines->Add("Начало выполнения "+TimeToStr(t1));

/* первоначальная инициализация массивов данных */(i=0;i<n; i++)

{corner[i] = start;}(i=n; i<100; i++)

{corner[i] = end;}= 0;

/* сброс прогресса */->MaxValue = end - start;->Progress = 0;

/* открытие файла */= fopen ("file_out.txt", "w");

/* цикл расчета координат звеньев манипулятора */= false;(!done)

{/* рассчитываем координаты звеньев */();

/* проверяем на пересечение с преградой */= 1;(i=0; i<n;i++)

{status = status*barrier(i);}

/* сравнение координат расчетных и исходных */(fabs(link_x[n-1]-x)<prec && fabs(link_y[n-1]-y)<prec && status!= 0)

{/* вывод на экран если совпало (в пределах точности) */();

/* вывод данных в файл */(f,"N %d: ", number);(i=0; i<n; i++)

{fprintf (f,"%d ",corner[i]);}(f,"\n");

}

/* меняем угол */[n-1] += CSpinEdit4->Value;

/* поворачиваем следующее звено */(i=n-1; i>=0; i--)

{if (corner[i]>end)

{if (i>0)

{corner[i-1] += CSpinEdit4->Value;(corner[i-1] > end && i == 1)

{done = true;}

};[i] = start;

}

}->Progress = corner[0] - start;

}= Time();= t2-t1;

/* логи... */->Lines->Add("Найдено "+IntToStr(number)+" ситуаций захвата"); ->Lines->Add("Окончание выполнения "+TimeToStr(t2));->Lines->Add("Длительность выполнения "+TimeToStr(t3));

}

//---------------------------------------------------------------------------__fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)

{((Key >= '0') && (Key <= '9')) {} // цифрыif (Key == 8) {} // <-if ((Key == '.') || (Key == ',')) // запятая

{(((TEdit*)Sender)->Text.Pos(DecimalSeparator)!=0) // если запятая уже есть= 0;// если ещё нет= DecimalSeparator;

}Key = 0; // не цифра

}

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...