Advertisement
Guest User

qwerty

a guest
Oct 30th, 2014
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.38 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <windows.h>
  3. #include <windowsx.h>
  4. #include <stdio.h>
  5. #include <conio.h>
  6. #include <locale>
  7. #include<math.h>
  8.  
  9.  
  10. struct rectangle
  11. {
  12.     POINT point[4];
  13.     COLORREF circuit;   //цвет контура
  14.     COLORREF fill;     //цвет заливки
  15.     int width;        //ширина линии
  16.  
  17. };
  18.  
  19. int check_rectangle(POINT *p)//проверка на прямогугольник
  20. {
  21.  
  22.     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));
  23. }
  24.  
  25.  
  26.  
  27.  
  28.  
  29. int inscreen(HWND hwnd, POINT *p)
  30. {
  31.  
  32.     bool flag = true;
  33.     RECT rt;
  34.     GetClientRect(hwnd, &rt);
  35.     int maxX = rt.right, maxY = rt.bottom;
  36.     for (int i = 0; i < 4 && flag; i++)
  37.     {
  38.         if (p[i].x < rt.right && p[i].y < rt.bottom)
  39.             flag = true;
  40.         else
  41.             flag = false;
  42.     }
  43.     return flag;
  44.  
  45. }
  46.  
  47.  
  48. float area(POINT A, POINT B, POINT C)
  49. {
  50.  
  51.     return abs(((B.x - A.x)*(C.y - A.y) - (C.x - A.x)*(B.y - A.y)) / 2);
  52. }
  53. int check_Insert(rectangle out, rectangle in)//проверка на вложенность
  54. {
  55.     float S_pr;//площадь треугольника
  56.     S_pr = 2 * area(out.point[0], out.point[1], out.point[2]);
  57.     float Sum = 0;
  58.     bool flag = true;
  59.     for (int i = 0; i < 4 && flag; i++)
  60.     {
  61.         for (int j = 0; j < 4; j++)
  62.         {
  63.             Sum += area(out.point[j], out.point[(j + 1) % 4], in.point[i]);
  64.         }
  65.         if (Sum != S_pr)
  66.             flag = false;
  67.         else
  68.             Sum = 0;
  69.  
  70.     }
  71.     return flag;
  72. }
  73.  
  74.  
  75.  
  76. void input(FILE* in, rectangle &P)
  77. {
  78.     char temp[20];
  79.     fscanf(in, "%s", &temp);
  80.     for (int i = 0; i < 4; i++) //ввод координат
  81.     {
  82.         fscanf(in, "%d %d", &P.point[i].x, &P.point[i].y);
  83.     }
  84.     int r, g, b;       //ввод цвета контура фигуры
  85.  
  86.     fscanf(in, "%s", &temp);
  87.     fscanf(in, "%d %d %d", &r, &g, &b);    //ввод цвета контура фигуры
  88.     P.circuit = RGB(r, g, b);
  89.  
  90.     fscanf(in, "%s", &temp);
  91.     fscanf(in, "%d %d %d", &r, &g, &b);       //ввод цвета заливки
  92.     P.fill = RGB(r, g, b);
  93.  
  94.     fscanf(in, "%s", &temp);
  95.     fscanf(in, "%d", &P.width); //ввод ширины контура
  96.  
  97. }
  98.  
  99. void main()
  100. {
  101.     setlocale(LC_ALL, "russian");
  102.  
  103.     FILE *in;
  104.  
  105.     in = fopen("input.txt", "r");
  106.     char mode[20];
  107.     fscanf(in, "%s", mode);
  108.     int type;
  109.     if (!strcmp(mode, "First_mode"))
  110.         type = 1;
  111.     if (!strcmp(mode, "Second_mode"))
  112.         type = 2;
  113.     HWND hwnd = GetConsoleWindow();
  114.     HDC hdc = GetDC(hwnd);
  115.     if (type == 1)
  116.     {
  117.         rectangle P;
  118.         input(in, P);
  119.  
  120.         if (!inscreen(hwnd, P.point))
  121.         {
  122.             printf("Фигура не входит в размеры окна");
  123.             _getch();
  124.             return;
  125.         }
  126.         if (!check_rectangle(P.point))
  127.         {
  128.             printf("Фигура не является прямогугольником");
  129.             _getch();
  130.             return;
  131.         }
  132.  
  133.  
  134.  
  135.         HPEN hPen = CreatePen(PS_SOLID, P.width, P.circuit);
  136.         HPEN hOldPen = SelectPen(hdc, hPen);
  137.  
  138.         HBRUSH hBrush = CreateSolidBrush(P.fill);
  139.         HBRUSH hOldBrush = SelectBrush(hdc, hBrush);
  140.         printf("Graphics in Console Window.");
  141.         do
  142.         {
  143.             Polygon(hdc, P.point, 4);
  144.         } while (_getch() != 27);
  145.  
  146.  
  147.     }
  148.     else
  149.     {
  150.  
  151.         rectangle P1;
  152.         rectangle P2;
  153.         input(in, P1);
  154.         input(in, P2);
  155.         if (!inscreen(hwnd, P1.point))
  156.         {
  157.             printf("Внешняя фигура не входит в размеры окна");
  158.             _getch();
  159.             return;
  160.         }
  161.         if (!check_rectangle(P1.point))
  162.         {
  163.             printf("Внешняя фигура не является прямогугольником");
  164.             _getch();
  165.             return;
  166.         }
  167.         if (!inscreen(hwnd, P2.point))
  168.         {
  169.             printf("Внутренняя фигура не входит в размеры окна");
  170.             _getch();
  171.             return;
  172.         }
  173.         if (!check_rectangle(P2.point))
  174.         {
  175.             printf("Внутренняя фигура не является прямогугольником");
  176.             _getch();
  177.             return;
  178.         }
  179.         if (!check_Insert(P1, P2))
  180.         {
  181.             printf("Фигуры не вложены");
  182.             _getch();
  183.             return;
  184.         }
  185.  
  186.         HPEN hPen1 = CreatePen(PS_SOLID, P1.width, P1.circuit);
  187.         HPEN hPen2 = CreatePen(PS_SOLID, P2.width, P2.circuit);
  188.         HPEN hOldPen1 = SelectPen(hdc, hPen1);
  189.  
  190.  
  191.         HBRUSH hBrush1 = CreateSolidBrush(P1.fill);
  192.         HBRUSH  hBrush2 = CreateSolidBrush(P2.fill);
  193.         HBRUSH hOldBrush1 = SelectBrush(hdc, hBrush1);
  194.  
  195.         do
  196.         {
  197.             Polygon(hdc, P1.point, 4);
  198.             hOldPen1 = SelectPen(hdc, hPen2);
  199.             hOldBrush1 = SelectBrush(hdc, hBrush2);
  200.             Polygon(hdc, P2.point, 4);
  201.         } while (_getch() != 27);
  202.  
  203.  
  204.  
  205.     }
  206.     _getch();
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement