
判断点是否位于任意多边形内 - 使用Python OpenCV的minAreaRect方法生成最小外接矩形
5星
- 浏览量: 0
- 大小:None
- 文件类型:PDF
简介:
本段介绍如何利用Python与OpenCV库中的minAreaRect函数为任意多边形求解最小外接矩形,并探讨判断点是否在该矩形内的算法。
计算多边形面积
给定一个点集p[](编号从0到n-1),可以通过以下函数来计算其构成的多边形面积:
```cpp
double CalcArea(Point p[], int n)
{
double res = 0;
for(int i = 0; i < n; ++i)
res += (p[i] ^ p[(i + 1) % n]) * 2;
return fabs(res);
}
```
判断点在线段上
给定一个线段L和一个点P,可以通过以下函数来判断该点是否位于线段上:
```cpp
bool OnSeg(Point P, Line L)
{
return
sgn((L.s - P) ^ (L.e - P)) == 0 &&
sgn((P.x - L.s.x) * (P.x - L.e.x)) <= 0 &&
sgn((P.y - L.s.y) * (P.y - L.e.y)) <= 0;
}
```
判断点在凸多边形内
给定一个逆时针排序的凸包(由点p[]表示,编号从0到n-1)和一点a,可以通过以下函数来判断该点是否位于凸多边形内部:
```cpp
int inConvexPoly(Point a, Point p[], int n)
{
for(int i = 0; i < n; ++i)
{
if(sgn((p[i] - a) ^ (p[(i + 1) % n] - a)) < 0) return -1;
else if(OnSeg(a, Line(p[i], p[(i + 1) % n]))) return 0;
}
return 1;
}
```
判断点在任意多边形内
给定一个由n个顶点(至少3个)组成的多边形poly[]和一点p,可以通过以下函数来判断该点是否位于任意多边形内部:
```cpp
int inPoly(Point p, Point poly[], int n)
{
// 函数实现待补充。
}
```
射线法用于确定一个给定点相对于一个多边形的位置。
全部评论 (0)


