summaryrefslogtreecommitdiffstats
path: root/Line.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Line.cpp')
-rw-r--r--Line.cpp104
1 files changed, 0 insertions, 104 deletions
diff --git a/Line.cpp b/Line.cpp
deleted file mode 100644
index aa7bcad..0000000
--- a/Line.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "Line.h"
-#include <math.h>
-
-
-bool Line::contains(const Vertex &v) const {
- if(fabsf(v1.getX() - v2.getX()) < 1E-6 && fabsf(v1.getY() - v2.getY()) < 1E-6) {
- if(fabsf(v1.getX() - v.getX()) < 1E-6 && fabsf(v1.getY() - v.getY()) < 1E-6)
- return true;
- else
- return false;
- }
-
- if(fabsf(v1.getX() - v2.getX()) < 1E-6) {
- if(fabsf(v1.getX() - v.getX()) >= 1E-6)
- return false;
- else if(v.getY() - fminf(v1.getY(), v2.getY()) > -1E-6 && v.getY() - fmaxf(v1.getY(), v2.getY()) < 1E-6)
- return true;
- else
- return false;
- }
-
- if(fabsf(v1.getY() - v2.getY()) < 1E-6) {
- if(fabsf(v1.getY() - v.getY()) >= 1E-6)
- return false;
- else if(v.getX() - fminf(v1.getX(), v2.getX()) > -1E-6 && v.getX() - fmaxf(v1.getX(), v2.getX()) < 1E-6)
- return true;
- else
- return false;
- }
- if(fabsf((v.getX()-v1.getX())/(v2.getX()-v1.getX()) - (v.getY()-v1.getY())/(v2.getY()-v1.getY())) < 1E-6)
- return true;
- else
- return false;
-}
-
-int Line::intersects(const Line &l, Vertex *v) const {
- float xa1 = v1.getX(), ya1 = v1.getY();
- float xa2 = v2.getX(), ya2 = v2.getY();
- float xb1 = l.v1.getX(), yb1 = l.v1.getY();
- float xb2 = l.v2.getX(), yb2 = l.v2.getY();
- float temp;
- bool switched = false;
- Vertex v2;
-
-
- if(!v) v = &v2;
-
- if(fabsf(xa1 - xa2) < 1E-6 && fabsf(ya1 - ya2) < 1E-6) return INTERSECTION_ERROR;
- if(fabsf(xb1 - xb2) < 1E-6 && fabsf(yb1 - yb2) < 1E-6) return INTERSECTION_ERROR;
-
- if(fabsf(xa1 - xa2) < 1E-6 || fabsf(xb1 - xb2) < 1E-6) {
- temp = xa1; xa1 = ya1; ya1 = temp;
- temp = xa2; xa2 = ya2; ya2 = temp;
- temp = xb1; xb1 = yb1; yb1 = temp;
- temp = xb2; xb2 = yb2; yb2 = temp;
-
- switched = true;
- }
-
- if(fabsf(xa1 - xa2) < 1E-6 && fabsf(xb1 - xb2) < 1E-6)
- return (fabsf(xa1 - xb1) < 1E-6) ? INTERSECTION_IDENTICAL : INTERSECTION_NONE;
-
- if(fabsf(xa1 - xa2) < 1E-6) {
- v->setX(xa1);
- v->setY(yb1);
- }
- else if(fabsf(xb1 - xb2) < 1E-6) {
- v->setX(xb1);
- v->setY(ya1);
- }
- else {
- float ma = (ya2-ya1)/(xa2-xa1);
- float mb = (yb2-yb1)/(xb2-xb1);
- float ba = ya1 - ma*xa1;
- float bb = yb1 - mb*xb1;
-
- if(fabsf(ma - mb) < 1E-6) return (fabsf(ba - bb) < 1E-6) ? INTERSECTION_IDENTICAL : INTERSECTION_NONE;
-
- v->setX((bb-ba)/(ma-mb));
- v->setY(ma*v->getX() + ba);
- }
-
- if(switched) {
- temp = v->getX(); v->setX(v->getY()); v->setY(temp);
-
- //switch back everything for segment tests
- temp = xa1; xa1 = ya1; ya1 = temp;
- temp = xa2; xa2 = ya2; ya2 = temp;
- temp = xb1; xb1 = yb1; yb1 = temp;
- temp = xb2; xb2 = yb2; yb2 = temp;
- }
-
- if(v->getX() < fminf(xa1,xa2) || v->getX() > fmaxf(xa1, xa2) || v->getY() < fminf(ya1,ya2) || v->getY() > fmaxf(ya1, ya2)) {
- if(v->getX() < fminf(xb1,xb2) || v->getX() > fmaxf(xb1, xb2) || v->getY() < fminf(yb1,yb2) || v->getY() > fmaxf(yb1, yb2))
- return INTERSECTION_LINE_LINE;
- else
- return INTERSECTION_LINE_SEGMENT;
- }
- else if(v->getX() < fminf(xb1,xb2) || v->getX() > fmaxf(xb1, xb2) || v->getY() < fminf(yb1,yb2) || v->getY() > fmaxf(yb1, yb2))
- return INTERSECTION_SEGMENT_LINE;
- else
- return INTERSECTION_SEGMENT_SEGMENT;
-}
-