http://stackoverflow.com/questions/217578/how-can-i-determine-whether-a-2d-point-is-within-a-polygon
你这个是凹多边形的。凸多边形的我倒是有想法。
图形内的任意一点,然后按照图形边的同一方向。这个点都在所有图形边的同一侧。(好像只适用于凸多边形的。)
帮你顶了一下问题。
谢谢,之前没有做过图形相关的东西,真费脑子啊
GDI里面我记得有个函数叫PtInRegion的API,不知道有没用
1 public boolean isInPolygon(Point point, Point[] points) { 2 int nCross = 0; 3 int n=points.Length; 4 for (int i = 0; i < n; i++) { 5 Point p1 = points[i]; 6 Point p2 = points[(i + 1) % n]; 7 // 求解 y=p.y 与 p1 p2 的交点 8 // p1p2 与 y=p0.y平行 9 if (p1.y == p2.y) 10 continue; 11 // 交点在p1p2延长线上 12 if (point.y < Math.min(p1.y, p2.y)) 13 continue; 14 // 交点在p1p2延长线上 15 if (point.y >= Math.max(p1.y, p2.y)) 16 continue; 17 // 求交点的 X 坐标 18 double x = (double) (point.y - p1.y) * (double) (p2.x - p1.x) 19 / (double) (p2.y - p1.y) + p1.x; 20 // 只统计单边交点 21 if (x > point.x) 22 nCross++; 23 } 24 return (nCross % 2 == 1); 25 }
拿去吧~~~~
请问能再详细讲一下吗?我这里需要把图形条件处理一下成SQL去数据库查,尽量把一个图形抽象成各种条件
@之奇一昂: point是你要算的那个点的坐标,point[]是多边形各种顶点的坐标,不过要保证是有序的,就是说,你绘制这个多边形时笔触经过各顶点的先后顺序。
@ensleep: 看你这解释,感觉代码不是你写的一样。我希望你能解释一下,为什么这样写,这个程序背后支持这个算法的数学原理方面的?
@ensleep: 从测试点到图形外面发射线,查交点的个数?
@之奇一昂: 还有比代码更清楚的解释???就25行的代码,大哥,你让我一句一句给你讲语法么?
@之奇一昂: 你是面视官?我是来面试的?
@ensleep: 不好意思,我对你要求太高了,对不起!
@ensleep:
float InvSqrt(float x) { float xhalf = 0.5f*x; int i = *(int*)&x; // get bits for floating VALUE i = 0x5f375a86- (i>>1); // gives initial guess y0 x = *(float*)&i; // convert bits BACK to float x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy x = x*(1.5f-xhalf*x*x); // Newton step, repeating increases accuracy return 1/x; }
像这段代码,如果不知道牛顿迭代法,根本看不懂,比25行还少
@之奇一昂: 后面不是有注释了,我看它有注释,而且是可用的,直接给你了。