
计算几何
leonharetd
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
计算几何与圆心和球有关的计算问题
struct Line{ Vector v; Point p,b; Point point(double t) { return p+v*t; } Line(Point a,Point b,Vector v) : p(a),b(b),v(v) {} Line(Point p,Vector v) : p(p),v(v){}};struct Circle{ double原创 2013-09-08 19:20:44 · 747 阅读 · 0 评论 -
An Easy Problem?!(poj2826线段相交,直线线段相交)
题意:给你两个同样长的木板,围城一个多边形,水从空中垂直下落,问木板能盛放多少体积的水。思路:分类讨论1.如果线段没有交点,那么面积就是02.如果线段有交点,但是有一个模板被另一个木板覆盖还是接不到水,怎么判断了,过两个木板的最高的两个点做垂线,如果垂线和和交点到另一木板的顶点这段相交,说明木板有覆盖,不行可以画个图试试,但是覆盖不一定遮挡,所以要判断交点是在另一个木板顶点的上下,在上原创 2013-09-28 08:32:14 · 1377 阅读 · 0 评论 -
Space Ant(poj1410叉积的极角排序)
题意:有一种蚂蚁,他只能向左转,他还要吃植物,给你一个图,图上有好多植物的坐标,为找到一条路径使得这只蚂蚁吃得最多的植物思路:极角排序,选定一个最外围的一个点,怎么排序呢?三个点的叉乘可以确定哪条直线在右面,一个点在另一点的右面,说明这个点更靠外面,就是根据这个叉乘排序选择第一个,然后再根据选择的点在排序,在选择第一个,这样一直选择下去c++忘完了快,写了个三个参数的构造函数,当传2个原创 2013-09-26 09:42:44 · 786 阅读 · 0 评论 -
Intersection(poj1401线段和矩形相交)
题意:给你一条线段和一个矩形,判断线段是否和矩形相交,线段在矩形当中也算相交,并且矩形的坐标不是左上右下思路:这道题知道自己模板错了,1.线段相交判看是否有线段的端点在线段上,就是说要特判点在线段上2.点在直线上要包括点在线段的两个端点,即dcmp(Cross(b-a,p-a)) == 0 && dcmp(Dot(b-p,a-p)) 剩下的就是细心加细心#include#原创 2013-09-25 16:37:01 · 879 阅读 · 0 评论 -
Treasure Hunt(poj1066线段相交)
题意:在一个正方形中有多条线段,线段的端点都在正方形的边上,有一个点,然后求从边上到该点最少需要穿过几条线段。思路:和在一群线段里找一条直线,它穿过所有的线段,而这条直线一定过两条线段的端点,所以可以试想该线段一定是正方形四周的一个点,所以遍历四周的线段的点,找到最小的相交次数。注意:当n == 0 的时候我刚开始直接输出结果了,其实还要再读一个点!!!!wa哭了#incl原创 2013-09-25 13:56:56 · 764 阅读 · 0 评论 -
The Doors(poj1556线段相交+最短路径)
题意:给你一个正方形的盒子,里面有一些线段,求从(0,5)出发到(10,5)的最短路径,线段是按照x排序的思路:先判断(0,5)和(10,5)组成的线段是否和其他线段相交,如果不相交,最短距离就是这两点的距离,如果相交就用最短路径最短路径的使用:Dijkstra算法是求一个点到其他所有点的最短路径首先要知道刚开始的图,才能进行最短路,怎么建图呢?根据题意我们知道最短路径一定经过原创 2013-09-24 17:57:47 · 1058 阅读 · 0 评论 -
Area(poj1654多边形面积)
题意:原点开始给你一个路径,路径有可能闭合,有可能不闭合,求其围成的面积。思路:模拟路径的走法,叉积求有向面积#include#include#include#include#include#includeusing namespace std;struct Point{ int x,y; Point(int x,int y) : x(x),y(y){原创 2013-10-09 20:31:45 · 652 阅读 · 0 评论 -
The Fortified Forest(poj1873位运算枚举+凸包)
题意:给你一些树的坐标,价值和砍掉每棵树所能做成的篱笆长度,求出砍掉最小价值的树,然后砍掉的树能做成篱笆,能把剩下的树围起来,并求出围成以后剩余的长度思路:因为最多15棵树,用位运算枚举每个状态一共2^15-1个状态,都用01表示假如有3棵树那么所有的状态为0~7,也就是000~111代表每一棵树是否被砍掉,每取一个状态记录被砍的树木的价值之和,篱笆长度之和,还有砍倒的树的数量,最后砍完剩原创 2013-10-09 20:14:48 · 1352 阅读 · 0 评论 -
Cows(poj3348凸包的面积)
题意:给你一些点,这些点圈起来一个牧场,每50平方米可以放一头牛,问这些点圈起来的牧场放的牛的数量思路:求凸包的面积然后/50再向下取整#include#include#include#include#include#includeusing namespace std;struct Point{ double x,y; double v,L; Point(do原创 2013-10-09 20:27:59 · 729 阅读 · 0 评论 -
Grandpa's Estate(poj1228稳定的凸包)
题意:给你一个凸包的所有的点,求看其是否能组成唯一的凸包思路:组成唯一的凸包,那么他的每一条边至少有三个点,因为如果有有两个点,那么可以再加一个点使得凸包扩大,所以每条边至少三个点。这就和以前组成的凸包不太一样的,以前组凸包有可能没有考虑其边界上有点,因为这对面积没有什么影响,但是这题有影响,所以再求凸包的时候不能要边界上的点,等于说是求得了真正的凸包,每条边只有两个端点,然后枚举每条线段原创 2013-10-09 20:23:35 · 1068 阅读 · 0 评论 -
Intersecting Lines(poj1269)
题意: 给你两条直线,判断他们的位置,1.平行,2.重合,3.相交思路:平行:点在同一边,并且点到直线的距离相等,重合:两点到直线的距离为都0,其余就是相交g++ 判double 要用%f 不能用%lf c++判double 都可以还有就是模板不能写错啊.......#include#include#include#include#includeusing nam原创 2013-09-24 08:57:38 · 602 阅读 · 0 评论 -
Scrambled Polygon(poj2007极角排序输出凸包)
题意:给你一些点,让你按照极角的顺序输出凸包的顶点思路:直接按照向量排序按照向量叉乘的正负判断点所在的位置,类似于卷包裹的凸包,每次按照一条边排序,选择最外面的一条边,再按照选择的边在排序,再选直到点重合位置这道题直接按照(0,0)点极角排序,如果极角相同选择最近的那个因为在一条直线上先选近的再选远的,如果选择远的那点的顺序都不对了#include#include#incl原创 2013-10-08 19:21:27 · 588 阅读 · 0 评论 -
Wall(poj1113凸包+圆的弧长)
题意:给一些点,用一个多边形把这些点包起来,并且所有点到边的距离至少为L思路:先求一个凸包然后再加上一个圆的弧长,为什么加圆的弧长呢?可以证明每个顶点到他距离为L的点组成了一个圆弧,过该点做两条垂线可以证明所有点的这些圆弧这些角度加起来正好360度是一个圆,所有就加上一个半径为L的圆#include#include#include#include#include#includ原创 2013-10-08 17:16:35 · 558 阅读 · 0 评论 -
Geometric Shapes (poj3449多边形相交)
题意:给你一些多边形的点,判断每个多边形和那些多边形相交,编号按照字典序输出思路:枚举每个多边形的每条边看是否相交,这里的相交是包括端点的,关键是给你正方形不相邻两个点求另外两个点怎么求,长方形给你3个点求第四个点怎么求?因为对角线的交点为两条对角线的中点,所以 x0 + x2 = x1 + x3y0 + y2 = y1 + y3可以证明分割的这几个小三角形是全等的原创 2013-10-07 19:14:10 · 1114 阅读 · 0 评论 -
A Round Peg in a Ground Hole(POJ1584点在多边形内+是否为凸多边形)
题意:顺时针或逆时针给你一些点判断是否为凸多边形,如果不是输出HOLE IS ILL-FORMED如果是在判断圆是否在多边形内思路:圆在多边形内,判断原点到每个点的距离如果有一条边小于半径那就不在多边形内#include#include#include#include#includeusing namespace std;struct Point{ doubl原创 2013-10-07 20:41:13 · 799 阅读 · 0 评论 -
Pipe(poj1039线段相交)
题意:给你一个管道,看是光线是否从管道射出,管线没有反射,不能接触管道的边,但是能接触拐点思路:光线穿过管道一定是经过两个拐点,一个上拐点,一个下拐点,所以枚举所有拐点,如果该直线可以穿过管道那么上方的点一定在直线的左边,下放的点一定在直线的右边,所以枚举每两个点,判断有没有上方的点在直线的右边,下方的点有没有在直线的左面,有则说明直线和管道有交点,求出交点,最后取最大值,如果线段在该线段之前原创 2013-10-07 14:13:40 · 683 阅读 · 0 评论 -
二位计算几何基础
#include#include#include#includeusing namespace std;struct Point { double x,y; Point(double x,double y):x(x),y(y){} Point(){}};//点类和构造函数,方便编写代码typedef Point Vector;Vector operator - ( V原创 2013-09-03 09:00:00 · 632 阅读 · 0 评论 -
Kadj Squares(poj3347线段的区间覆盖)
题意:给你几个正方形的边长,正方一个顶点在x轴上然后边与x轴的夹角为45度,每个正方形都是紧贴的,问从上面看能看的正方形的编号思路:正方形有左右两个顶点,怎么判断被覆盖呢?便利每一条线段,如果和其他线段有交集那个去掉交集部分,继续遍历,最后看是否还剩下线段,剩下说明没有被覆盖,反之被覆盖了怎么确定每个正方形的区间呢,根据边长,将边长扩大根号2倍就避免了小数,如果两个边长相等的正方形放在原创 2013-09-28 09:33:58 · 1031 阅读 · 0 评论