Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- int apposition(const int *, const int *); // основной алгоритм, определяет величину пересечения отрезков
- int space(const int *, const int *); // вспомогательный к apposition, считает площадь пересечения двух прямоугольников
- int main(void)
- {
- int r1[4] = {10, 10, 20, 20};
- int r2[4] = {10, 15, 20, 25};
- printf("S = %i", space(r1, r2));
- return 0;
- }
- int space(const int *rect1, const int *rect2)
- {
- int x1[2] = {rect1[0], rect1[2]}, y1[2] = {rect1[1], rect1[3]};
- int x2[2] = {rect2[0], rect2[2]}, y2[2] = {rect2[1], rect2[3]};
- return apposition(x1, x2) * apposition(y1, y2);
- }
- int apposition(const int *m, const int *p)
- {
- char pos = (m[0] > p[0]) << 3;
- pos += (m[0] > p[1]) << 2;
- pos += (m[1] > p[0]) << 1;
- pos += (m[1] > p[1]);
- switch (pos)
- {
- case 3:
- case 10:
- case 12:
- if (abs(m[0] - m[1]) >= abs(p[0] - p[1]))
- {
- return abs(p[0] - p[1]);
- }
- else
- {
- return abs(m[0] - m[1]);
- }
- break;
- case 2:
- return abs(m[1] - p[0]);
- break;
- case 11:
- return abs(m[0] - p[1]);
- break;
- default:
- return 0;
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement