diff options
-rw-r--r-- | ptinpoly.c | 23 | ||||
-rw-r--r-- | ptintriangle.c | 28 |
2 files changed, 26 insertions, 25 deletions
@@ -69,17 +69,18 @@ newpolygon(Point2 *pts, int npts) return poly; } -int -ptinpoly(Point2 p, Polygon poly) -{ - int i, j, c; +//int +//ptinpoly(Point2 p, Polygon poly) +//{ +// int i, j, c; +// +// for(i = c = 0, j = poly.npts-1; i < poly.npts; j = i++) +// if(p.y < poly.pts[i].y != p.y < poly.pts[j].y && +// p.x < (poly.pts[j].x - poly.pts[i].x) * (p.y - poly.pts[i].y)/(poly.pts[j].y - poly.pts[i].y) + poly.pts[i].x) +// c ^= 1; +// return c; +//} - for(i = c = 0, j = poly.npts-1; i < poly.npts; j = i++) - if(p.y < poly.pts[i].y != p.y < poly.pts[j].y && - p.x < (poly.pts[j].x - poly.pts[i].x) * (p.y - poly.pts[i].y)/(poly.pts[j].y - poly.pts[i].y) + poly.pts[i].x) - c ^= 1; - return c; -} Point toscreen(Point2 p) @@ -137,7 +138,7 @@ void rmb(Mousectl *mc) { thepoint = fromscreen(mc->xy); - isinside = ptinpoly(thepoint, *thepoly); + isinside = ptinpoly(thepoint, thepoly->pts, thepoly->npts); } void diff --git a/ptintriangle.c b/ptintriangle.c index 6313e8b..216a135 100644 --- a/ptintriangle.c +++ b/ptintriangle.c @@ -50,20 +50,20 @@ fromscreen(Point p) * p to the left: - * p on the edge: 0 */ -static int -edgeptcmp(Point2 e0, Point2 e1, Point2 p) -{ - Point3 e0p, e01, r; - - p = subpt2(p, e0); - e1 = subpt2(e1, e0); - e0p = Vec3(p.x,p.y,0); - e01 = Vec3(e1.x,e1.y,0); - r = crossvec3(e0p, e01); - - /* clamp to avoid overflow */ - return fclamp(r.z, -1, 1); /* e0.x*e1.y - e0.y*e1.x */ -} +//static int +//edgeptcmp(Point2 e0, Point2 e1, Point2 p) +//{ +// Point3 e0p, e01, r; +// +// p = subpt2(p, e0); +// e1 = subpt2(e1, e0); +// e0p = Vec3(p.x,p.y,0); +// e01 = Vec3(e1.x,e1.y,0); +// r = crossvec3(e0p, e01); +// +// /* clamp to avoid overflow */ +// return fclamp(r.z, -1, 1); /* e0.x*e1.y - e0.y*e1.x */ +//} int ptintriangle(Point2 p, Triangle t) |