随笔分类 - 【计算几何 Comp. Geometry】
摘要:题意: 两个凸多面体,可以任意摆放,最多贴着,问他们重心的最短距离。解法: 由于给出的是凸多面体,先构出两个三维凸包,再求其重心,求重心仿照求三角形重心的方式,然后再求两个多面体的重心到每个多面体的各个面的最短距离,然后最短距离相加即为答案,因为显然贴着最优。求三角形重心见此:http://www....
阅读全文
摘要:题意:平面上有一些半径为R的圆,现在要在满足不与现有圆相交的条件下放入一个圆,求这个圆能放的位置的圆心到原点的最短距离。解法:我们将半径扩大一倍,R = 2*R,那么在每个圆上或圆外的位置都可以放圆心了。首先特判放到原点可不可以,如果不可以,再将所有圆的圆心与原点的直线与该圆相交的点放入队列,再将所...
阅读全文
摘要:题意:求一个不规则简单多边形的重心。解法:多边形的重心就是所有三角形的重心对面积的加权平均数.关于求多边形重心的文章:求多边形重心用叉积搞一搞就行了。代码:#include #include #include #include #include #include #define Mod 100000...
阅读全文
摘要:题意:房间是一个凸多边形,要在里面铺设两条半径为r的圆形地毯,可以重叠,现在要求分别铺设到哪,使地毯所占的地面面积最大。解法:要使圆形地毯所占面积最大,圆形地毯一定是与边相切的,这样才能使尽量不重叠。 那么我们把所有边都向内推进r,那么形成的多边形,可知两个圆形地毯的中心就一定在这个多边形边界上,最...
阅读全文
摘要:题意: 一个(0,0)到(10,10)的矩形,目标点不定,从(0,0)开始走,如果走到新一点是"Hotter",那么意思是离目标点近了,如果是"Colder“,那么就是远了,"Same"是相同。要你推测目标点的可能位置的面积。解法:半平面交水题。从一个点到另一个点远了,说明目标点在两点之间连线的中垂...
阅读全文
摘要:题意: 判断凸包是否稳定。解法: 稳定凸包每条边上至少有三个点。这题就在于求凸包的细节了,求凸包有两种算法:1.基于水平序的Andrew算法2.基于极角序的Graham算法两种算法都有一个类似下面的语句:for(int i=0;i 1 && Cross(ch[m-1]-ch[m-2], p[i]-c...
阅读全文
摘要:题意: 给一个圆和一个多边形,多边形点可能按顺时针给出,也可能按逆时针给出,先判断多边形是否为凸包,再判断圆是否在凸包内。解法: 先判是否为凸包,沿着i=0~n,先得出初始方向dir,dir=1为逆时针,dir=-1为顺时针,然后如果后面有两个相邻的边叉积后得出旋转方向为nowdir,如果dir*n...
阅读全文
摘要:题意: 给你两个凸包,求其最短距离。解法: POJ 我真的是弄不懂了,也不说一声点就是按顺时针给出的,不用调整点顺序。 还是说数据水了,没出乱给点或给逆时针点的数据呢。。我直接默认顺时针给的点居然A了,但是我把给的点求个逆时针凸包,然后再反转一下时针顺序,又WA了。这其中不知道有什么玄机。。求凸包最...
阅读全文
摘要:题意: 求一条直线分凸包两边的面积。解法: 因为题意会说一定穿过,那么不会有直线与某条边重合的情况。我们只要找到一个直线分成的凸包即可,另一个的面积等于总面积减去那个的面积。怎么得到分成的一个凸包呢?从0~n扫过去,如果扫到的边与直线不相交,那么把端点加进新凸包中,如果直线与扫到的边相交了,那么就将...
阅读全文
摘要:题意: 给一些多边形或线段,输出与每一个多边形或线段的有哪一些多边形或线段。解法: 想法不难,直接暴力将所有的图形处理成线段,然后暴力枚举,相交就加入其vector就行了。主要是代码有点麻烦,一步一步来吧。还有收集了一个线段旋转的函数。给定正方形对角求其他两点用到了线段旋转。Vector Rotat...
阅读全文
摘要:题意: 在墙上钉两块木板,问能装多少水。即两条线段所夹的中间开口向上的面积(到短板的水平线截止)解法: 如图:先看是否相交,不相交肯定不行,然后就要求出P与A,B / C,D中谁形成的向量是指向上方的。然后求出y值比较小的,建一条水平线,求出与另一条的交点,然后求面积。要注意的是:这种情况是不能装水...
阅读全文
摘要:题意: 有很多点,从最右下角的点开始走起,初始方向水平向右,然后以后每步只能向左边走,问最多能走多少个点。解法: 贪心的搞的话,肯定每次选左边的与它夹角最小的点,然后走过去。 然后就是相当于模拟地去选点,然后计数,然后走过去。这题就这么搞定了。我这里用了set和vector。代码:#include ...
阅读全文
摘要:题意: 给出两点的经纬度,求两点的球面距离与直线距离之差。解法: 我们先算出球面距离,然后可以根据球面距离算出直线距离。球面距离公式:R*acos(sin(W1)*sin(W2)+cos(W1)*cos(W2)*cos(J1-J2)); ( W1,W2 为两点的纬度值,J1,J2为两点的经度值 )...
阅读全文
摘要:题意: 给四个点,判断四边形的形状。可能是正方形,矩形,菱形,平行四边形,梯形或普通四边形。解法: 开始还在纠结怎么将四个点按序排好,如果直接处理的话,有点麻烦,原来凸包就可搞,直接求个凸包,然后点就自动按逆时针排好了,然后就判断就可以了,判断依据题目下面有,主要是用到点积和叉积,判断垂直用点积,判...
阅读全文
摘要:题意: 求所有满足PB #include #include #include #include #include #define eps 1e-8using namespace std;#define N 100017struct Point{ double x,y; Point(dou...
阅读全文
摘要:题意: 给n个点,问最多有多少个相似三角形(三个角对应相等)。解法: O(n^3)枚举点,形成三角形,然后记录三个角,最后按三个角度依次排个序,算一下最多有多少个连续相等的三元组就可以了。注意:在同一个坐标的两点只算一次,所以要判一下。代码:#include #include #include #i...
阅读全文
摘要:题意: 给一个正方形,从左边界的中点走到右边界的中点,中间有一些墙,问最短的距离是多少。解法: 将起点,终点和所有墙的接触到空地的点存下来,然后两两之间如果没有线段(墙)阻隔,就建边,最后跑一个最短路SPFA,即可得出答案。代码:#include #include #include #include...
阅读全文
摘要:题意: 正方形的房子,给一些墙,墙在区域内是封闭的,给你人的坐标,每穿过一道墙需要一把钥匙,问走出正方形需要多少把钥匙。解法: 因为墙是封闭的,所以绕路也不会减少通过的墙的个数,还不如不绕路走直线,所以枚举角度,得出直线,求出与正方形内的所有墙交点最少的值,最后加1(正方形边界)。代码:#inclu...
阅读全文
摘要:题意: 给一条线段,和一个矩形,问线段是否与矩形相交或在矩形内。解法: 判断是否在矩形内,如果不在,判断与四条边是否相交即可。这题让我发现自己的线段相交函数有错误的地方,原来我写的线段相交函数就是单纯做了两次跨立实验,在下图这种情况是错误的:这样的话线段与右边界的两次跨立实验(叉积#include ...
阅读全文
摘要:题意: 给一些圆,要求从第一个圆的圆心走到最后一个圆的圆心,中间路径必须在某个圆内,求最短路径的长度。解法: 易知要保持在圆内且路径最短,走两圆相交的点能使路径尽量短,所以我们找出所有的两圆相交的点,再加上起点和终点,放到一个容器中,去重后,判断每两点之间的线段是否都在圆内,如果是则建边,建完所有的...
阅读全文


浙公网安备 33010602011771号