Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы / С++Builder / Laba3 / Task2 / Unit1
.cpp//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Ball.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
CSupport* lin;
CBall* ball;
double An,An0,w=0,w0;
int x,y;
float g=9.8,g0;
int t=0;
int t0,t1;
int dt=1;
double vx,vy;
int yy;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
ball=new CBall(Image1);
lin=new CSupport(Form1->Image1);
lin->Draw(lin->CurAngle);
An=M_PI+0.2;
x=ball->R*cos(lin->CurAngle);
y=ball->ComputeBallY(x,lin->CurAngle);
ball->MoveToXY(x, y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar3Change(TObject *Sender)
{
An=M_PI + 0.2 + ((double)(TrackBar3->Position))/TrackBar3->Max/3;
lin->Draw(An);
ball->MoveToXY(ball->R*cos(An),ball->ComputeBallY(x,lin->CurAngle));
//y=ball->ComputeBallY(x,lin->CurAngle)
if (!(Timer1->Enabled))
{
x=ball->R*cos(An);
y=ball->ComputeBallY(x,lin->CurAngle);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
x=ball->R*cos(An);//82;
t=-1;
t0=ball->GetX();
An0=An;
g0=g;
w0=w;
Timer1->Enabled=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
Timer1->Enabled=!Timer1->Enabled;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
t+=dt;
//x=(x0*sqrt(g/ball->R)*cos(sqrt(g/ball->R)*t/10+An)+v0)*t/10;
x=-t0*(1+w0)*cos(sqrt(g0/ball->R)*t/5+An0);
/*
x++;*/
lin->Draw(An);
try
{
y=ball->ComputeBallY(x,lin->CurAngle);
}
catch (int d)
{
if (d==0)
{
Timer1->Enabled=false;
t1=-t0*(1+w0)*cos(sqrt(g0/ball->R)*t/5+An0);
double h=ball->R*sin(An+M_PI);
double v=sqrt(2*g0*h);
vx=v*cos(An+M_PI);
t=0;
vy=v*sin(An+M_PI);
yy=ball->GetY();
Timer2->Enabled=true;
}
}
ball->MoveToXY(x,y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar2Change(TObject *Sender)
{
g=9.8 + ((double)(TrackBar2->Position))/TrackBar2->Max*100;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar4Change(TObject *Sender)
{
//dt=1 + ((double)TrackBar4->Position)/TrackBar4->Max*4;
Timer1->Interval=100-((double)TrackBar4->Position)/TrackBar4->Max*75;
Timer2->Interval=100-((double)TrackBar4->Position)/TrackBar4->Max*75;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
w=0 + ((double)(TrackBar1->Position))/TrackBar1->Max*0.05;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
t+=dt;
x=t1+vx*t/5;
y=yy+vy*t/5-g0*t*t/5/2;
lin->Draw(An);
try
{
ball->MoveToXY(x,y);
lin->Check(x);
}
catch (int d)
{
if (d==1)
{
Timer2->Enabled=false;
ShowMessage("Бум !!!");
////////////////////////////
lin->Draw(lin->CurAngle);
// An=M_PI+0.2;
x=ball->R*cos(lin->CurAngle);
y=ball->ComputeBallY(x,lin->CurAngle);
ball->MoveToXY(x, y);
TRect rr;
for (int i=0; i<=300; i+=60)
{
if (i%120) Image1->Canvas->Brush->Color = clBlack;
else Image1->Canvas->Brush->Color = clAqua;
rr.Left=330;
rr.Right=340;
rr.Bottom=20+i;
rr.Top=80+i;
Image1->Canvas->FillRect(rr);
}
/////////////////
}
}
ball->MoveToXY(x,y);
}
//---------------------------------------------------------------------------