diff options
Diffstat (limited to 'task05/Guschin/Clip.h')
| -rw-r--r-- | task05/Guschin/Clip.h | 54 |
1 files changed, 0 insertions, 54 deletions
diff --git a/task05/Guschin/Clip.h b/task05/Guschin/Clip.h deleted file mode 100644 index 10a613a..0000000 --- a/task05/Guschin/Clip.h +++ /dev/null @@ -1,54 +0,0 @@ -#pragma once -#include "Matrix.h" -#include <algorithm> - -unsigned int codeKS(vec2 P, float minX, float minY, float maxX, float maxY) { - unsigned int code = 0; - - if (P.x < minX) { - code += 1; - } - else if (P.x > maxX) { - code += 2; - } - if (P.y < minY) { - code += 4; - } - else if (P.y > maxY) { - code += 8; - } - - return code; -} - -bool clip(vec2 & A, vec2 & B, float minX, float minY, float maxX, float maxY) { - unsigned int codeA = codeKS(A, minX, minY, maxX, maxY); - unsigned int codeB = codeKS(B, minX, minY, maxX, maxY); - while (codeA | codeB) { - if (codeA & codeB) { - return false; - } - if (codeA == 0) { - std::swap(A, B); - std::swap(codeA, codeB); - } - if (codeA & 1) { - A.y = A.y + (B.y - A.y) * (minX - A.x) / (B.x - A.x); - A.x = minX; - } - else if (codeA & 2) { - A.y = A.y + (B.y - A.y) * (maxX - A.x) / (B.x - A.x); - A.x = maxX; - } - else if (codeA & 4) { - A.x = A.x + (B.x - A.x) * (minY - A.y) / (B.y - A.y); - A.y = minY; - } - else { - A.x = A.x + (B.x - A.x) * (maxY - A.y) / (B.y - A.y); - A.y = maxY; - } - codeA = codeKS(A, minX, minY, maxX, maxY); - } - return true; -} |