Скачиваний:
13
Добавлен:
01.05.2014
Размер:
3.34 Кб
Скачать
// ” ©«: cFigure.cpp
// ђҐ «Ё§ жЁп Є« бб  cFigure
// Ђўв®а: ђг­®ў Ђ.Ђ. Ја. 2355
// „ в : 15.04.2005

#include "cfigure.h"

/*
	Ё­ў аЁ ­в Є« бб  cFigure:

	(angles ­Ґ ¬Ґ­пҐвбп)
	&&
	(§­ зҐ­Ёп getWidth() Ё getHeight() Ї®бв®п­­л
	б ®ЇаҐ¤Ґ«Ґ­­®© б⥯Ґ­мо в®з­®бвЁ)
*/


// Є®­бвагЄв®а:
	cFigure::cFigure(Point p0, Point p1, Point p2, float a1, float a2)
	/*
	   ЇаҐ¤гб«®ўЁҐ : (p0, p1, p2 Ї®Ї а­® ­Ґ б®ўЇ ¤ ов)
					 &&
					 (a2 > a1 >=0)
					 &&
					 (ўҐЄв®а  pa = p1-p0 Ё pb = p2-p0 ЇҐаЇҐ­¤ЁЄг«па­л)
	*/
	{
		// дЁЈга  ­Ґ ўл஦¤Ґ­  :
		assert( !(p0 == p1) );
		assert( !(p0 == p2) );
		assert( !(p1 == p2) );

		// ўҐЄв®а  pa, pb ЇҐаЇҐ­¤ЁЄг«па­л :
		Point pa(p1.GetX() - p0.GetX(), p1.GetY() - p0.GetY());
		Point pb(p2.GetX() - p0.GetX(), p2.GetY() - p0.GetY());
		assert( fabs ((pa.GetX()*pb.GetX() + pa.GetY()*pb.GetY()-0)<0.1) );
		//cout << fabs ((pa.GetX()*pb.GetX() + pa.GetY()*pb.GetY()-0));
		ptsOval.addElement(p0);
		ptsOval.addElement(p1);
		ptsOval.addElement(p2);

		// гЈ«л Ў®«миҐ ­г«п :
		assert(a1 >= 0);
		assert(a2 > a1);

		angles.addElement(a1);
		angles.addElement(a2);

	}
	/*
		Ї®бвгб«®ўЁҐ : (ptsOval ᮤҐа¦Ёв p0,p1,p2)
					  &&
					  (angles ᮤҐа¦Ёв a1, a2)
	*/

// ¤ҐбвагЄв®а:
	cFigure::~cFigure()
	{
	}

// ᥫҐЄв®ал:
	float cFigure::getWidth() // base = 2*|p1 - p0|
	/*
		‚®§ўа й Ґв иЁаЁ­г н««ЁЇб 
	*/
	{
		float x1 = getP(1).GetX() - getP(0).GetX();
		float x2 = getP(1).GetY() - getP(0).GetY();

		return 2*sqrt(x1*x1 + x2*x2);
	}
	/*
		Ї®бвгб«®ўЁҐ : ў®§ўа й Ґ¬®Ґ §­ зҐ­ЁҐ == 2 * |p1-p0|
	*/




	float cFigure::getHeight()
	/*
		‚®§ўа й Ґв ўлб®вг н««ЁЇб 
	*/
	{
		float x1 = getP(2).GetX() - getP(0).GetX();
		float x2 = getP(2).GetY() - getP(0).GetY();

		return 2*sqrt(x1*x1 + x2*x2);
	}
	/*
		Ї®бвгб«®ўЁҐ : ў®§ўа й Ґ¬®Ґ §­ зҐ­ЁҐ == 2 * |p2-p0|
	*/




	Point cFigure::getP(int n)
	/*
		‚®§ўа й Ґв Є®ЇЁо ®¤­®© Ё§ ваҐе в®зҐЄ p<n>
		§ ¤ ойЁе дЁЈгаг
		n = {0,1,2}
	*/
	{
		assert((n >= 0)&&(n <= 2));
		return ptsOval.getElement(n+1);
	}
	/*
		Ї®бвгб«®ўЁҐ : ў®§ўа й Ґ¬®Ґ §­ зҐ­ЁҐ == p<n>
	*/




	float cFigure::getAngle(int n)
	/*
		‚®§ўа й Ґв §­ зҐ­ЁҐ ®¤­®Ј® Ё§ 2 гЈ«®ў angle<n>
		§ ¤ ойЁе дЁЈгаг
		n = {0,1}
	*/
	{
		assert((n == 0)||(n == 1));
		return angles.getElement(n+1);
	}
	/*
		Ї®бвгб«®ўЁҐ : ў®§ўа й Ґ¬®Ґ §­ зҐ­ЁҐ == angle<n>
	*/




// ¬®¤ЁдЁЄ в®ал:
	void cFigure::Rotate(Point p, float alpha)
	/*
		Џ®ў®а®в дЁЈгал ў®ЄагЈ в®зЄЁ p ­  гЈ®« alpha
	*/
	{
		int n;
		for (n = 0; n < 3; n++)
		{
			Point ptRotated = getP(n);
			ptRotated.Rotate(p, alpha);
			ptsOval.setElement(n+1, ptRotated);
		}
	}
	/*
		Ї®бвгб«®ўЁҐ : «оЎ п в®зЄ  p<n> Ї®ўҐа­гв  ў®ЄагЈ p ­  гЈ®« alpha
	*/



	void cFigure::MoveTo(Point pNew)
	/*
		Џ а ««Ґ«м­л© ЇҐаҐ­®б дЁЈгал (業ва  p0) ў в®зЄг pNew
	*/
	{
		// ¤«п p0 :
		Point ptMoved = getP(0);
		float dx = pNew.GetX() - ptMoved.GetX();
		float dy = pNew.GetY() - ptMoved.GetY();
		ptMoved.MoveTo(pNew);
		ptsOval.setElement(1, ptMoved);

		// ¤«п p1 :
		ptMoved = getP(1);
		ptMoved.MoveOn(dx,dy);
		ptsOval.setElement(2, ptMoved);

		// ¤«п p2 :
		ptMoved = getP(2);
		ptMoved.MoveOn(dx,dy);
		ptsOval.setElement(3, ptMoved);
	}
	/*
		Ї®бвгб«®ўЁҐ : ((p0 == pNew) && (p1 Ё p2 б¬ҐйҐ­л ­  dx, dy))
	*/
Соседние файлы в папке all