summaryrefslogtreecommitdiff
path: root/task05/Guschin/Clip.h
diff options
context:
space:
mode:
authorAndrew Guschin <saintruler@gmail.com>2020-11-10 01:15:07 +0300
committerAndrew Guschin <saintruler@gmail.com>2020-11-10 01:15:07 +0300
commit73c6ec80c71dd43125b6a9b00dd9e940b827f29f (patch)
treecc3efa28497fe78f925522deedc772e930e11f1d /task05/Guschin/Clip.h
parent70a1711e877ba980e094ef66925568ee94afc3af (diff)
Разделил 5 задачу на два проекта
Diffstat (limited to 'task05/Guschin/Clip.h')
-rw-r--r--task05/Guschin/Clip.h54
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;
-}