计算几何--O(logN) 判断点在凸多边形内
来源:互联网 发布:公务员上岸经验知乎 编辑:程序博客网 时间:2024/05/16 06:42
二维平面内判断点是否在一个简单多边形内部,在程序设计中我们一般采用射线法,或者内角和法。
如果这个简单多边形是一个凸多边形,可以在logN的时间复杂度内判断点是否在N个顶点的凸多边形中。
如图 判断点P是否在凸多边形内 设凸多边形顶点保存在convex[0..n-1]中
首先必须满足 向量convex[0]-P X convex[0]-convex[1]<0 convex[0]-P X convex[0]-convex[6]>0
X代表叉乘 如果允许点在多边形边上 <0 >0可以改写为<=0 >=0
这样确定点在角106范围内后 二分枚举2--6每个点x 利用叉乘可以判断向量convex[0]-P在convex[0]-convex[x]逆时针还是顺时针 如果是在逆时针 继续向x--6寻找顶点 否则在2--x-1寻找顶点 直到寻找到最接近P且在P顺时针方向的边convex[0]--convex[x]
此时可以确定点在角x-1 o x范围内
然后向量convex[x-1]-P X convex[x-1]-convex[x] 判断P是否在线段x-1--x的左侧 在左侧点在多边形内 否则不在
因为任意凸多边形都可以按照其中一个顶点三角剖分 所以有了logN的二分高效算法
/**************************************
Author : lxglbk
Date : 2012/08/17
Function : To determine whether a point is inside of a convex polygon in 2D plane
O(logN)
*********/
double
cross(cpoint p0, cpoint p1, cpoint p2)
{
return
(p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);
}
bool
Compl_inside_convex(
const
cpoint & p,cpoint *con,
int
n)
{
if
(n<3)
return
false
;
if
(cross(con[0],p,con[1])>-eps)
return
false
;
if
(cross(con[0],p,con[n-1])<eps)
return
false
;
int
i=2,j=n-1;
int
line=-1;
while
(i<=j)
{
int
mid=(i+j)>>1;
if
(cross(con[0],p,con[mid])>-eps)
{
line=mid;
j=mid-1;
}
else
i=mid+1;
}
return
cross(con[line-1],p,con[line])<-eps;
}
0 0
- 计算几何--O(logN) 判断点在凸多边形内
- Finding Mine判断点在凸多边形内
- 计算几何 点到线段的距离 点在简单多边形内 点到凸多边形的距离
- 计算几何----判断点是否在一个矩形内
- sgu Theodore Roosevelt【判断点是否在凸多边形内模板】
- cocos2dx 判断点是否在任意凸多边形内(算法)
- 判断一个点在不在凸多边形内(转)
- 判断点在凸多边形内(基于经纬度坐标)
- POJ 1264 判断点是否在凸多边形内
- 判断是否是凸多边形,判断点是否在多边形内,点到直线的距离
- SGU 124. Broken line 计算几何 判断点是否在多边形内
- A Circle and a Square----计算几何,判断点是否在图形内
- hdu2948 简单计算几何 判断点在三角形 矩形 圆形内
- Naive and Silly Muggles(计算几何 判断点是否在三点形成的最小圆内)
- hrbustoj 1291 点在凸多边形内
- 【计算几何】凸多边形
- ★【计算几何】凸多边形
- 【CQOI2006】凸多边形 计算几何
- bzoj2631: tree
- 适配器
- 几何题,二分法 fz1148
- bzoj4517: [Sdoi2016]排列计数
- 垃圾收集器与内存分配策略
- 计算几何--O(logN) 判断点在凸多边形内
- 红黑树的实现
- bzoj4518: [Sdoi2016]征途
- Spring注解详解
- EM算法--python代码和注意事项
- 2594: [Wc2006]水管局长数据加强版
- Java千百问_06数据结构(001)_java中数据类型是什么
- 258. Add Digits
- android网络通信之WIFI教程实例汇总