计算几何
文章平均质量分 84
ConwayTian
一切再来,为时未晚。
毁掉你人生的,其实是你内心的平庸,是你失去追求卓越的那个瞬间。
展开
-
POJ 2002 Squares hash/计算几何
题意: 给出一些坐标点,求出能构成的正方形的个数。 题解:此题也可用二分查找。 #include using namespace std; #define prime 9973 struct point { int x, y; } a[1010]; struct n原创 2011-07-30 11:26:52 · 662 阅读 · 0 评论 -
POJ 1696 Space Ant (叉积,三点共线)
题意:有一种蚂蚁只能向左拐,求它路径最多可以经过几个点。并按经过顺序输出点的编号。 题解:可以归纳证明一定存在一条路径,使得蚂蚁可以经过所有的点。那么我们每次只需要找到一个点,使得其余所有点都在它的左方向···直到把所有n个点都找完。 #include #include #include #include #include using std::swap; using std::mem原创 2011-12-10 16:16:19 · 945 阅读 · 0 评论 -
POJ 1113 Wall (凸包)
裸的凸包。所有凸包拐点的角度和是360。刚好等于一个圆周长。2*Pi*r。原创 2011-12-13 17:10:29 · 497 阅读 · 0 评论 -
POJ 1039 Pipe
题意:光线从管子射入,求在管子中能传播的最远的距离。若能穿过管子则输出"Through all the pipe." 题解:刘汝佳书上的一道题。注意看题··。题中的一条光线同时经过几个折点也可以··· #include #include #include #include #define eps 1e-8 #define zero(x) (((x)>0?(x):-(x))<eps)原创 2011-12-12 22:35:31 · 508 阅读 · 0 评论 -
POJ 2954 Triangle (Pick定理)
题意:输入三角形的三个顶点。求三角形内部说包含的点的个数。 #include #include #include #include using std::swap; int gcd ( int x, int y ) { int tmp; if ( x < y ) swap(x,y); while ( y ) { tmp = y; y = x % y; x = tmp;原创 2011-12-22 21:50:07 · 762 阅读 · 0 评论 -
POJ 1265 Area (Pick定理)
题意: 求多边形边上的顶点数,多边形内部的顶点数,多边形的面积。 题解:Pick定理:http://episte.math.ntu.edu.tw/articles/sm/sm_25_10_1/index.html 定理一:Pick 定理,1899年设Γ 为平面上以格子点为顶点之单纯多边形,则其面积为 其中b为边界上的格子点数,i为内部的格子点数。(8)式叫做Pick公原创 2011-12-22 20:55:49 · 940 阅读 · 0 评论 -
POJ 2007 Scrambled Polygon
题意:给定许多点,要求按极角排序,中心点为原点。(这些点最多只会在三个象限出现,并且第1个点一定是原点。) 题解:用来测试下凸包的模板。原创 2011-12-14 14:49:55 · 597 阅读 · 0 评论 -
POJ 1228 Grandpa's Estate
题意:给定一些点,看能否确定唯一的一个凸包。 题解:只有保证凸包上的每条边都至少有三个点时,才能确定其唯一性。否则可以通过在两点构成的边的外围,增加点的来改变凸包。当所有点都在同一条直线上,或者给定的点少于6个时,不能唯一确定凸包。 #include #include #include #include #include using std::memset; using std::min;原创 2011-12-16 12:38:28 · 1085 阅读 · 0 评论 -
POJ 1873 The Fortified Forest
题意:有许多树,每棵树有一个坐标(x,y),一定的高度l,一定的价值v。现在要求砍掉一些树,用它们围成一个篱笆,将所有剩余的树围起来。问怎么砍才能使所花价值最小。 题解:可以枚举组合。当然也可以用位运算枚举。求凸包时注意处理一下少于3点的情况。 #include #include #include #include #include using std::memset; using std::原创 2011-12-15 17:40:37 · 738 阅读 · 0 评论 -
POJ 3737 UmBasketella(三分)
题意:给出圆锥的表面积(包含底面)。求其最大体积,以及此时的底面半径及高 #include #include using namespace std; #define eps 0.00000005 #define PI acos(-1.0) // PI用反三角函数比较准确 int main() { double s; while ( scanf("%lf",&s原创 2011-11-05 20:00:14 · 1230 阅读 · 0 评论 -
POJ 3347 Kadj Squares (几何+线段树)
题意: 按图中所示的方式摆放正方形。输出那些正方形从上往下看得到的正方形。 题解:1:由于所有线段都成45/135度角的关系,将所有数据大sqrt(2)倍,便可以当做整数来处理。2:用线段树处理覆盖的时候,由于只能处理整点,下面的情况需要注意 即第3只有最左边的一点可以看到。但是第2却把该点标为2,这样一来得到的结果就是3看不到。为避免这种情况发生,可以将每一个正方形的左右两点都乘以2,原创 2011-12-11 19:46:05 · 776 阅读 · 0 评论 -
POJ 2826 An Easy Problem?! (线段相交)
题意:两块木板可以承装的雨水的最大面积,注意雨水是垂直下落的。 题解:多种情况需要考虑清楚。 #include #include #define eps 1e-8 #define zero(x) (((x)>0?(x):-(x))<eps) struct Point{double x,y;}; struct Line{Point a,b;}; //计算cross product (P原创 2011-12-11 22:17:43 · 645 阅读 · 0 评论 -
POJ 2318 TOYS / POJ 2398 (二分,叉集)
题意:统计每个格子里面的玩具有多少。2318给出分隔板的时候是从左到右,2398的分隔板并没有排序,得自己排一下。两题就是输出有点不同,其他没什么··· POJ 2318: #include using namespace std; #define MAX 5999 struct CardBoard { int x1, y1, x2, y2; double k;原创 2011-11-06 08:23:02 · 727 阅读 · 0 评论 -
POJ 1269 Intersecting Lines (两直线之间的位置关系)
题意:判断两直线之间的位置关系,平行,重合,相交 题解:注意精度 #include #include using namespace std; #define MAX 100 #define eps 1e-8 #define zero(x) ( ((x) > 0 ? (x) : -(x)) < eps ) struct Point { double x, y; };原创 2011-11-06 16:45:27 · 471 阅读 · 0 评论 -
POJ 1556 The Doors (线段相交+Dijkstra)
题意:找从起点到终点的最短路径。 题解:可以知道,但凡两点不能直达,则一定是沿着墙边界点走的,这样才能保证路径最短。那么只需要再所有可以直达的点间连上一条边,求一次最短路径。注意判断两线段是否相交应该是判断“严格相交”,即不包含端点。 #include #include /* #include //不知道为什么加上这两句就报一些奇怪的错误···· using namespa原创 2011-11-06 19:56:55 · 822 阅读 · 0 评论 -
POJ 3304 Segments (直线与线段相交)
题意:给出许多线段,问能否找到一条直线,使得所有线段在它上面的投影存在交点。 题解:转自http://blog.sina.com.cn/s/blog_6635898a0100n2lv.html 1:把问题转化为是否存在一条直线与每条线段都有交点。证明:若存在一条直线l和所有线段相交,作一条直线m和l垂直,则m就是题中要求的直线,所有线段投影的一个公共点即为垂足。 2:枚举两两线段的各一个端点原创 2011-11-06 15:56:32 · 595 阅读 · 0 评论 -
POJ 2635 Pick-up sticks (线段相交)
题意:有些人没事儿喜欢往地上任棍子,后面扔的可能盖住前面扔的,显然最后扔的那根棍子一定没被压住,求所有没有被其它棍子压住的棍子。 题解:规范相交。用链表优化下。当然也可以用队列存储下标。 #include #include using namespace std; #define eps 1e-8 #define max(x,y) ((x)>(y)?(x):(y)) #define min(原创 2011-12-03 22:32:38 · 554 阅读 · 0 评论 -
POJ 1228 Grandpa's Estate
题意:求凸包的面积。 题解:可以边求凸包边计算面积。原创 2011-12-17 15:26:25 · 434 阅读 · 0 评论 -
POJ 1654 Area (多边形面积)
题意:起点是左边原点,然后可以向八个方向移动,每次移动一格(或者对角线),保证最终回到原点。求移动一圈所围成的多边形的面积。 题解:实则是要我们求一个多边形的面积,原点在该多边形上。 #include #include #include #define eps 1e-8 #define zero(x) (((x)>0?(x):-(x))<eps) struct Point { dou原创 2011-12-17 17:10:58 · 665 阅读 · 0 评论 -
POJ 1066 Treasure Hunt (线段相交)
题意: 从正方形外围任意一点出发,到达指定点最少通过几次线段?(每次只能从线段中点经过) 题解:思路一:枚举外围起点,连接该点与指定点,相交次数最少的即为答案。思路二:先求出所有线段的中点。以指定点位起点bfs,走到正方形外面的最小步数即是结果。搜索过程中,相邻点(u,v)满足条件:u,v的连线不与其他任何一条线段规范相交。 #include #include #include usin原创 2011-12-08 23:20:44 · 666 阅读 · 0 评论 -
POJ 1419 Intersection (判线段与矩形相交)
题意:判断线段是否与矩形相交(非规范相交)。需要注意的是,当线段在矩形内部时也算作相交。 #include #include #include #include using std::swap; #define eps 1e-8 #define zero(x) (((x)>0?(x):-(x))<eps) struct Point{double x,y;}; struct Line{P原创 2011-12-09 13:25:33 · 666 阅读 · 0 评论 -
POJ 3301 Texas Trip (三分求极限)
题意:给出许多点的坐标,用最小的正方形覆盖之。 题解:三分。注意精度····。公式神马的画个图推一下即解决 double mid1 = (left + right)/2; double mid2 = (mid1 + right)/2; 相比 double mid1 =left +(right - left)/3; double mid2 =原创 2011-11-05 18:15:00 · 1384 阅读 · 0 评论