计算几何
文章平均质量分 84
ConwayTian
一切再来,为时未晚。
毁掉你人生的,其实是你内心的平庸,是你失去追求卓越的那个瞬间。
展开
-
POJ 2002 Squares hash/计算几何
题意: 给出一些坐标点,求出能构成的正方形的个数。题解:此题也可用二分查找。#include using namespace std;#define prime 9973struct point{ int x, y;} a[1010];struct n原创 2011-07-30 11:26:52 · 665 阅读 · 0 评论 -
POJ 1696 Space Ant (叉积,三点共线)
题意:有一种蚂蚁只能向左拐,求它路径最多可以经过几个点。并按经过顺序输出点的编号。题解:可以归纳证明一定存在一条路径,使得蚂蚁可以经过所有的点。那么我们每次只需要找到一个点,使得其余所有点都在它的左方向···直到把所有n个点都找完。#include#include#include#include#includeusing std::swap;using std::mem原创 2011-12-10 16:16:19 · 951 阅读 · 0 评论 -
POJ 1113 Wall (凸包)
裸的凸包。所有凸包拐点的角度和是360。刚好等于一个圆周长。2*Pi*r。原创 2011-12-13 17:10:29 · 499 阅读 · 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 · 515 阅读 · 0 评论 -
POJ 2954 Triangle (Pick定理)
题意:输入三角形的三个顶点。求三角形内部说包含的点的个数。#include#include#include#includeusing 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 · 764 阅读 · 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 · 943 阅读 · 0 评论 -
POJ 2007 Scrambled Polygon
题意:给定许多点,要求按极角排序,中心点为原点。(这些点最多只会在三个象限出现,并且第1个点一定是原点。)题解:用来测试下凸包的模板。原创 2011-12-14 14:49:55 · 601 阅读 · 0 评论 -
POJ 1228 Grandpa's Estate
题意:给定一些点,看能否确定唯一的一个凸包。题解:只有保证凸包上的每条边都至少有三个点时,才能确定其唯一性。否则可以通过在两点构成的边的外围,增加点的来改变凸包。当所有点都在同一条直线上,或者给定的点少于6个时,不能唯一确定凸包。#include#include#include#include#includeusing std::memset;using std::min;原创 2011-12-16 12:38:28 · 1088 阅读 · 0 评论 -
POJ 1873 The Fortified Forest
题意:有许多树,每棵树有一个坐标(x,y),一定的高度l,一定的价值v。现在要求砍掉一些树,用它们围成一个篱笆,将所有剩余的树围起来。问怎么砍才能使所花价值最小。题解:可以枚举组合。当然也可以用位运算枚举。求凸包时注意处理一下少于3点的情况。#include#include#include#include#includeusing std::memset;using std::原创 2011-12-15 17:40:37 · 742 阅读 · 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 · 1238 阅读 · 0 评论 -
POJ 3347 Kadj Squares (几何+线段树)
题意:按图中所示的方式摆放正方形。输出那些正方形从上往下看得到的正方形。题解:1:由于所有线段都成45/135度角的关系,将所有数据大sqrt(2)倍,便可以当做整数来处理。2:用线段树处理覆盖的时候,由于只能处理整点,下面的情况需要注意即第3只有最左边的一点可以看到。但是第2却把该点标为2,这样一来得到的结果就是3看不到。为避免这种情况发生,可以将每一个正方形的左右两点都乘以2,原创 2011-12-11 19:46:05 · 780 阅读 · 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 · 649 阅读 · 0 评论 -
POJ 2318 TOYS / POJ 2398 (二分,叉集)
题意:统计每个格子里面的玩具有多少。2318给出分隔板的时候是从左到右,2398的分隔板并没有排序,得自己排一下。两题就是输出有点不同,其他没什么···POJ 2318:#include using namespace std;#define MAX 5999struct CardBoard{ int x1, y1, x2, y2; double k;原创 2011-11-06 08:23:02 · 729 阅读 · 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 · 475 阅读 · 0 评论 -
POJ 1556 The Doors (线段相交+Dijkstra)
题意:找从起点到终点的最短路径。题解:可以知道,但凡两点不能直达,则一定是沿着墙边界点走的,这样才能保证路径最短。那么只需要再所有可以直达的点间连上一条边,求一次最短路径。注意判断两线段是否相交应该是判断“严格相交”,即不包含端点。#include #include /*#include //不知道为什么加上这两句就报一些奇怪的错误····using namespa原创 2011-11-06 19:56:55 · 827 阅读 · 0 评论 -
POJ 3304 Segments (直线与线段相交)
题意:给出许多线段,问能否找到一条直线,使得所有线段在它上面的投影存在交点。题解:转自http://blog.sina.com.cn/s/blog_6635898a0100n2lv.html1:把问题转化为是否存在一条直线与每条线段都有交点。证明:若存在一条直线l和所有线段相交,作一条直线m和l垂直,则m就是题中要求的直线,所有线段投影的一个公共点即为垂足。2:枚举两两线段的各一个端点原创 2011-11-06 15:56:32 · 597 阅读 · 0 评论 -
POJ 2635 Pick-up sticks (线段相交)
题意:有些人没事儿喜欢往地上任棍子,后面扔的可能盖住前面扔的,显然最后扔的那根棍子一定没被压住,求所有没有被其它棍子压住的棍子。题解:规范相交。用链表优化下。当然也可以用队列存储下标。#include#includeusing namespace std;#define eps 1e-8#define max(x,y) ((x)>(y)?(x):(y))#define min(原创 2011-12-03 22:32:38 · 558 阅读 · 0 评论 -
POJ 1228 Grandpa's Estate
题意:求凸包的面积。题解:可以边求凸包边计算面积。原创 2011-12-17 15:26:25 · 435 阅读 · 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 · 668 阅读 · 0 评论 -
POJ 1066 Treasure Hunt (线段相交)
题意:从正方形外围任意一点出发,到达指定点最少通过几次线段?(每次只能从线段中点经过)题解:思路一:枚举外围起点,连接该点与指定点,相交次数最少的即为答案。思路二:先求出所有线段的中点。以指定点位起点bfs,走到正方形外面的最小步数即是结果。搜索过程中,相邻点(u,v)满足条件:u,v的连线不与其他任何一条线段规范相交。#include#include#includeusin原创 2011-12-08 23:20:44 · 669 阅读 · 0 评论 -
POJ 1419 Intersection (判线段与矩形相交)
题意:判断线段是否与矩形相交(非规范相交)。需要注意的是,当线段在矩形内部时也算作相交。#include#include#include#includeusing 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 · 672 阅读 · 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 · 1389 阅读 · 0 评论