diff options
author | randomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64> | 2012-01-17 19:11:27 +0000 |
---|---|---|
committer | randomguy3 <randomguy3@7c02a99a-9b00-45e3-bf44-6f3dd7fddb64> | 2012-01-17 19:11:27 +0000 |
commit | 79de5d881ffa864b8c33462fda27608a9b20a651 (patch) | |
tree | 0c50873fd8d7c10c99d7fdef880a4c717cf12af4 /tikzit | |
parent | f90dd4ffc4b679e61a2a8cf43853b7d3c72c3e83 (diff) |
Be a bit more forgiving about whether a point is on a line segment
git-svn-id: https://tikzit.svn.sourceforge.net/svnroot/tikzit/trunk@389 7c02a99a-9b00-45e3-bf44-6f3dd7fddb64
Diffstat (limited to 'tikzit')
-rw-r--r-- | tikzit/src/common/util.m | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/tikzit/src/common/util.m b/tikzit/src/common/util.m index 3dec971..ad04a96 100644 --- a/tikzit/src/common/util.m +++ b/tikzit/src/common/util.m @@ -21,6 +21,10 @@ #import "util.h" #import "math.h" +static BOOL fuzzyCompare(float f1, float f2) { + return (ABS(f1 - f2) <= 0.00001f * MIN(ABS(f1), ABS(f2))); +} + NSRect NSRectAroundPointsWithPadding(NSPoint p1, NSPoint p2, float padding) { return NSMakeRect(MIN(p1.x,p2.x)-padding, MIN(p1.y,p2.y)-padding, @@ -104,7 +108,10 @@ static BOOL lineSegmentContainsPoint(NSPoint l1, NSPoint l2, float x, float y) { float maxX = MAX(l1.x, l2.x); float minY = MIN(l1.y, l2.y); float maxY = MAX(l1.y, l2.y); - return x >= minX && x <= maxX && y >= minY && y <= maxY; + return (x >= minX || fuzzyCompare (x, minX)) && + (x <= maxX || fuzzyCompare (x, maxX)) && + (y >= minY || fuzzyCompare (y, minY)) && + (y <= maxY || fuzzyCompare (y, maxY)); } BOOL lineSegmentsIntersect(NSPoint l1start, NSPoint l1end, NSPoint l2start, NSPoint l2end, NSPoint *result) { |