Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.38 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. int apposition(const int *, const int *); // основной алгоритм, определяет величину пересечения отрезков
  5. int space(const int *, const int *); // вспомогательный к apposition, считает площадь пересечения двух прямоугольников
  6.  
  7. int main(void)
  8. {
  9.     int r1[4] = {10, 10, 20, 20};
  10.     int r2[4] = {10, 15, 20, 25};
  11.  
  12.     printf("S = %i", space(r1, r2));
  13.  
  14.     return 0;
  15. }
  16.  
  17. int space(const int *rect1, const int *rect2)
  18. {
  19.     int x1[2] = {rect1[0], rect1[2]}, y1[2] = {rect1[1], rect1[3]};
  20.     int x2[2] = {rect2[0], rect2[2]}, y2[2] = {rect2[1], rect2[3]};
  21.     return apposition(x1, x2) * apposition(y1, y2);
  22. }
  23.  
  24. int apposition(const int *m, const int *p)
  25. {
  26.     char pos = (m[0] > p[0]) << 3;
  27.     pos += (m[0] > p[1]) << 2;
  28.     pos += (m[1] > p[0]) << 1;
  29.     pos += (m[1] > p[1]);
  30.  
  31.     switch (pos)
  32.     {
  33.     case 3:
  34.     case 10:
  35.     case 12:
  36.         if (abs(m[0] - m[1]) >= abs(p[0] - p[1]))
  37.         {
  38.             return abs(p[0] - p[1]);
  39.         }
  40.         else
  41.         {
  42.             return abs(m[0] - m[1]);
  43.         }
  44.         break;
  45.     case 2:
  46.         return abs(m[1] - p[0]);
  47.         break;
  48.     case 11:
  49.         return abs(m[0] - p[1]);
  50.         break;
  51.     default:
  52.         return 0;
  53.         break;
  54.     }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement