Скачиваний:
17
Добавлен:
01.05.2014
Размер:
10.52 Кб
Скачать

#include<iostream.h>
#include<dos.h>
#include<conio.h>
#include<stdlib.h>
#include<values.h>
#include<cpoint.h>
#include<math.h>

class Triangle
{
 private: Point A, B, C;                                       //‚ҐаиЁ­л ваҐгЈ®«м­ЁЄ 
		float ab, bc, ca, square;                            //„«Ё­л бв®а®­ Ё Ї«®й ¤м
		void parametres();                                   //‚лзЁб«Ґ­ЁҐ Ї а ¬Ґва®ў
		int invariant();                                     //Џа®ўҐаЄ  ­  бгйҐбвў®ў ­ЁҐ
 public: Triangle();
				 Triangle(float x0[], float y0[]);                                          //‘®§¤ ­ЁҐ ваҐгЈ®«м­ЁЄ 
		void SetTops(float x0[], float y0[]);                //ЋЎ®§­ зЁвм ўҐаиЁ­л
		void GetTops(float x0[], float y0[]);                //Џ®«гзЁвм Є®®а¤Ё­ вл ўҐаиЁ­
		void GetParametres(float length[], float &s);        //Џ®«гзЁвм ¤«Ё­л бв®а®­ Ё Ї«®й ¤м
		void Move(float dx, float dy);                       //ЏҐаҐ­®б, ®­ ¦Ґ б¤ўЁЈ
		void Mirror(Point);                                  //‡ҐаЄ «м­®Ґ ®в®Ўа ¦Ґ­ЁҐ
	 ~Triangle();                                          //“­Ёз⮦Ёвм ваҐгЈ®«м­ЁЄ
};
///////////////////////////////////////////////////////////////////////////////////
inline void Triangle:: SetTops(float x0[], float y0[])
{
	A.SetXY(x0[0], y0[0]);
	B.SetXY(x0[1], y0[1]);
	C.SetXY(x0[2], y0[2]);
	parametres();
}
//////////////////////////////////////////////////////////////////////////////////////
inline void Triangle:: GetTops(float x0[], float y0[])
{
	A.GetXY(x0[0], y0[0]);
	B.GetXY(x0[1], y0[1]);
	C.GetXY(x0[2], y0[2]);
}
//////////////////////////////////////////////////////////////////////////////////////
inline void Triangle::GetParametres(float length[], float &s)
{
 length[0] = ab;
 length[1] = bc;
 length[2] = ca;
 s = square;
}
//////////////////////////////////////////////////////////////////////////////////////
inline Triangle::Triangle(float x0[], float y0[]) :A(0, 0), B(0, 0), C(0, 0)
{
 SetTops(x0, y0);
 cout<<endl<<"‘®§¤ ­ ваҐгЈ®«м­ЁЄ."<<endl<<"Љ®®а¤Ё­ вл ҐЈ® ўҐаиЁ­:";
 cout<<"A("<<x0[0]<<" "<<y0[0]<<") ";
 cout<<"B("<<x0[1]<<" "<<y0[1]<<") ";
 cout<<"C("<<x0[2]<<" "<<y0[2]<<") ";
}
//////////////////////////////////////////////////////////////////////////////////////
inline Triangle::Triangle() :A(0, 0), B(0, 0), C(0, 0)
{
}
//////////////////////////////////////////////////////////////////////////////////////
inline void Triangle::Move(float dx, float dy)
{
 A.Move(dx, dy);
 B.Move(dx, dy);
 C.Move(dx, dy);
}
//////////////////////////////////////////////////////////////////////////////////////
inline void Triangle::Mirror(Point O)
{
 A. Mirror(O);
 B.Mirror(O);
 C.Mirror(O);
}
//////////////////////////////////////////////////////////////////////////////////////
inline Triangle::~Triangle()
{
// cout<<"’аҐгЈ®«м­ЁЄ  Ў®«миҐ ­Ґв б ­ ¬Ё";
}
//////////////////////////////////////////////////////////////////////////////////////
inline int Triangle::invariant()
{
 float Ax, Ay, Bx, By, Cx, Cy;
 A.GetXY(Ax, Ay);
 B.GetXY(Bx, By);
 C.GetXY(Cx, Cy);
 if(((Ax==Bx)&&(Ay==By))||((Bx==Cx)&&(By==Cy))||((Bx==Cx)&&(By==Cy))
		||((Ax-Bx==0)&&(Ax-Cx==0)||(Ay-By)/(Ax-Bx)==(Ay-Cy)/(Ax-Cx)))
	return 0;
 return 1;
}
//////////////////////////////////////////////////////////////////////////////////////
inline void Triangle:: parametres()
{
 float ax, ay, bx, by, cx, cy;
 float p;
 A.GetXY(ax, ay);
 B.GetXY(bx, by);
 C.GetXY(cx, cy);
 ab = sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));
 ca = sqrt((ax-cx)*(ax-cx)+(ay-cy)*(ay-cy));
 bc = sqrt((cx-bx)*(cx-bx)+(cy-by)*(cy-by));
 p = (ab+bc+ca)/2;
 square  =  sqrt(p*(p-ab)*(p-bc)*(p-ca));
}
//////////////////////////////////////////////////////////////////////////////////////
void Transformation(float x0[], float y0[], float base, float height)
{
	x0[1] = x0[0]+base;
	y0[1] = y0[0];
	x0[2] = x0[0]+base/2;
	y0[2] = y0[0]+height;
}
/////////////////////////////////////////////////////////////////////////////////////
Triangle MadeITriangle(float x0[], float y0[])
{
		 float base, height;
		 cout<<"‚ўҐ¤ЁвҐ  ЎбжЁббг «Ґў®© ўҐаиЁ­л ЇаЁ ®б­®ў ­ЁЁ ";
		 cin>>x0[0];
		 cout<<"‚ўҐ¤ЁвҐ ®а¤Ё­ вг нв®© ўҐаиЁ­л ";
		 cin>>y0[0];
		 cout<<"‚ўҐ¤ЁвҐ ўлб®вг а ў­®ЎҐ¤аҐ­­®Ј® ваҐгЈ®«м­ЁЄ  ";
		 cin>>height;
		 cout<<"‚ўҐ¤ЁвҐ ®б­®ў ­ЁҐ а ў­®ЎҐ¤аҐ­­®Ј® ваҐгЈ®«м­ЁЄ  ";
		 cin>>base;
		 Transformation(x0, y0, base, height);
		 Triangle ABC = Triangle(x0, y0);
		 return ABC;
}
//////////////////////////////////////////////////////////////////////////////////////
Triangle RandomITriangle(float x0[], float y0[])
{
 float base, height;
 x0[0] = random(100);
 y0[0] = random(100);
 base = random(100);
 height = random(100);
 Transformation(x0, y0, base, height);
 Triangle ABC = Triangle(x0, y0);
 return ABC;
}
/////////////////////////////////////////////////////////////////////////////////////
void Print(Triangle ABC)
{
 float x0[3], y0[3], length[3], s;
 ABC.GetTops(x0, y0);
						cout<<"Љ®®а¤Ё­ вл в®зҐЄ: A("<<x0[0]<<"; "<<y0[0]<<")"
																 <<" B("<<x0[1]<<"; "<<y0[1]<<")"
																 <<" C("<<x0[2]<<"; "<<y0[2]<<")"<<endl;
						ABC.GetParametres(length, s);
						cout<<"„«Ё­л бв®а®­: AB = "<<length[0]
														 <<" BC = "<<length[1]
														 <<" CA = "<<length[2]<<endl;
						cout<<"Џ«®й ¤м: S = "<< s;
}
//////////////////////////////////////////////////////////////////////////////////////
void main()
{
	const int MAXIMUM = 100;
	Triangle ABC[MAXIMUM];
	float x0[3], y0[3], length[3];
	float dx, dy;
	char z = 'a';
	int i, choice, choice1, choice2, flag = 0, count = 0, number;


	randomize;
	do
	{
	 clrscr();
	 cout<<endl<<"‘®н¤ вм ¬ ббЁў ваҐгЈ®«м­ЁЄ®ў..........................1";
	 cout<<endl<<"ђ Ў®в вм б ¬ ббЁў®¬ ваҐгЈ®«м­ЁЄ®ў.....................2";
	 cout<<endl<<"ђ Ў®в вм б ®в¤Ґ«м­л¬ ваҐгЈ®«м­ЁЄ®¬....................3";
	 cout<<endl<<"‚л室 ................................................5";
	 cout<<endl<<"‚ и ўлЎ®а ";
	 cin >> choice;

	 switch(choice)
	 {
		case 1:
		 do
		 {
			 clrscr();
			 cout<<"‚ўҐ¤ЁвҐ Ї®¦ «г©бв  Є®«ЁзҐбвў® н«Ґ¬Ґв®ў-ваҐгЈ®«м­ЁЄ®ў ";
			 cin>>count;
			 if((count>MAXIMUM)||count<=0)
			 {
				cout<<"ќв® ­ҐЄ®а४⭮Ґ §­ зҐ­ЁҐ. Љ®«ЁзҐбвў® ¤®«¦­® Ўлвм Ї®«®¦ЁвҐ«м­л¬ Ё ­Ґ Ў®«миҐ "<<MAXIMUM;
				getch();
			 }
		 }
		 while((count>MAXIMUM)||(count<=0));
		 cout<<"Љ ЄЁ¬ ®Ўа §®¬ Ўг¤Ґв ᮧ¤ ў вмбп ¬ ббЁў ваҐгЈ®«м­ЁЄ®ў?";
		 cout<<endl<<"ђгзЄ ¬Ё -  1"<<endl<<"‘«гз ©­® - 2"<<endl;
		 cin>>choice1;
		 if(choice1==1)
			for(i=0;i<count;i++)
			{
			 ABC[i] = MadeITriangle(x0, y0);
			 getch();
			}
		 if(choice1==2)
		 {
			for(i=0;i<count;i++)
			{
			 cout<<endl<<"’аҐгЈ®«м­ЁЄ ь"<<i+1;
			 ABC[i] = RandomITriangle(x0, y0);
			 delay(900);
			}
			cout<<endl<<"‘®§¤ ­ЁҐ ¬ ббЁў  ваҐгЈ®«м­ЁЄ®ў § Є®­зҐ­®!";
		 }
		 if((choice1)==1||(choice1==2))
			flag = 1;
		 else
			cout<<"Љ ᮦ «Ґ­Ёо ўл ­Ґ ᬮЈ«Ё ᮧ¤ вм ¬ ббЁў.Џ®Їа®Ўг©вҐ ҐйҐ а §";
		 getch();
		 break;
		case 2:
		 if(!flag)
			{
			 cout<<"’аҐгЈ®«м­ЁЄ ҐйҐ ­Ґ ᮧ¤ ­!";
			 getch();
			}
			else
			{
			 do
			 {
				clrscr();
				cout<<endl<<"Џа®б¬®ваҐвм Ё­д®а¬ жЁо ® ваҐгЈ®«м­ЁЄ е........1";
				cout<<endl<<"‘¤ўЁ­гвм ўбҐ ваҐгЈ®«м­ЁЄЁ.....................2";
				cout<<endl<<"‡ҐаЄ «м­® ®ва §Ёвм ўҐбм ¬ ббЁў................3";
				cout<<endl<<"‚л©вЁ Ё§ Ї®¤¬Ґ­о..............................4";
				cout<<endl<<"‚ и ўлЎ®а ";
				cin>>choice1;

				switch(choice1)
				{
				 case 1:for(i=0;i<count;i++)
								{
								 clrscr();
								 Print(ABC[i]);
								 delay(1000);
								}
								break;
				 case 2:cout<<"‚ўҐ¤ЁвҐ ЇҐаҐ¬ҐйҐ­ЁҐ Ї® Ј®аЁ§®­в «Ё ";
								cin >>dx;
								cout<<"‚ўҐ¤ЁвҐ ЇҐаҐ¬ҐйҐ­ЁҐ Ї® ўҐавЁЄ «Ё ";
								cin>>dy;
								for(i=0;i<count;i++)
									ABC[i].Move(dx, dy);
								break;
				 case 3: cout<<"‚ўҐ¤ЁвҐ  ЎбжЁббг 業ва  бЁ¬¬ҐваЁЁ ";
								 cin>>dx;
								 cout<<"‚ўҐ¤ЁвҐ ®а¤Ё­ вг 業ва  бЁ¬¬ҐваЁЁ ";
								 cin>>dy;
								 Point O(dx, dy);
								 for(i=0;i<count;i++)
									 ABC[i].Mirror(O);
								 break;
				 case 4: break;
				}
			 }
			 while(choice1!=4);
			}
			break;
		case 3:
					 if(!flag)
					 {
						 cout<<"’аҐгЈ®«м­ЁЄ ҐйҐ ­Ґ ᮧ¤ ­!";
						 getch();
					 }
                                         else
                                         {
                                          do
					  {
                                                clrscr();
                                                cout<<endl<<"‚лЎа вм Ё«Ё ᬥ­Ёвм ­®¬Ґа ваҐгЈ®«м­ЁЄ .......1";
						cout<<endl<<"Џа®б¬®ваҐвм Ё­д®а¬ жЁо ® ваҐгЈ®«м­ЁЄҐ........2";
						cout<<endl<<"‘¤ўЁ­гвм ваҐгЈ®«м­ЁЄ.........................3";
						cout<<endl<<"‡ҐаЄ «м­® ®ва §Ёвм ваҐгЈ®«м­ЁЄ...............4";
						cout<<endl<<"‚л©вЁ Ё§ Ї®¤¬Ґ­о.............................5";
						cout<<endl<<"‚ и ўлЎ®а ";
						cin>>choice2;

						switch(choice2)
						{
                                                        case 1: clrscr();
                                                                cout<<"Љ Є®© ваҐгЈ®«м­ЁЄ ўл ўлЎҐаҐвҐ ";
                                                                cin>>number;
                                                                if((number>count)||(number<0))
                                                                 { cout<<"ЌҐЇ®¤е®¤пйЁ© ­®¬Ґа.";
                                                                   getch();
                                                                 }
                                                                break;
							case 2: clrscr();
											Print(ABC[number-1]);
											getch();
											break;
							case 3: cout<<"‚ўҐ¤ЁвҐ ЇҐаҐ¬ҐйҐ­ЁҐ Ї® Ј®аЁ§®­в «Ё ";
											cin >>dx;
											cout<<"‚ўҐ¤ЁвҐ ЇҐаҐ¬ҐйҐ­ЁҐ Ї® ўҐавЁЄ «Ё ";
											cin>>dy;
											ABC[number-1].Move(dx, dy);
											break;
							case 4: cout<<"‚ўҐ¤ЁвҐ  ЎбжЁббг в®зЄЁ ";
											cin>>dx;
											cout<<"‚ўҐ¤ЁвҐ ®а¤Ё­ вг в®зЄЁ ";
						cin>>dy;
						Point O(dx, dy);
						ABC[number-1].Mirror(O);
						cout<<endl<<"’аҐгЈ®«м­ЁЄ бЁ¬¬ҐваЁз­® ®ва ¦Ґ­ ®в­®бЁвҐ«м­® 業ва  бЁ¬¬ҐваЁЁ O("<<dx<<"; "<<dy<<")";
						getch();
											break;
							case 5: break;
						}
					 }
					 while(choice2!=5);

                                         }

					 break;

		case 5:
					 z = 'e';
					 break;
	 }
	}
	while(z!='e');
}
Соседние файлы в папке Классы Точка и Равнобедренный Треугольник