![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
计算几何
文章平均质量分 81
时雨晴天
PhD毕业,正在寻找下一个人生目标,愿求文武双全之道。
展开
-
Poj 2177 Ghost Busters(球交点 三维计算几何模板)
题意:给出三维空间第一卦限内若干个个球。从原点引出一条射线,问最多能够穿过多少个球?思路参考:http://hi.baidu.com/lccycc_acm/item/7ab19fd59d39c61d21e250d2从原点看过去,球就是一个个圆。任取两个球,将其放到同一个距离上。显然如果两圆不相交,那么射线只可能是射球心,如果两圆相交,则通过两个圆的交点。设两球心为p1,p2 先算出两个原创 2013-09-26 21:55:22 · 1889 阅读 · 0 评论 -
<模板><计算几何>凸包及其基本算法
[Poj 1113] 计算几何之凸包(一) {卷包裹算法} - Master_Chivu - 博客园http://www.cnblogs.com/Booble/archive/2011/02/28/1967179.html利用计算向量叉积判断点的位置关系时应确保夹角小于180度。演算法筆記 - Convex Hullhttp://acm.nudt.edu.cn/~t原创 2012-12-17 20:51:43 · 1226 阅读 · 0 评论 -
Poj 2187 Beauty Contest(旋转卡壳)
题目链接: http://poj.org/problem?id=2187题意:给定平面上的一些散点集,求最远两点距离的平方值。思路:Graham水平序。极角序判断共线很麻烦,可以参考这里http://blog.csdn.net/lyy289065406/article/details/6648617虽然原题说 No two farms share the same pair of co原创 2012-12-20 11:57:00 · 708 阅读 · 0 评论 -
LightOJ 1203 Guarding Bananas
题目链接:http://lightoj.com/volume_showproblem.php?problem=1203题意:求凸包最小内角。思路:使用__int64 Graham水平序,枚举内角。这个题的主要收获是学会了一种新的求两线夹角的方法,下篇文章会有总结#include #include #include using namespace std;#define mi原创 2012-12-20 22:54:37 · 887 阅读 · 0 评论 -
Poj 1113 Wall (凸包Graham)
题目链接:http://poj.org/problem?id=1113解题报告参见 http://blog.csdn.net/lyy289065406/article/details/6648622第一次写凸包的题,发现还有许多细节没有完全掌握。。。公式:城堡围墙长度最小值 = 城堡顶点坐标构成的散点集的凸包总边长 + 半径为L的圆周长(推导见上述解题报告)极角序原创 2012-12-18 21:52:16 · 821 阅读 · 0 评论 -
<模板><计算几何>求两向量夹角
记录最近用到的两种方法,根据计算精度的要求不同需适当修改。避免两个大__int64值相乘!尽量少使用开方运算可以提高精度。asin函数求出的角是0到90度的,需要根据实际情况还原到原来的大小。#pragma warning(disable:4786)#include #include #include using namespace std;#define max(x原创 2012-12-20 23:09:09 · 3169 阅读 · 0 评论 -
C++中反正切atan2(y,x)与atan(x)
看别人代码的时候看到atan2函数,搜索后发现这篇文章,原文也是转载,并且没注明转自哪里……原文图片挂了,这里补了一下图,并修改了一些小错误。1、atan(x)表示求的是x的反正切,其返回值为[-pi/2,+pi/2]之间的一个数。2、atan2(y,x)求的是y/x的反正切,其返回值为[-pi,+pi]之间的一个数。atan2返回值解释:在三角转载 2012-12-20 22:26:49 · 1647 阅读 · 0 评论 -
Poj 2540 Hotter Colder (半平面求交求可行域)
题目链接:http://poj.org/problem?id=2540题意:在(0,0)到(10,10)区域内有你要找的目标,初始你在(0,0)接着你走到某个点,会告诉你离那个东西是近了还是远了。近了就是Hotter 远了是Colder,不变时Same,问目标可能存在区域的面积。思路:半平面求交,利用前后两点的中垂线靠近目标的那一侧构造可行域,半平面求交后求面积。特殊地,一旦面积为0或者出原创 2012-12-29 22:08:44 · 991 阅读 · 0 评论 -
Poj 1755 Triathlon (半平面交求可行域)
题目链接:http://poj.org/problem?id=1755题意:有n个人参加三个赛段的比赛,三段总长一定,对于第i个人其在每一个赛段的速度分别为Vi,Ui,Wi,你作为一个裁判可以随意调整三个赛段的距离(都大于0),问是否能调整使得指定的选手获胜(不能并列)。思路:设三个赛段的长度分别为a,b,c,则对第i人;用时分别为a/Vi,b/Ui,c/Wi,总时间Ti,获得冠军等价于对原创 2012-12-28 23:50:14 · 812 阅读 · 0 评论 -
Poj 3525 Most Distant Point from the Sea (二分+半平面求交)
题目链接:http://poj.org/problem?id=3525题意:多边形内可以容纳的最大的圆的半径。思路:半平面交+二分,将多边形的每条边向内平移r,二分r,判断是否有位置可以放置圆心。#include #include #include #include using namespace std;const double EPS=1e-8;const int N原创 2012-12-29 19:28:16 · 861 阅读 · 0 评论 -
LightOJ 1190 Sleepwalking
题目链接 http://lightoj.com/volume_showproblem.php?problem=1190题意:给出多边形顶点数n和各顶点坐标,接下来给出q个查询,判断每个查询中的点与多边形的位置关系。思路:对于每个查询逐个判断。效率:时间0s,空间1092.感觉不算太快,望路过的各位指教!#include #include #define max(X,Y) ((X原创 2012-12-16 20:08:08 · 991 阅读 · 0 评论 -
Poj 3348 Cows (凸包面积)
题目链接:http://poj.org/problem?id=3348题意:凸包面积除以50思路:Graham水平序求出凸包后,每相邻两点与原点构成三角形,叉积求有向面积之和#include #include #include #include using namespace std;const int NUM=10005;int n,len;struct Point原创 2012-12-22 00:45:32 · 847 阅读 · 0 评论 -
Poj2954 Triangle (Pick定理)
题目链接:http://poj.org/problem?id=2954继续刷水题恢复手感。#include #include int Gcd (int x,int y){ return !y?x:Gcd(y,x%y);}int main (){ int ax,ay,bx,by,cx,cy; while (scanf("%d%d%d%d%d%d",&ax,&ay,&bx原创 2013-01-07 21:35:20 · 868 阅读 · 0 评论 -
Poj1265 Area (Pick定理)
题目链接:http://poj.org/problem?id=1265计算几何部分Pick定理水题,纯粹是几天没写代码重新找手感。#include #include int inside,on,m;int Gcd (int x,int y){ return !y?x:Gcd(y,x%y);}int main (){ int T; scanf("%d",&T);原创 2013-01-07 21:14:45 · 768 阅读 · 0 评论 -
Codeforces Good Bye 2013 ABCDE
继续总结做过的练习赛。链接:http://codeforces.com/contest/379A New Year Candles题意:初始有a根蜡烛,每根蜡烛照明1小时,每b根蜡烛的残骸可以变成一根新蜡烛,问一共可以照明多久#include int main (){ int sum=0,a,b; scanf("%d%d",&a,&b); sum+=a原创 2014-02-05 16:28:15 · 922 阅读 · 0 评论 -
Hdu 3692 Shade of Hallelujah Mountain (三维空间点的旋转和投影 二维凸包)
题意:在三维空间中,给出点光源,空间中存在一个凸物体,问物体在一个给定的平面内的影子的大小。整体做法基本都自己想出来了,被坐标旋转卡住了。。。以下两篇博文分析地很好,我用了第一篇的方法,第二篇的方法也值得学习。hdu 3692 Shade of Hallelujah Mountain - 小白菜又菜 - 博客频道 - CSDN.NETHDU 3692 Shade of Hall原创 2013-09-27 22:20:27 · 1302 阅读 · 0 评论 -
Hdu 4617 Weapon (三维计算几何 异面直线距离)
2013多校联合集训第二场的一道题。题意:给出一个无限长圆柱截面上的圆心和两点,求是否有圆柱相交,若不相交,则输出圆柱间最小距离。思路:利用圆心和另外两点确定截面法向量,求异面直线距离。测试数据比较弱。详解可参考:http://blog.csdn.net/freezhanacmore/article/details/9671967#include #include #inc原创 2013-09-26 20:19:43 · 978 阅读 · 0 评论 -
Poj 3304 Segments (直线与线段交)
参考了 http://blog.csdn.net/heartnheart/article/details/5924116题意:给出n条线段,判断是否存在有一条直线,满足所有的线段在直线上投影后至少有一个公共点方法:原命题等价为存在一条直线穿过所有的线段(易知过公共点且垂直于所求直线的直线符合条件,设为直线a),该命题又等价于从所有线段中任选两端点形成的直线存在可以穿过所有的线段的直线(原创 2013-09-13 19:21:58 · 915 阅读 · 0 评论 -
Poj 1113 Wall (凸包Graham水平序)
以前做过的题,现在重新写下。以前的解题报告:http://blog.csdn.net/whyorwhnt/article/details/8316442#include #include #include #include using namespace std;const double PI=acos(-1.0);const double eps=1e-8;const原创 2013-09-14 09:55:29 · 1020 阅读 · 0 评论 -
Poj 2635 Pick-up sticks (线段相交)
题意:按顺序给一系列的线段,问最终哪些线段处在顶端。思路:暴力枚举,数据量比较大,从第一根向后枚举,如果相交立刻跳出。我的程序500ms,如果把求交点的部分省略掉应该能更快#include #include #include const int N=100005;struct Point //点,向量{ double x,y; Point(){} Point(do原创 2013-09-13 21:48:38 · 892 阅读 · 0 评论 -
Poj 1269 Intersecting Lines (直线交点)
题意:分别给出两条直线上的两个点,求这两条直线的位置关系,如果相交则输出交点。思路:利用向量。#include #include #include struct Point //点,向量{ double x,y; Point(){} Point(double _x,double _y) {x=_x;y=_y;} Point operator-(const Poin原创 2013-09-13 21:11:18 · 889 阅读 · 0 评论 -
Poj 2398 Toy Storage (叉积+二分)
第一道用codeblocks敲的题,在换行缩进等方面还不是很适应,居然没有变量名整体替换功能。。。。变量名字长些可以用查找+替换,短了基本无解。。。这一题和上一题基本一样,只不过板子没有按照顺序给出,需要排序。最后要求输出包含同样个数的玩具的格子各有多少个#include #include #include using namespace std;const in原创 2013-09-12 23:06:21 · 889 阅读 · 0 评论 -
Poj 2318 TOYS (叉积+二分)
好久没做计算几何了,随便找道题恢复下手感,明显感觉写复杂了。。。。应该是最后一道用vc6.0敲的题了,下一道改用codeblocks题意:给定一个长方形箱子,中间有n条线段,将其分为n+1个区域,给定m个玩具的坐标,统计每个区域中的玩具个数。思路:二分枚举区域,玩具与分割线的位置用叉积判断#include #include const int N=5005;int n,原创 2013-09-12 22:15:04 · 881 阅读 · 0 评论 -
LightOJ 1058 & Poj 1971 Parallelogram Counting
题目链接1 http://lightoj.com/volume_showproblem.php?problem=1058题目链接2 http://poj.org/problem?id=1971题意:给出n个点,求出这n个点能够组成平行四边形的个数。思路:1)平行四边形的对角线的中点一定相交。 如果有两条不同线段的中点相交,就是一个平行四边形 2)利用点坐原创 2012-12-02 22:45:58 · 1432 阅读 · 0 评论 -
Hdu 2876 Ellipse, again and again
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2876练习赛时遇到的题,最后做这道题时快没时间了,列方程求切线法好麻烦,最后直接交a*a*b*b居然过了。网上找了一下证明,如下:代码:#include int main(){ int T; scanf("%d",&T); while (原创 2013-03-19 23:25:20 · 1142 阅读 · 0 评论 -
LightOj 1418 Trees on My Island (Pick定理)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1418数据比较大,要用__int64我又被LightOJ的fabs函数坑了一次。#include #include #include using namespace std;struct Point{ __int64 x,y; void Get () {原创 2013-01-07 22:06:45 · 1161 阅读 · 0 评论 -
<模板><计算几何>点与多边形的位置关系
//参数:点P、多边形顶点(顺时针或逆时针)Pt[](下标从0开始)、多边形顶点数n.//返回:1:外面;// -1:里面;// 0:边上或顶点上const int INF=0x7fffffff;const double STD=1e-10;struct Point{ double x,y;};struct Segment{ Point s,e;};原创 2012-12-16 20:00:53 · 1110 阅读 · 0 评论 -
LightOJ 1137 & Poj 1905 Expanding Rods
题目链接 http://lightoj.com/volume_showproblem.php?problem=1137 http://poj.org/problem?id=1905思路:二分,有两种方法,一种是二分角度,一种是二分h,速度没什么区别。感觉LightOJ的精度要求要比Poj还要高些。个人觉得这份解题报告写得很好,我就不重复了:htt原创 2012-12-15 17:06:06 · 1135 阅读 · 0 评论 -
<模板><计算几何>半平面求交学习小记
主要是依靠这篇博文学习的 http://blog.csdn.net/accry/article/details/6070621我的半平面交代码模板也参考自这里,个人进行了简单优化。刚发现个很水的变换时针方法。如果你需要逆时针,而题目给的顺时针,那么读入的时候改成 for(int i=n-1; i>=0; i--) scanf("%lf%lf",&p[i].x,&p[原创 2012-12-28 00:14:36 · 1023 阅读 · 0 评论 -
LightOJ 1130 Intersection between Circle and Rectangle
题目链接 http://lightoj.com/volume_showproblem.php?problem=1130题意:求所给出的圆与矩形的重叠部分的面积思路:构造出所求图形,求出矩形与圆的交点,将阴影部分分成若干三角形和扇形,分块计算面积。题目对计算精度要求很高这个题因为精度问题纠结了好久……最后参考了一下别人的思路。参考博文 http://blog.csdn.net原创 2012-12-09 13:27:08 · 1244 阅读 · 0 评论 -
LightOJ 1385 Kingdom Division
题目链接 http://lightoj.com/volume_showproblem.php?problem=1385题意:E,F分别为AC,AB上任意一点,BE,CF的交点为X,给出面积a,b,c,求d的值或不能确定思路:连结EF,令三角形EFX的面积为x,三角形AEF的面积为y,则d=x+y。由比例关系可以得出:a/b=x/c, (a+x+y)/(b+c)=y/(x+c)原创 2012-12-09 17:53:02 · 1030 阅读 · 0 评论 -
UVA 5815 & LightOJ 1366 - Pair of Touching Circles
题目链接 http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3826http://lightoj.com/volume_showproblem.php?problem=1366参考文章 http://blog.csdn.net/d原创 2012-12-07 23:37:39 · 1310 阅读 · 0 评论 -
LightOJ 1331 Agent J
题目链接 http://lightoj.com/volume_showproblem.php?problem=1331题意:给出三个两两相切圆的半径,求阴影部分面积思路:海伦公式求已三个圆心为顶点的三角形的面积,减去三个扇形的面积。#include #include double Sector (double a,double b,double c){ double alph原创 2012-12-07 19:27:19 · 871 阅读 · 0 评论 -
LightOJ 1305 Area of a Parallelogram
题目链接 http://lightoj.com/volume_showproblem.php?problem=1305题意:已知平行四边形三点坐标求第四点及面积。注意:“%.0lf'"配合double型是四舍五入的;int型=double型是去尾法保留,需+0.5才是四舍五入。#include #include void Deal (){ int ax,ay,bx,by,cx原创 2012-12-07 18:54:27 · 771 阅读 · 0 评论 -
LightOJ 1211 Intersection of Cubes
题目链接 http://lightoj.com/volume_showproblem.php?problem=1211题意:给出n个六面体对定点的坐标,求重叠部分体积思路:分别取下面那个点3个坐标的最大值,上面那个点3个坐标的最小值,然后判断是否合法。先在二维上模拟比较好理解。#include const int INF=0x7fffffff;int Deal (){原创 2012-12-07 13:18:36 · 1571 阅读 · 0 评论 -
LightOJ 1216 Juice in the Glass
题目链接 http://lightoj.com/volume_showproblem.php?problem=1216题意:求圆台体积思路:圆台体积公式:设上底的半径为r,下底的半径为R,高为h,则V= (1/3)*π*h*(R^2 + Rr +r^2)#include #include #define PI acos(-1.0)double Deal (){ in原创 2012-12-07 13:48:42 · 1067 阅读 · 0 评论 -
LightOJ 1178 Trapezium
题目链接 http://lightoj.com/volume_showproblem.php?problem=1178题意:给定梯形四边边长求面积思路:转化成一个三角形和一个平行四边形的面积和#include #include #define PI acos(-1.0)#define MIN(X,Y) ((X) < (Y) ? (X) : (Y))double Deal ()原创 2012-12-07 12:20:40 · 878 阅读 · 0 评论 -
Poj 2546 Circular Area & LiaghtOJ 1118 Incredible Molecules
题目链接: http://lightoj.com/volume_showproblem.php?problem=1118 http://poj.org/problem?id=2546题意:给出两圆的圆心和半径,求相交部分面积。思路:三种情况:外离或外切,内含或内切,相交(这时有两种情况:一圆心在另一圆的内部和外部,效果一样)。先求出两原创 2012-12-05 20:41:22 · 894 阅读 · 0 评论 -
LightOJ 1107 How Cow
题目链接 http://lightoj.com/volume_showproblem.php?problem=1107水题#include struct{ int x,y;}ld,ru,q;bool Deal (){ scanf("%d%d",&q.x,&q.y); if (q.xld.x && q.yld.y) return true; return false原创 2012-12-05 17:49:50 · 1041 阅读 · 0 评论 -
LightOJ 1072 Calm Down
题目链接 http://lightoj.com/volume_showproblem.php?problem=1072没什么技术含量,搞清楚边角关系即可#include #include #define PI acos(-1.0)int main (){ int T,n; double R,r,alpha; scanf("%d",&T); for (int cas=1;c原创 2012-12-05 17:30:59 · 1536 阅读 · 0 评论