
计算几何
文章平均质量分 65
Akahieveman
这个作者很懒,什么都没留下…
展开
-
UVa 11168 Airport
这个月看看计算几何,这道题写的代码出现的问题还是挺多的,不过索性最后解决了。题意:给出平面上n个点,找一条直线,使得所有点在直线的同侧(也可以在直线上),且到直线上的距离之和尽量小。思路:计算几何凸包求出包含所有点的多边形,那么所求直线即多边形其中一条边,这里涉及一个优化除该边之外所有点到边的距离,因为所有点在直线一侧,求出所有点的x坐标之和还有y坐标之和,用一般式解决,算法时间O(1),原创 2016-09-02 11:28:43 · 629 阅读 · 0 评论 -
关于计算几何某些定理·基础知识的汇总
欧拉定理:设平面图的顶点数,边数和面数分别为V,E和F,则V+F-E=2。直线方程两点式转换为一般式: 1.两点式:(y-y2)/(y1-y2)=(x-x2)/(x1-x2); 2.一般式:A*x+B*y+C=0; A=y2-y1; B=x1-x2; C=y1*x2-y2*x1;对踵点对:在凸包上的两个点将凸包完全夹在中间的点。原创 2016-09-02 14:55:50 · 507 阅读 · 0 评论 -
寻找最近点对
显然,寻找最近点对最原始的算法是计算所有的点对的距离来找出最近点对。这种算法依赖n的值,n的值越大运行时间越长。为了提高时效,可应用分治算法解决。算法每次递归调用的输入为点的自集P和数组Y。P中的所有点按其Y坐标单调递增的顺序排列,其编号序列存入数组Y。X坐标同样排列存入。1.划分找出一条垂直平分线,将点集P划分为点数为P/2或者[P/2]和[P/2]+1的两个点集P1和P2。数组Y被原创 2016-08-11 23:03:49 · 1818 阅读 · 0 评论 -
计算几何凸包的算法 Andrew和Melkman算法
先介绍下二者的时间复杂度:Andrew算法是葛立恒扫描法的变种,但是更快,时间O(nlogn)。Melkman算法是采用双端队列,时间O(n)。第一种是经典算法,第二种则是在解决时间要求高的问题上的一个也是目前我所知道最快的。Andrew代码如下:int Andrew(Point *p,int n,Point *q){ sort(p,p+n); int m=0;原创 2016-09-02 23:04:16 · 5011 阅读 · 0 评论 -
计算几何模板
初始定义:(基本都要用到,做题直接全打上)struct Point{ double x,y; Point(double x=0,double y=0):x(x),y(y){} //构造函数,以后直接用Point(x,y)就表示点};struct Polygon{ double x,y;};typedef Point Vector;Vector operator + (原创 2016-09-02 14:43:49 · 631 阅读 · 0 评论