From 1e9704dca9a861ffb7b2d3978e1390bea7af7ef0 Mon Sep 17 00:00:00 2001 From: neoraider Date: Wed, 26 Sep 2007 19:28:04 +0000 Subject: zoomedit: ?berschlagene Polygone werden jetzt korrekt gerendert --- Line.cpp | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) (limited to 'Line.cpp') 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); -- cgit v1.2.3