Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Различные алгоритмы минимизации, реализованные в С++ / all / CFIGURE
.CPP// ” ©«: 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