Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <clocale>
- using namespace std;
- #define FIGURE_NUM 2
- enum tFigure
- {
- circle,
- rectangle,
- triangle
- };
- enum tColor
- {
- red,
- green,
- blue
- };
- struct tPoint
- {
- float x;
- float y;
- };
- struct tCircle
- {
- tPoint* center;
- float radius;
- };
- struct tRectangle
- {
- tPoint* s1;
- tPoint* s2;
- };
- struct tTriangle
- {
- tPoint* t1;
- tPoint* t2;
- tPoint* t3;
- };
- union uFigures
- {
- tCircle* Circle;
- tRectangle* Rectangle;
- tTriangle* Triangle;
- };
- struct tFigures
- {
- tColor color;
- tFigure figureType;
- uFigures figures;
- };
- tPoint* inputPoint()
- {
- tPoint* point1 = new tPoint;
- cout<<"x=";
- cin>>point1->x;
- cout<<"y=";
- cin>>point1->y;
- return point1;
- }
- tFigures* inputFigure()
- {
- tFigures* fig1 = new tFigures;
- int num;
- cout<<"Введите цвет фигуры (0-красный, 1-зеленый, 2-синий) ";
- cin>>num;
- fig1->color=tColor(num);
- cout<<"Введите тип фигуры (0-круг, 1-прямоугольник, 2-треугольник) ";
- cin>>num;
- fig1->figureType=tFigure(num);
- switch(fig1->figureType)
- {
- case circle:
- {
- cout<<"Введите координату центра и радиус круга"<<endl;
- fig1->figures.Circle->center=inputPoint();
- cout<<"r=";
- cin>>fig1->figures.Circle->radius;
- break;
- }
- case rectangle:
- {
- cout<<"Ведите координаты верхней левой и нижнего правой вершины"<<endl;
- fig1->figures.Rectangle->s1=inputPoint();
- fig1->figures.Rectangle->s2=inputPoint();
- break;
- }
- case triangle:
- {
- cout<<"Введите координаты вершин треугольника"<<endl;
- fig1->figures.Triangle->t1=inputPoint();
- fig1->figures.Triangle->t2=inputPoint();
- fig1->figures.Triangle->t3=inputPoint();
- break;
- }
- }
- return fig1;
- }
- int outputFigure(tFigures fig)
- {
- switch (fig.color)
- {
- case blue:
- cout<<"Blue ";
- break;
- case red:
- cout<<"Red ";
- break;
- case green:
- cout<<"Green ";
- break;
- }
- switch (fig.figureType)
- {
- case circle:
- cout<<"Circle"<<endl;
- cout<<fig.figures.Circle->center->x<<" ";
- cout<<fig.figures.Circle->center->y<<endl;
- cout<<fig.figures.Circle->radius<<endl<<endl;
- break;
- case rectangle:
- cout<<"Rectangle"<<endl;
- cout<<fig.figures.Rectangle->s1->x<<" ";
- cout<<fig.figures.Rectangle->s1->y<<endl;
- cout<<fig.figures.Rectangle->s2->x<<" ";
- cout<<fig.figures.Rectangle->s2->y<<endl;
- break;
- case triangle:
- cout<<"Triangle"<<endl;
- cout<<fig.figures.Triangle->t1->x<<" ";
- cout<<fig.figures.Triangle->t1->y<<endl;
- cout<<fig.figures.Triangle->t2->x<<" ";
- cout<<fig.figures.Triangle->t2->y<<endl;
- cout<<fig.figures.Triangle->t3->x<<" ";
- cout<<fig.figures.Triangle->t3->y<<endl;
- break;
- }
- return 0;
- }
- bool checkFigure(tFigures* fig1, tFigures* fig2)
- {
- if (fig1->figureType==circle)
- {
- return (fig1->figures.Circle->center->x + fig1->figures.Circle->radius < fig2->figures.Rectangle->s2->x &&
- fig1->figures.Circle->center->x - fig1->figures.Circle->radius > fig2->figures.Rectangle->s1->x &&
- fig1->figures.Circle->center->y + fig1->figures.Circle->radius < fig2->figures.Rectangle->s1->y &&
- fig1->figures.Circle->center->y - fig1->figures.Circle->radius > fig2->figures.Rectangle->s2->y);
- }
- else
- {
- return (fig2->figures.Circle->center->x + fig2->figures.Circle->radius < fig1->figures.Rectangle->s2->x &&
- fig2->figures.Circle->center->x - fig2->figures.Circle->radius > fig1->figures.Rectangle->s1->x &&
- fig2->figures.Circle->center->y + fig2->figures.Circle->radius < fig1->figures.Rectangle->s1->y &&
- fig2->figures.Circle->center->y - fig2->figures.Circle->radius > fig1->figures.Rectangle->s2->y);
- }
- }
- int main()
- {
- setlocale(LC_ALL,"rus");
- tFigures* List = new tFigures[FIGURE_NUM];
- for(int i=0;i<FIGURE_NUM;i++)
- {
- cout<<"Введите данные об "<<i+1<<"-ой фигуре"<<endl;
- List[i] = *inputFigure();
- }
- for(int i=0;i<FIGURE_NUM;i++)
- outputFigure(List[i]);
- bool checkResult = false;
- for(int i=0;i<FIGURE_NUM;i++)
- {
- for(int j=i;j<FIGURE_NUM;j++)
- if(((List[i].figureType==circle) && (List[j].figureType==rectangle))||((List[i].figureType==rectangle) && (List[j].figureType==circle)))
- {
- checkResult = checkFigure(&List[i], &List[j]);
- if(checkResult)
- break;
- }
- else
- continue;
- if (checkResult)
- break;
- }
- if(checkResult)
- cout<<"есть круг вписанный в прямоугольник";
- else
- cout<<"нет круга вписанного в прямоугольник";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement