计算几何
文章平均质量分 69
巧奇
我不低调,所以这里有介绍
展开
-
HDU 2826 || The troubles of lmy(判断两个N边形是否相似
题目给出两个N边形的逆时针的N个顶点,求问两个N边形是否相似。用这个定理就ok啦-> #include #include #include#include #includeusing namespace std;const double eps = 1e-8;int dcmp(double x){ if( fabs(x)<eps) return 0;原创 2015-04-16 21:44:12 · 1000 阅读 · 0 评论 -
POJ 3335||Rotating Scoreboard(半平面交求核
新抄一个模板,再学习。#include #include #include #include #define eps 1e-8using namespace std;const int maxn = 55;int dq[maxn], lst, fir, pn, order[maxn], ln;struct Point{ double x, y; Point(原创 2015-05-09 20:30:06 · 724 阅读 · 0 评论 -
计算几何模板之二维点线面模板
#include#includeusing namespace std;//================= 精度误差 ==============const double eps = 1e-8;int dcmp( double x ){ if( fabs(x)<eps) return 0; return x < 0 ? -1: 1;}//===原创 2015-03-30 21:21:08 · 944 阅读 · 0 评论 -
UVA 10674 || Tangents(求两圆的共切线
大白模板题,但是大白模板放这题会有精度误差,死Wa,看了个题解,也是从大白模板改的,全部都用了浮点误差,偷偷敲走。两圆的共切线,根据两圆的圆心距从小到大排列,一共有六种情况。1) 两圆完全重合,有无数条公切线,返回-1;2)两圆内含,没有公共点,无公切线,返回0;3)两圆内切,有一条外公切线;4)两圆相交,有两条外公切线;5)两圆外切,有两条外公切线,一条内公切线;原创 2015-04-14 00:05:16 · 1336 阅读 · 0 评论 -
2013 山东省赛 || Rescue The Princess
逆时针给你等边三角形的两个顶点啊A,B,求第三个顶点的坐标。思路: 将B点绕A点逆时针旋转60°就OK了~就是我们要找的C点的坐标。 这里注意要将60°转为为弧度,为 P1/3 弧度。 大水题呵呵~希望我比赛的时候也能一A就过过过~0MS AC :#include#include#includeusing namespace std;const dou原创 2015-04-07 21:09:50 · 494 阅读 · 0 评论 -
POJ 2826 || an easy problem ?!(未AC,呵呵~
今日未AC,来日再战,头脑混沌。#include#include#includeusing namespace std;const double eps = 1e-8;int dcmp( double x ){ if( fabs(x)<eps) return 0; return x < 0 ? -1: 1;}//================原创 2015-04-06 20:49:59 · 603 阅读 · 0 评论 -
UVA 11096 || Nails (计算凸包周长
发现写计算几何写久了真的非常烦躁,明明就是小错误一直找很久。先算出凸包,就裸题了,然后求一下周长就好了。#include#include#include#includeusing namespace std;#define FOR(i,m,n) for( int i=m; i<n; ++i)struct node{ double x,y,d; node原创 2015-01-25 13:12:57 · 981 阅读 · 0 评论 -
POJ 3347 || Kadj Squares (cos(45°)扩大sqrt(2)
给你一些四十五度角放在二维坐标系中的正方形的边长,求从上面可以看见序号为几的正方形;这题一开始我的想法是向量旋转,过程很猥琐复杂 = = 看了kuangbin的题解,啊~~如此简单粗暴学起来学起来。cos(45) = sqrt(2)/ 2 那么默认每个数都扩大sqrt(2)倍,输入数据的时候做一下处理,算出每个正方形的最左边和最后变点的X值处理完后再扫描一次,看当前正方形有没有被其他的原创 2015-04-06 00:00:43 · 770 阅读 · 0 评论 -
POJ 1696 || Space Ant (叉积,凸包变形题
有一只蚂蚁,只能左转,给你一些点集,这只蚂蚁只能到达点的时候左转,不用在乎多远,反正它都会走到~~问,如何让这只蚂蚁做够最多的点,这些点链接起来的路线不能交叉,且蚂蚁开始的第一个点是(0,miny) miny 是点集中y值最小。题目里面的三个条件,看完第一想法是想到graham的凸包算法,算出凸包,再在剩下的点中算出凸包,链接他们,依次。后面想想不用这么麻烦,核心就是用叉积原创 2015-04-05 17:46:02 · 574 阅读 · 0 评论 -
POJ 1410 || Intersection(线段矩形相交
判断线段与矩形相交有两种相交方式:1)线段与矩形的四条边的其中一条至少有一个交点(X积判断2)线段再矩形内(用坐标大小判断十分钟一A一计算几何水题,感觉自己越来越棒了。513KB,0MS#include#include#includeusing namespace std;const double eps = 1e-8;int dcmp( double x ){原创 2015-04-01 16:09:02 · 616 阅读 · 0 评论 -
POJ 2398 || Toy Storage (2318排序升级版
题目同2318,只不过给的线段是无序的,输出的答案也不一样。要求输出的是如果一个区域有T个玩具,那么输出有多少个区域有T个玩具输出格式T: N按T的升序输出。水题,妥妥的。#include#include#includeusing namespace std;const int M =1000+5;int n,m,x1,y1,x2,y2,a,b;struct p原创 2015-03-24 20:16:51 · 452 阅读 · 0 评论 -
POJ 2318 || TOYS (叉积判断左右位置进行折半查找
给你一个矩形的左上角和右下角的坐标,以及从左到右把矩形划分为若干个空间的线段。这些线段都给出X的坐标,所以线段的两端坐标为,(Ui,Y1) ( Li,Y2).在给出M个点的坐标,求每个空间内有多少个点。利用叉积判断这个点在线段的左边还是右边→_→就是酱紫简单粗暴。注意一下 都是从零开始标号那么 线段有 0 到 n-1 而空间是 0 到 n#include#incl原创 2015-03-23 23:42:22 · 607 阅读 · 0 评论 -
2014 辽宁 ACM 省赛 ( kuangbin oj 1020)|| Distance(两点式直线公式或直线求交点
少了一个等于号wa了数十发一直没有检查出来,我的内心几乎是崩溃的。1020: Distance时间限制: 1 Sec 内存限制: 32 MB提交: 88 解决: 19[提交][状态][讨论版]题目描述There is a battle field. It is a square with the side length 100 miles, and unfo原创 2015-03-29 13:21:23 · 1234 阅读 · 0 评论 -
POJ 1474 || Video Surveillance(半平面交
拿上一题代码改一下直接就过了,躶题233 我连题目都没看 看着题目的配图感觉都是那个意思,随便一交就AC了。66666.。。。#include #include #include #include #define eps 1e-8using namespace std;const int maxn = 200;int dq[maxn], lst, fir, pn, order[原创 2015-05-09 20:45:53 · 641 阅读 · 0 评论 -
POJ 2007 || Scrambled Polygon(逆时针输出凸包顶点,以原点为起始点
给你坐标的点只有三个象限,并且第一个点就是原点,为起始点,让你把这些凸包的点排序,逆时针输出,就是用叉积排序就好了,一个sort搞定。一开始没看懂题目。。看别人题解的翻译才懂的。。读题真的伤的,明明很水的题目。#include #include #include using namespace std;struct pnode{ int x,y; p原创 2015-04-28 16:30:44 · 772 阅读 · 0 评论 -
POJ 1279 || Art Gallery(半平面交求核面积
注意下一输入的点是逆时针或者顺时针,用面积判定一下是正负就可以啦,统一调整一下然后算出半平面交核的点集,求面积一下就OK了~#include#include#include#includeusing namespace std;const double eps = 1e-8;struct Point{ double x,y; Point(double xx=0.原创 2015-05-12 20:00:20 · 899 阅读 · 0 评论 -
HDU 1700 || Points on Cycle (向量旋转,圆上等边三角形的周长最长
题目大意:以原点为中心的一个圆,给你圆上的一点,让你求出另外圆上的两点,让着三点连线组成的三角形的周长最长。 要周长最长,那么就把问题转化为,给你一点在圆上画等边三角形。 输入点P,那么点P逆时针旋转120°,顺时针旋转120°就是要求的亮点。注意:这题没有特判,我一开始用p点旋转成P1点在用P1点选择成P2点,死WA,换了一下就A了。#原创 2015-05-17 22:25:44 · 982 阅读 · 0 评论 -
POJ 3384 || Feng Shui (半平面交内推R
题目大意:给你一个凸包,里面放两个半径相同的圆,问你如果让这两个圆覆盖凸包的面积最大。两个圆可以覆盖重合,但不是不会跑到墙角折起来。输出放置圆的两个圆的圆心坐标。如果有多种可能,输出任意一种。思路:半平面交内推R,求目前这个核最远的两点,因为半径固定,两个圆的圆心离的越开,你们覆盖的凸包的面积也就越大。 1.半平面交内推R 2.暴力扫描一边核(就是一原创 2015-05-17 17:26:06 · 788 阅读 · 0 评论 -
计算几何 || 半平面交 (模板收集)
#include#include#include#includeusing namespace std;const double eps = 1e-8;struct Point{ double x,y; Point(double xx=0.0,double yy=0.0):x(xx),y(yy){} Point operator - (const Point &原创 2015-05-07 20:50:01 · 876 阅读 · 0 评论 -
计算几何 || 半平面交
首先解决问题:什么是半平面? 顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分为两个部分,那么这两个部分就叫做两个半平面。然后,半平面怎么表示呢? 二维坐标系下,直线可以表示为ax + by + c = 0,那么两个半平面则可以表示为ax + by + c >= 0 和ax + by + c 还有,半平面的交是神马玩意? 其实就是一个方程组,让你画出满足若干个式子的转载 2015-05-07 19:33:45 · 1127 阅读 · 1 评论 -
POJ 2954 || Triangle ( pick定理
给你三角形三个顶点的坐标,让你求三角形内部的点数pick定理 三角形的面积 = 三条边上的点数/2 + 内部的点数 - 1一个pick定理模板,边上的点用GCD算。三角形面积叉积的一半。#include#include#include#includeusing namespace std;struct pnode{ int x,y; pnode(i原创 2015-05-07 09:34:38 · 587 阅读 · 0 评论 -
POJ 1654 || Area(求多边形面积
7 8 94 5 61 2 3如上键位,从原点开始,按数字几就是往哪个方向走,5停止求从原点开始,走过这些的路径围成的多边形的面积,用叉积来算就好了,以原点为起点,很easy不过爆int了没弄清楚范围,wa了几发!!!!!还有就是哪个输出,一定要弄成这样,我试了别的都wa。。。#include #include #include #include #includ原创 2015-05-05 20:07:03 · 722 阅读 · 0 评论 -
POJ 3348 || Cows(求凸包面积
五十平方米能样一头牛,问能养多少头牛,一个验证模板的题目,拿上一题的代码改一改就过了~新的andrew~#include #include #include using namespace std;struct pnode{ int x,y; pnode(int xx=0,int yy=0):x(xx),y(yy){} bool operator < (co原创 2015-05-05 19:15:17 · 596 阅读 · 0 评论 -
POJ 1228 || Grandpa's Estate(凸包andrew算法
题目大意:原来有一个凸包,可是凸包的顶点不全告诉你,给你一些凸包的点,问用这些点能不能确定唯一的凸包。 原谅我渣.. T T 看了好久不懂题目什么鬼。。默默的搜了一下题解。说的是,如果给的点扫一边构成当前的凸包,在扫描一边,看当前的凸包的每条边是否至少有三个点(包括这条边的端点),因为没有三个点的话,就不能确定一个凸包,也行原来的凸包可以在这两个端点之外再加一点生出一条边~原创 2015-05-05 17:46:02 · 1003 阅读 · 0 评论 -
计算几何 || 圆 二维模板
#include#include#include#include#include#define FIR first#define SEC secondusing namespace std;const double eps = 1e-8;const double PI = acos(-1.0);int dcmp(double x){ if(fabs(x)<eps)原创 2015-04-14 20:06:43 · 746 阅读 · 0 评论 -
POJ 2546 || Circular Area(两圆面积交
求两个圆的相交面积,扔一个模板。#include #include #include #include using namespace std;const double eps = 1e-8;const double pi = acos(-1.0);struct point { double x, y; point( double xx=0,double yy=原创 2015-05-04 16:16:01 · 778 阅读 · 0 评论 -
POJ 3525 || Most Distant Point from the Sea (凸包求最大内接圆,半平面交内推r
题目在问这样一个问题:给定一个凸多边形,找到其中的一个点,使得其到每条边的距离最小值最大,输出这个距离。其实就是在问你,这个多边形中最大的一个内切圆有多大。怎么做呢?如果我们事先知道一个半径R,我们是不是能验证这个R是否可行呢?答案是肯定的,这样想:如果我们把这个多边形每条边都向内推进R,之后如果这个多边形还存在的话,就说明这个半径为R的圆肯定塞得下,因为还可以往里缩嘛。直转载 2015-05-12 21:08:48 · 1131 阅读 · 0 评论 -
POJ 3130 || How I Mathematician Wonder What You Are!
The mathematical definition of a star shape is as follows: A planar shape F is star-shaped if and only if there is a point C ∈ F such that, for any point P ∈F, the line segment CP is contained in原创 2015-05-12 20:41:33 · 728 阅读 · 0 评论 -
POJ 2653 || Pick-up sticks (线段相交
在二维平面随机扔木棍,找出最顶上的没有被别的木棍压着的木棍,输出这些木棍的序号。核心算法就是线段相交:函数最后两句是判断这两条直线的相交,因为是线段,所以要加上线段端点的约束。bool inter(pline l1,pline l2){ return max(l1.st.x,l1.ed.x) >= min(l2.st.x,l2.ed.x) &&原创 2015-03-27 23:12:49 · 635 阅读 · 0 评论 -
POJ 1269 || Intersecting Lines(直线重合,平行,相交判定
poj 不能用%lf输出,被坑了五六七八WA,从70多行的代码改到一百多行,发现卧槽原来是这个wa点,无法吐槽自己。没用模板,自己从头文件开始狂敲。等下去学一个模板好像非常简单粗暴。两条直线的X乘等于0说明重合或者平行,再其中一条直线的点是否再另外一条直线上判断是否是重合就可以区分了。两条直线的交点用向量偏移一下就好了。PS:没有考虑线段退化成一点的情况。原创 2015-03-26 20:10:13 · 845 阅读 · 5 评论 -
POJ 3304 || Segments (线段,直线相交
题目写太久现在都快忘记题意是什么了。赤果果的WA了五六七发,后来改的快和kuangbin的题解一样了。思路是一样的,但是自己的代码就是过不了!!注意的点。一开始将符号的重载是放在结构体外的,之后符号重载移到结构体内部就AC了。这是至今还搞不明白的WA点。望指点。题目大概意思。给你若干条线段,问你能不能画出一条直线,让所有的线段投影在这条直线上至少有一个点是重合的。原创 2015-03-25 23:01:18 · 709 阅读 · 0 评论 -
UVA 634 || Polygon(转角法,点在凸包内
题目大意:T when P belongs to the polygon or F otherwise 如果点P属于多边形那么输出T,反之输出F。刚刚入门计算几何。都是自己摸索出来的,如果理解有偏差,望指点。转角法。我们把多边形每条边的转角加起来,如果是2pi,那么点在多边形内。如果是Ipi,那么点在多边形的边界上。如果是0,那么点在多边形外部。原创 2015-01-24 18:43:27 · 1678 阅读 · 0 评论 -
UVA 10991 || Region(海伦公式,余弦定理,扇形面积
将三个圆的圆心连接起来 ,就可以发现要求的面积是大三角形减去三个小扇形。需用到两个公式: 海伦公式 + 余弦定理海伦公式:已知三边 a , b , c 求三角形面积,海伦公式为:S=√[p(p-a)(p-b)(p-c)] 公式里的p为半周长:p=(a+b+c)/2余弦定理:cos A=(b2+c2-a2)/2bc#include#include#incl原创 2015-01-26 23:29:35 · 1341 阅读 · 0 评论 -
URAL 1084 || Goat in the Garden(同中心矩形与圆的公共面积
求矩形与圆的公共面积。矩形与圆同中心。用了余弦定理,会错不懂为什么。感觉范围没超啊。。。改成反正弦就好了。#include#include#includeusing namespace std;const double PI = acos(-1.0);bool dd(double a,double b){ return fabs(a-b)<1e-6;}int mai原创 2015-02-03 17:30:12 · 699 阅读 · 0 评论 -
UVA 10078 || The Art Gallery (凸包:当前边与前一条边向×积符号一致
#include #include #include #include using namespace std;/* 判断给的图形是不是凸包,是凸包输出no,不是凸包输出yes。 本意是说让画廊没有视线死角。 根据凸包性质一:任意两两相连的线段都会在凸包内。 只要有一条线段不符合条件,就不是凸包。 凸包性质二:当前边与前一条边向×积符号一致!*/const int原创 2015-01-26 11:29:47 · 775 阅读 · 0 评论 -
UVA 109 || SCUD Busters(凸包面积计算
= = 模板水题。看数据就可以做了。输出被炸弹轰炸之后,所有王国停电的总面积,保留小数点后两位。题目中说到每个王国的边界是围城这些点的最小周长,所以可以推出,每个王国都是一个凸包圈住的点集;第一步计算出凸包,在算出面积就好了。(已经停电的面积不可以重复累加。#include#include#include#includeusing namespace原创 2015-01-29 15:08:15 · 856 阅读 · 0 评论 -
UVA 10242 || Fourth Point !!(求平行四边形第四点
给第一条边的两个端点,第二条边的两个端点,求平行四边形的第四个点。给了 四个点,不一定按照 起点终点的顺序,调整一下就好了。。 A B B C 的顺序#include#include#include#includeusing namespace std;struct point{ double x,y;};point p[10];bool opera原创 2015-02-01 21:27:18 · 1454 阅读 · 0 评论 -
ZOJ 1860 || Dog & Gopher(空行区分case
都是莫名其妙的几何水题。要刷到什么时候我才能刷到高难度。比较一下逃脱点到田鼠和狗的距离就好了。注意一下是以空行来区分每个case。#include#include#include#include#include#includeusing namespace std;struct point{double x,y;int id;};point hole,ans,dog,g原创 2015-02-03 22:52:39 · 934 阅读 · 0 评论 -
ZOJ 2157 || Building a New Depot(纵向排序 横向排序
给你这些标杆的点,点与点之间的连线只有南北,和东西方向。只有在拐点上的点。计算这些点围城的多边形的周长。将这些点二次排序。第一次纵向排序,算出 x 的差值累加就为,所有东西方向线段的长度。第二次横向排序,算出 y 的差值累加就为,所有南北方向线段的长度。#include #include #include #include using namespace std原创 2015-02-04 12:17:05 · 803 阅读 · 1 评论 -
UVA 191 || Intersection (判断线段是否与矩形相交
写这实在太烦了。。贴模板。。所以感觉不算原创 = =1)。线段包含与矩形内也算相交。先判断是否在矩形内然后照着这个博客走就行了。理论: http://dev.gameres.com/Program/Abstract/Geometry.htm#判断两线段是否相交代码:http://blog.csdn.net/mobius_strip/article/details/837翻译 2015-01-28 17:53:18 · 863 阅读 · 0 评论