summaryrefslogtreecommitdiffstats
path: root/Line.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Line.cpp')
-rw-r--r--Line.cpp52
1 files changed, 26 insertions, 26 deletions
diff --git a/Line.cpp b/Line.cpp
index 4bc0c3c..463a6ab 100644
--- a/Line.cpp
+++ b/Line.cpp
@@ -3,52 +3,52 @@
bool Line::contains(const Vertex &v) const {
- if(v1.getX() == v2.getX() && v1.getY() == v2.getY()) {
- if(v1.getX() == v.getX() && v1.getY() == v.getY())
+ if(fabs(v1.getX() - v2.getX()) < 1E-6 && fabs(v1.getY() - v2.getY()) < 1E-6) {
+ if(fabs(v1.getX() - v.getX()) < 1E-6 && fabs(v1.getY() - v.getY()) < 1E-6)
return true;
else
return false;
}
- if(v1.getX() == v2.getX()) {
- if(v1.getX() != v.getX())
+ if(fabs(v1.getX() - v2.getX()) < 1E-6) {
+ if(fabs(v1.getX() - v.getX()) >= 1E-6)
return false;
- else if(v.getY() >= fmin(v1.getY(), v2.getY()) && v.getY() <= fmax(v1.getY(), v2.getY()))
+ else if(v.getY() - fmin(v1.getY(), v2.getY()) > -1E-6 && v.getY() - fmax(v1.getY(), v2.getY()) < 1E-6)
return true;
else
return false;
}
- if(v1.getY() == v2.getY()) {
- if(v1.getY() != v.getY())
+ if(fabs(v1.getY() - v2.getY()) < 1E-6) {
+ if(fabs(v1.getY() - v.getY()) >= 1E-6)
return false;
- else if(v.getX() >= fmin(v1.getX(), v2.getX()) && v.getX() <= fmax(v1.getX(), v2.getX()))
+ else if(v.getX() - fmin(v1.getX(), v2.getX()) > -1E-6 && v.getX() - fmax(v1.getX(), v2.getX()) < 1E-6)
return true;
else
return false;
}
- if((v.getX()-v1.getX())/(v2.getX()-v1.getX()) - (v.getY()-v1.getY())/(v2.getY()-v1.getY()) == 0)
+ if(fabs((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 {
- double xa1 = v1.getX(), ya1 = v1.getY();
- double xa2 = v2.getX(), ya2 = v2.getY();
- double xb1 = l.v1.getX(), yb1 = l.v1.getY();
- double xb2 = l.v2.getX(), yb2 = l.v2.getY();
- double temp;
+ 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;
int switched = 0;
Vertex v2;
if(!v) v = &v2;
- if(xa1 == xa2 && ya1 == ya2) return INTERSECTION_ERROR;
- if(xb1 == xb2 && yb1 == yb2) return INTERSECTION_ERROR;
+ if(fabs(xa1 - xa2) < 1E-6 && fabs(ya1 - ya2) < 1E-6) return INTERSECTION_ERROR;
+ if(fabs(xb1 - xb2) < 1E-6 && fabs(yb1 - yb2) < 1E-6) return INTERSECTION_ERROR;
- if(xa1 == xa2 || xb1 == xb2) {
+ if(fabs(xa1 - xa2) < 1E-6 || fabs(xb1 - xb2) < 1E-6) {
temp = xa1; xa1 = ya1; ya1 = temp;
temp = xa2; xa2 = ya2; ya2 = temp;
temp = xb1; xb1 = yb1; yb1 = temp;
@@ -57,24 +57,24 @@ int Line::intersects(const Line &l, Vertex *v) const {
switched = 1;
}
- if(xa1 == xa2 && xb1 == xb2)
- return (xa1 == xb1) ? INTERSECTION_IDENTICAL : INTERSECTION_NONE;
+ if(fabs(xa1 - xa2) < 1E-6 && fabs(xb1 - xb2) < 1E-6)
+ return (fabs(xa1 - xb1) < 1E-6) ? INTERSECTION_IDENTICAL : INTERSECTION_NONE;
- if(xa1 == xa2) {
+ if(fabs(xa1 - xa2) < 1E-6) {
v->setX(xa1);
v->setY(yb1);
}
- else if(xb1 == xb2) {
+ else if(fabs(xb1 - xb2) < 1E-6) {
v->setX(xb1);
v->setY(ya1);
}
else {
- double ma = (ya2-ya1)/(xa2-xa1);
- double mb = (yb2-yb1)/(xb2-xb1);
- double ba = ya1 - ma*xa1;
- double bb = yb1 - mb*xb1;
+ float ma = (ya2-ya1)/(xa2-xa1);
+ float mb = (yb2-yb1)/(xb2-xb1);
+ float ba = ya1 - ma*xa1;
+ float bb = yb1 - mb*xb1;
- if(ma == mb) return (ba == bb) ? INTERSECTION_IDENTICAL : INTERSECTION_NONE;
+ if(fabs(ma - mb) < 1E-6) return (fabs(ba - bb) < 1E-6) ? INTERSECTION_IDENTICAL : INTERSECTION_NONE;
v->setX((bb-ba)/(ma-mb));
v->setY(ma*v->getX() + ba);