Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторная работа 22 / L1C2TRGL
.CPP#ifndef IIItrianglecppIII
#define IIItrianglecppIII
#include "l1c2trgl.h"
cTriangle::~cTriangle(){};
void cTriangle::Set(const int i, const cPoint& F)
{
Tr.tobegin();
int k;
for (k=1;k<=i-1;k++)
Tr.move();
Tr.del();
Tr.add(F);
}
void cTriangle::Set(cTriangle &F)
{
int k;
Tr.del();
Tr.del();
Tr.del();
cPoint P;
for (k=1;k<=3;k++)
{
P.SetXY(F.GetX(k),F.GetY(k));
Set(k,P);
};
}
float cTriangle::GetX(const int i)
{
int k;
Tr.tobegin();
for (k=1;k<=i-1;k++)
Tr.move();
cPoint P;
Tr.GetInf(P);
return P.GetX();
}
float cTriangle::GetY(const int i)
{
int k;
Tr.tobegin();
for (k=1;k<=i-1;k++)
Tr.move();
cPoint P;
Tr.GetInf(P);
return P.GetY();
}
int cTriangle::rb()
{
float X1,X2,X3,Y1,Y2,Y3,a,b,c;
X1 = GetX(1);
X2 = GetX(2);
X3 = GetX(3);
Y1 = GetY(1);
Y2 = GetY(2);
Y3 = GetY(3);
a = (X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1);
b = (X3-X2)*(X3-X2)+(Y3-Y2)*(Y3-Y2);
c = (X3-X1)*(X3-X1)+(Y3-Y1)*(Y3-Y1);
return ((fabs(a-b)<0.01)||(fabs(a-c)<0.01)||(fabs(c-b)<0.01));
};
int cTriangle::correct()
{
float X1,X2,X3,Y1,Y2,Y3,a,b,c;
X1 = GetX(1);
X2 = GetX(2);
X3 = GetX(3);
Y1 = GetY(1);
Y2 = GetY(2);
Y3 = GetY(3);
a = sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1));
b = sqrt((X3-X2)*(X3-X2)+(Y3-Y2)*(Y3-Y2));
c = sqrt((X3-X1)*(X3-X1)+(Y3-Y1)*(Y3-Y1));
return !(((fabs(a-b-c)<0.01)||(fabs(b-c-a)<0.01)||(fabs(c-b-a)<0.01)));
};
cTriangle::cTriangle(const cPoint P1,const cPoint P2,const cPoint P3)
{
Tr.add(P1);
Tr.add(P2);
Tr.add(P3);
if (!(rb() && correct()))
{
Tr.del();
Tr.del();
Tr.del();
cPoint P4(0,0),P5(1,0),P6(0,1);
Tr.add(P4);
Tr.add(P5);
Tr.add(P6);
};
}
cTriangle::cTriangle()
{
cPoint P1(0,0),P2(1,0),P3(0,1);
Tr.add(P1);
Tr.add(P2);
Tr.add(P3);
}
void cTriangle::move(const float dx,const float dy)
{
Tr.tobegin();
int k;
cPoint P;
for (k=0;k<3;k++)
{
Tr.GetInf(P);
P.Move(dx,dy);
Tr.SetInf(P);
Tr.move();
};
if (!(rb() && correct()))
{
cout<<endl<<"incorrect conditions!";
getch();
exit(1);
};
};
void cTriangle::rotate(const float x0,const float y0,const float al)
{
Tr.tobegin();
int k;
cPoint P;
for (k=0;k<3;k++)
{
Tr.GetInf(P);
P.Rotate(x0,y0,al);
Tr.SetInf(P);
Tr.move();
};
if (!(rb() && correct()))
{
cout<<endl<<"incorrect conditions!";
getch();
exit(1);
};
};
void cTriangle::scale(const float coef)
{
Tr.tobegin();
int k;
cPoint P;
for (k=0;k<3;k++)
{
Tr.GetInf(P);
P.SetXY(coef * P.GetX(),coef * P.GetY());
Tr.SetInf(P);
Tr.move();
};
if (!(rb() && correct()))
{
cout<<endl<<"incorrect conditions!";
getch();
exit(1);
};
};
/*
void cTriangle::Center(double &X,double &Y)
{
double x0,y0,x1,y1,x2,y2,xh,yh;
x0=GetX(1);
y0=GetY(1);
x1=GetX(2);
y1=GetY(2);
x2=GetX(3);
y2=GetY(3);
float a,b,c;
a=(x0-x1)*(x0-x1)+(y0-y1)*(y0-y1);
b=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
c=(x0-x2)*(x0-x2)+(y0-y2)*(y0-y2);
if (fabs(a-c) <= 0.01)
{
xh = (x1 + x2) / 2;
yh = (y1 + y2) / 2;
X = (x0 + 2 * xh) / 3;
Y = (y0 + 2 * yh) / 3;
}
else
{
if (fabs(a-b) <= 0.01)
{
xh = (x0 + x2) / 2;
yh = (y0 + y2) / 2;
X = (x1 + 2 * xh) / 3;
Y = (y1 + 2 * yh) / 3;
}
else
{
xh = (x0 + x1) / 2;
yh = (y0 + y1) / 2;
X = (x2 + 2 * xh) / 3;
Y = (y2 + 2 * yh) / 3;
}
}
}
void cTriangle::Draw()
{
int gdriver = DETECT, gmode;
initgraph(&gdriver, &gmode, "");
double Xm,Ym;
Xm = getmaxx() / 2;
Ym = getmaxy() / 2;
double x0,y0;
Center(x0,y0);
double sccoef = Xm / (4 * sqrt(x0*x0+y0*y0));
cTriangle bTr;
int i;
cPoint F;
for (i=1;i<=3;i++)
{
F.SetXY(GetX(i)*sccoef+Xm,Ym-GetY(i)*sccoef);
bTr.Set(i,F);
};
setcolor(BLUE);
line(bTr.GetX(1),bTr.GetY(1),bTr.GetX(2),bTr.GetY(2));
line(bTr.GetX(2),bTr.GetY(2),bTr.GetX(3),bTr.GetY(3));
line(bTr.GetX(1),bTr.GetY(1),bTr.GetX(3),bTr.GetY(3));
setcolor(WHITE);
line(Xm-10,Ym,Xm+10,Ym);
line(Xm,Ym-10,Xm,Ym+10);
setcolor(RED);
Out();
line(Xm-sccoef,Ym-sccoef,Xm-sccoef,Ym+sccoef);
line(Xm+sccoef,Ym-sccoef,Xm+sccoef,Ym+sccoef);
line(Xm-sccoef,Ym-sccoef,Xm+sccoef,Ym-sccoef);
line(Xm-sccoef,Ym+sccoef,Xm+sccoef,Ym+sccoef);
getch();
closegraph();
}
*/
void cTriangle::Out()
{
Tr.tobegin();
cPoint F;
int k;
for (k=1;k<4;k++)
{
Tr.GetInf(F);
F.Out();
cout<<" ";
Tr.move();
};
cout<<endl;
};
#endif
Соседние файлы в папке Лабораторная работа 22