|
发表于 2020-7-11 09:57:20
|
显示全部楼层
本帖最后由 jasonzhu8888 于 2020-7-11 10:04 编辑
- struct Point
- {
- float x;
- float y;
- };
- bool circle_contains(Point* p_center, float radius, float x, float y)
- {
- float xx = p_center->x - x;
- float yy = p_center->y - y;
- return xx*xx + yy*yy <= radius*radius;
- }
- bool polygon_contains(Point* pypts,int num,float x, float y)
- {
- int hits = 0;
- int n = num - 1;
- Point* plastpt = &pypts[n];
- float lastx = plastpt->x;
- float lasty = plastpt->y;
- float curx, cury;
- for (int i = 0; i < n; lastx = curx, lasty = cury, i++)
- {
- Point* p = &pypts[i];
- curx = p->x;
- cury = p->y;
- if (cury == lasty)
- {
- continue;
- }
- float leftx;
- if (curx < lastx)
- {
- if (x >= lastx)
- {
- continue;
- }
- leftx = curx;
- }
- else
- {
- if (x >= curx)
- {
- continue;
- }
- leftx = lastx;
- }
- float test1, test2;
- if (cury < lasty)
- {
- if (y < cury || y >= lasty)
- {
- continue;
- }
- if (x < leftx)
- {
- hits++;
- continue;
- }
- test1 = x - curx;
- test2 = y - cury;
- }
- else
- {
- if (y < lasty || y >= cury)
- {
- continue;
- }
- if (x < leftx)
- {
- hits++;
- continue;
- }
- test1 = x - lastx;
- test2 = y - lasty;
- }
- if (test1 < (test2 / (lasty - cury) * (lastx - curx)))
- {
- hits++;
- }
- }
- return ((hits & 1) != 0);
- }
复制代码 |
|