Скачиваний:
52
Добавлен:
01.05.2014
Размер:
4.43 Кб
Скачать
#include<iostream.h>
#include<math.h>
#include<values.h>
#include<conio.h>

#include "Sistema.h"               //Podkluchenie golovi klassa
#include "Krug.h"
#include "Kvadrat.h"
#include "Treug.h"

unsigned int Sistema::NextSys=1000;


//konstruktor
 Sistema::Sistema(int _X,int _Y,int _R):Adr(NextSys)
	{centr = new Ellips(_X,_Y,_R,_R,0);
	 NextSys++;
	 }


 //Selectori
 Adress  Sistema::getAdr() const      		    //Vernut nomer
	{return Adr;}

 Message Sistema::Send(Adress _Pol,double _Msg) const
	{Message Msg;
	 Msg.setOtp(getAdr());
	 Msg.setPol(_Pol);
	 Msg.setMsg(_Msg);
	 return Msg;}



 void Sistema::PrintSys(double t) const
	{clrscr();
	 cout<<"---Sistema Planet-----"<<endl;
	 cout<<"Adres: "<<getAdr().getAdress()<<endl;
	 cout<<"---Centr sistemi: ----"<<endl;
	 cout<<"X: "<<centr->getX()<<endl;
	 cout<<"Y: "<<centr->getY()<<endl;
	 cout<<"R: "<<centr->getLmax()<<endl;
	 getch();
	 clrscr();
	 PlList::PrintSys(t);
	 }

 void Sistema::Stolknov(double t) const
	{for (int i=1;i<=PlList::getNel();i++)
	  {
	   for (int j=1;j<=PlList::getNel();j++)
	    {
	     double raznX,raznY;

	     raznX=sqrt((getXpt(i,t)-getXpt(j,t))*(getXpt(i,t)-getXpt(j,t)));
	     raznY=sqrt((getYpt(i,t)-getYpt(j,t))*(getYpt(i,t)-getYpt(j,t)));

	     if (i!=j)
	      {if (raznX<(getA(i)+getA(j)))
		{if (raznY<(getA(i)+getA(j)))
		  {cout<<"Stolknkvenie planet nomer: "<<i<<" "<<j<<endl;};
		}
	      }

	    }
	  }
	}


 double Sistema::ParadPl() const
	{if (PlList::getNel()==0) {cout<<"Planeti v sisteme otsutstvuyut!"<<endl;}
	   else {
	   if (PlList::getNel()==1) {cout<<"Dla odnoy planeti ne nayti"<<endl;}
	   else {

	   double t=-0.1,eps;
	   int j,out1=0,out2;



	   do{
	      t=t+0.1;

	      out2=0;
	      j=2;
	      do{
		if (getXpt(1,t)==0)
			{if (getYpt(1,t)-getYpt(j,t)<0.01)
				{eps=0;}
			}else {

		if (getXpt(j,t)==0)
			{if (getYpt(1,t)-getYpt(j,t)<0.01)
				{eps=0;}
			}else {


		eps=((getYpt(1,t))/(getXpt(1,t)))-((getYpt(j,t))/(getXpt(j,t)));

		  }}

		if (eps>=0.01) {out2=1;};
	      j=j+1;
	      }while ((j<PlList::getNel())&(out2==0));

	      if (out2==0)
	      {out1++;}


	   }
	   while ((t!=100)&(out1==0));

	   Stolknov(t);

	   if(out1==0) {cout<<"! V blijayshee vrema parada planet"<<endl
			    <<"  ne predviditsa"<<endl;return 1000;}
	   else {return t;}

	   } }

	}


 int Sistema::getXc() const		//Koordinati centra
	{return centr->getX();}

 int Sistema::getYc() const
	{return centr->getY();}






 //Modifikatori

 void Sistema::NewPlanet(int _Lmax,int _Lmin,double Fi,double Fi0,int _V,int form,double _Angle)
	{Planeta* pl;

          cout<<"*"<<endl;getch();
	  if (form==1) {double _R;
			cout<<"Vvedite radius planeti"<<endl;
			cin>>_R;
			pl=new Krug(centr->getX(),centr->getY(),_Lmax,_Lmin,Fi,Fi0,_V,_R,_Angle);

	  cout<<"**"<<endl;getch();


			} else {
	  if (form==2) {double _A;
			cout<<"Vvedite storonu planeti"<<endl;
			cin>>_A;
			pl=new Kvadrat(centr->getX(),centr->getY(),_Lmax,_Lmin,Fi,Fi0,_V,_A,_Angle);

	  cout<<"**"<<endl;getch();


			} else {
	  if (form==3) {double _A;
			cout<<"Vvedite storonu planeti"<<endl;
			cin>>_A;
			pl=new Treug(centr->getX(),centr->getY(),_Lmax,_Lmin,Fi,Fi0,_V,_A,_Angle);

	  cout<<"**"<<endl;getch();


			} else {cout<<"Neverniy vibor"<<endl;}}}
	 insLast(pl);

		  cout<<"***"<<endl;getch();

	 if ((_Lmax-getA(PlList::getNel()))<(centr->getLmax()))
		{cout<<"Vasha planeta vrazals' v solnce"<<endl;
		 DelPlanet(PlList::getNel());getch();}
	 else {
	 if ((_Lmin-getA(PlList::getNel()))<(centr->getLmax()))
		{cout<<"Vasha planeta vrazals' v solnce"<<endl;
		 DelPlanet(PlList::getNel());getch();};
	      }
	 }

 void Sistema::Move(double dX,double dY)
	{centr->Move(dX,dY);
	 for (int i=1;i<=PlList::getNel();i++)
	  {MoveO(i,dX,dY);}
	}

 void Sistema::Receive(Message _Msg)
	{if (_Msg.getPol().getAdress()==getAdr().getAdress())
		{Message msg;
		 for (int i=1;i<=getNel();i++)
		  {if (PlList::getAdr(i).getAdress()!=_Msg.getOtp().getAdress())
		   {msg.setOtp(_Msg.getOtp());
		    msg.setPol(PlList::getAdr(i));
		    msg.setMsg(_Msg.getMsg());
		    PlList::ReceiveReg(msg);
		   }
		  }
		}
	 else {
	 int dost=PlList::ReceiveReg(_Msg);
	 PlList::ReceiveReg(Send(_Msg.getOtp(),dost));
	      }
	}
Соседние файлы в папке Kurs3