Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
15
Добавлен:
17.04.2013
Размер:
5.71 Кб
Скачать
//---------------------------------------------------------------------------
#include <vcl.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#pragma hdrstop
#define  RIGHT       1
#define  LEFT        0
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
char  buf[100];
int Speed = 1;
int oldspeed=1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner): TForm(Owner)
{
   X = 156;
   Y = 0;
   Angle = 0;

   for(int i = 0;i < 360;i++)
   {
      SIN[i] = sin(i*0.01745);
      COS[i] = cos(i*0.01745);
      SIN[i] = 156*(SIN[i] + 1);
      COS[i] = 156*(COS[i] + 1);
   }

   Sam[0].kx = 35;
   Sam[0].Speed = 0.3;
   Sam[0].sx = 1;
   Sam[0].sy = 1;
   Sam[0].Xpos = 100;
   Sam[0].Ypos = 100;
   Sam[0].count = 0;

   Sam[1].kx = 75;
   Sam[1].Speed = 0.5;
   Sam[1].sx = 1;
   Sam[1].sy = 1;
   Sam[1].Xpos = 100;
   Sam[1].Ypos = 10;
   Sam[1].count = 0;   

   sprintf(buf,"%d",Speed);
   Edit1->Text = buf;

   sprintf(buf,"%f",Sam[0].kx);
   Edit2->Text = buf;
   sprintf(buf,"%f",Sam[0].Speed);
   Edit4->Text = buf;
   sprintf(buf,"%f",Sam[0].Xpos);
   Edit7->Text = buf;
   sprintf(buf,"%f",Sam[0].Ypos);
   Edit9->Text = buf;

   sprintf(buf,"%f",Sam[1].kx);
   Edit3->Text = buf;
   sprintf(buf,"%f",Sam[1].Speed);
   Edit5->Text = buf;
   sprintf(buf,"%f",Sam[1].Xpos);
   Edit6->Text = buf;
   sprintf(buf,"%f",Sam[1].Ypos);
   Edit8->Text = buf;
}
//---------------------------------------------------------------------------
int Classify(int sx,int sy,int kx,int ky,int px,int py)
{
   int tx,ty,Tpx,Tpy;
   tx = kx - sx;
   ty = ky - sy;
   Tpx = px - sx;
   Tpy = py - sy;
   float s = tx*Tpy-ty*Tpx;
   if(s > 0.0)return LEFT;
   if(s < 0.0)return RIGHT;
   return 0;
}
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   int a,b,i;
   int cx=312/2,cy=312/2;
   int R=cx,smx,smy,smr;
   TRect r;
   r.top = 0;
   r.left = 0;
   r.right = 313;
   r.bottom = 313;

   Image1->Canvas->Brush->Color = clBlack;
   Image1->Canvas->Pen->Color = clLime;
   Image1->Canvas->FillRect(r);

   Image1->Canvas->Ellipse(1, 1, 312, 312);
   Image1->Canvas->Ellipse(78, 78, 235, 235);

   Image1->Canvas->MoveTo(156,0);
   Image1->Canvas->LineTo(156,313);
   Image1->Canvas->MoveTo(0,313/2);
   Image1->Canvas->LineTo(313,156);
   Image1->Canvas->MoveTo(156,156);
   for(i = 0;i <= 21;i++)
   {
      Image1->Canvas->MoveTo(151,i*313/20);
      Image1->Canvas->LineTo(161,i*313/20);
      Image1->Canvas->MoveTo(i*313/20,151);
      Image1->Canvas->LineTo(i*313/20,161);
   }
   X = COS[Angle];
   Y = SIN[Angle];
   Image1->Canvas->MoveTo(156,156);
   Image1->Canvas->LineTo(X,Y);
   for(int i = 0;i < 2;i++)
   {
      Sam[i].move();
      if(Sam[i].Xpos > 313 || Sam[i].Xpos < 0)
         Sam[i].sx = -Sam[i].sx;
      if(Sam[i].Ypos > 313 || Sam[i].Ypos < 0)
         Sam[i].sy = -Sam[i].sy;
      Image1->Canvas->Pixels[Sam[i].Xpos][Sam[i].Ypos] = clRed;
      a = Classify(156,156,X,Y,Sam[i].Xpos,Sam[i].Ypos);
      b = Classify(156,156,oldX,oldY,Sam[i].Xpos,Sam[i].Ypos);
      if(a == RIGHT && b == LEFT)
      {
         Sam[i].TX = Sam[i].Xpos;
         Sam[i].TY = Sam[i].Ypos;
         Sam[i].count = 100;
      }
      if(Sam[i].count!=0)
      {
         Sam[i].count--;
         smx = Sam[i].Xpos;
         smy = Sam[i].Ypos;
         smr = sqrt((cx-smx)*(cx-smx)+(cy-smy)*(cy-smy));
         if (R>(smr+5))
         Image1->Canvas->Ellipse(Sam[i].TX,Sam[i].TY,//
                                 Sam[i].TX+Sam[i].count/10,Sam[i].TY+Sam[i].count/10);
      }
   }
   oldX = X;
   oldY = Y;
   Angle+=5;
   if(Angle >= 360)Angle = 0;
   sprintf(buf,"%f",Sam[1].Xpos);
   Edit6->Text = buf;
   sprintf(buf,"%f",Sam[1].Ypos);
   Edit8->Text = buf;
   sprintf(buf,"%f",Sam[0].Xpos);
   Edit7->Text = buf;
   sprintf(buf,"%f",Sam[0].Ypos);
   Edit9->Text = buf;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
   Timer1->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
   int k;
   if (Edit1->Text== "") Speed=oldspeed;
   else
   Speed = StrToInt(Edit1->Text);
   if(Speed < 0 || Speed > 10) Edit1->Text = "";
   else
        {
         if (Edit1->Text=="")  k = oldspeed;
         else
             {
              k = StrToInt(Edit1->Text);
              Speed = StrToInt(Edit1->Text);
              }
         Timer1->Interval = (Speed*1000*k)/360;
         oldspeed=k;
         }

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit2Change(TObject *Sender)
{
   Sam[0].kx = atof(Edit2->Text.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit4Change(TObject *Sender)
{
   Sam[0].Speed = atof(Edit4->Text.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit3Change(TObject *Sender)
{
   Sam[1].kx = atof(Edit3->Text.c_str());
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit5Change(TObject *Sender)
{
   Sam[1].Speed = atof(Edit5->Text.c_str());
}
//---------------------------------------------------------------------------
Соседние файлы в папке KursachMP33 Copy
  • #
    17.04.201332.26 Кб16Project1.exe
  • #
    17.04.201312.27 Кб16Project1.obj
  • #
    17.04.2013876 б15Project1.res
  • #
    17.04.20131.11 Mб15Project1.tds
  • #
    17.04.2013283 б16README.txt
  • #
    17.04.20135.71 Кб15Unit1.cpp
  • #
    17.04.20132.19 Кб15Unit1.dfm
  • #
    17.04.20132.03 Кб17Unit1.h
  • #
    17.04.201357.21 Кб15Unit1.obj
  • #
    17.04.20135.71 Кб15Unit1.~cp
  • #
    17.04.20132.52 Кб15Unit1.~df