Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <windows.h>
- #include <windowsx.h>
- #include <stdio.h>
- #include <conio.h>
- #include <locale>
- #include<math.h>
- struct rectangle
- {
- POINT point[4];
- COLORREF circuit; //цвет контура
- COLORREF fill; //цвет заливки
- int width; //ширина линии
- };
- int check_rectangle(POINT *p)//проверка на прямогугольник
- {
- return ((p[0].y == p[1].y) && (p[2].y == p[3].y) && (p[0].x == p[3].x) && (p[1].x == p[2].x));
- }
- int inscreen(HWND hwnd, POINT *p)
- {
- bool flag = true;
- RECT rt;
- GetClientRect(hwnd, &rt);
- int maxX = rt.right, maxY = rt.bottom;
- for (int i = 0; i < 4 && flag; i++)
- {
- if (p[i].x < rt.right && p[i].y < rt.bottom)
- flag = true;
- else
- flag = false;
- }
- return flag;
- }
- float area(POINT A, POINT B, POINT C)
- {
- return abs(((B.x - A.x)*(C.y - A.y) - (C.x - A.x)*(B.y - A.y)) / 2);
- }
- int check_Insert(rectangle out, rectangle in)//проверка на вложенность
- {
- float S_pr;//площадь треугольника
- S_pr = 2 * area(out.point[0], out.point[1], out.point[2]);
- float Sum = 0;
- bool flag = true;
- for (int i = 0; i < 4 && flag; i++)
- {
- for (int j = 0; j < 4; j++)
- {
- Sum += area(out.point[j], out.point[(j + 1) % 4], in.point[i]);
- }
- if (Sum != S_pr)
- flag = false;
- else
- Sum = 0;
- }
- return flag;
- }
- void input(FILE* in, rectangle &P)
- {
- char temp[20];
- fscanf(in, "%s", &temp);
- for (int i = 0; i < 4; i++) //ввод координат
- {
- fscanf(in, "%d %d", &P.point[i].x, &P.point[i].y);
- }
- int r, g, b; //ввод цвета контура фигуры
- fscanf(in, "%s", &temp);
- fscanf(in, "%d %d %d", &r, &g, &b); //ввод цвета контура фигуры
- P.circuit = RGB(r, g, b);
- fscanf(in, "%s", &temp);
- fscanf(in, "%d %d %d", &r, &g, &b); //ввод цвета заливки
- P.fill = RGB(r, g, b);
- fscanf(in, "%s", &temp);
- fscanf(in, "%d", &P.width); //ввод ширины контура
- }
- void main()
- {
- setlocale(LC_ALL, "russian");
- FILE *in;
- in = fopen("input.txt", "r");
- char mode[20];
- fscanf(in, "%s", mode);
- int type;
- if (!strcmp(mode, "First_mode"))
- type = 1;
- if (!strcmp(mode, "Second_mode"))
- type = 2;
- HWND hwnd = GetConsoleWindow();
- HDC hdc = GetDC(hwnd);
- if (type == 1)
- {
- rectangle P;
- input(in, P);
- if (!inscreen(hwnd, P.point))
- {
- printf("Фигура не входит в размеры окна");
- _getch();
- return;
- }
- if (!check_rectangle(P.point))
- {
- printf("Фигура не является прямогугольником");
- _getch();
- return;
- }
- HPEN hPen = CreatePen(PS_SOLID, P.width, P.circuit);
- HPEN hOldPen = SelectPen(hdc, hPen);
- HBRUSH hBrush = CreateSolidBrush(P.fill);
- HBRUSH hOldBrush = SelectBrush(hdc, hBrush);
- printf("Graphics in Console Window.");
- do
- {
- Polygon(hdc, P.point, 4);
- } while (_getch() != 27);
- }
- else
- {
- rectangle P1;
- rectangle P2;
- input(in, P1);
- input(in, P2);
- if (!inscreen(hwnd, P1.point))
- {
- printf("Внешняя фигура не входит в размеры окна");
- _getch();
- return;
- }
- if (!check_rectangle(P1.point))
- {
- printf("Внешняя фигура не является прямогугольником");
- _getch();
- return;
- }
- if (!inscreen(hwnd, P2.point))
- {
- printf("Внутренняя фигура не входит в размеры окна");
- _getch();
- return;
- }
- if (!check_rectangle(P2.point))
- {
- printf("Внутренняя фигура не является прямогугольником");
- _getch();
- return;
- }
- if (!check_Insert(P1, P2))
- {
- printf("Фигуры не вложены");
- _getch();
- return;
- }
- HPEN hPen1 = CreatePen(PS_SOLID, P1.width, P1.circuit);
- HPEN hPen2 = CreatePen(PS_SOLID, P2.width, P2.circuit);
- HPEN hOldPen1 = SelectPen(hdc, hPen1);
- HBRUSH hBrush1 = CreateSolidBrush(P1.fill);
- HBRUSH hBrush2 = CreateSolidBrush(P2.fill);
- HBRUSH hOldBrush1 = SelectBrush(hdc, hBrush1);
- do
- {
- Polygon(hdc, P1.point, 4);
- hOldPen1 = SelectPen(hdc, hPen2);
- hOldBrush1 = SelectBrush(hdc, hBrush2);
- Polygon(hdc, P2.point, 4);
- } while (_getch() != 27);
- }
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement