algorithm_计算几何
文章平均质量分 84
theArcticOcean
Website: https://www.weiy.city
Wechat Subscription Account: 胡桃小院
展开
-
hdu 2039 三角形
题意:给定三条边,请你判断一下能不能组成一个三角形。初看题目真的不难,但是第一次提交居然错了,提示我Output Limit Exceeded,这是为什么?数组没开小,没有死循环,没用递归……逐步分析知道了是测试数据在作怪,除了特殊的边缘数据,样例数据也具有表达上的迷惑性。这里居然是浮点数,不是整数!正确的:#include #include#includeusing nam原创 2015-05-25 20:04:54 · 528 阅读 · 0 评论 -
POJ 3608 Bridge Across Islands(旋转卡壳求凸多边形最短距离)
http://poj.org/problem?id=3608大意:求解两个凸多边形的最短距离。分析:依然是旋转卡壳来解决。用一对平行支撑线围绕两个凸多边形来寻找最短的距离。计算P多边形y最小的端点和y最大的端点,即ymin,ymax通过ymin,ymax构造两条支撑射线LP和LQ,方向相反。两个ymin,ymax的端点的距离作为所求距离的初始值,然后旋转两条支撑线。原创 2016-01-23 21:49:09 · 1389 阅读 · 2 评论 -
POJ 2079 Triangle(凸包,最大三角形)
http://poj.org/problem?id=2079大意:在一堆点中寻找三个点,能围成面积最大的三角形。分析:可以想象最大的三角形一定是凸包上的点围成的。(反证法,想想就知道)接下来是求解最大的面积。简单的做法是直接来个n^3枚举,这应该会超时。再一次利用凸多边形的凸性,旋转卡壳。寻找最大的三角形,先是两个点不动,接着点3个点不断在凸包上跑动,到最大三角形的位置时,更新最大原创 2016-01-26 16:40:45 · 894 阅读 · 0 评论 -
叉积判断点在多边形内外 & poj2318
计算几何中长遇到的问题:判断特定点是否在平面多边形内部。向量叉积是一种方法,用于凸多边形。【优角:角度值大于180度小于360度。凸多边形:沿着多边形的一边做一条直线,如果剩下所有的部分都在直线的同侧,那么称这是一个凸多边形,凸多边形是没有优角的】判断:连接第i条边的第一个端点和测试点成向量u,再连接第一个端点与第二个端点成向量v,记录叉积结果,除第一条边外,叉积结果和上一条边对应的叉积的乘积原创 2015-09-21 21:02:53 · 3253 阅读 · 0 评论 -
矩形切割-面积求并
离散化:将无限空间的有限个体映射到有限的空间上,做到逻辑上的有限和有序,避免重复。学习矩形切割就不得不认识线段切割。进而和离散化扯上了关系。关于线段切割:设线段ab和cd有交集:k1k2当a当b>k2,ab分解(切割)成k2b相关题目:VIJOS 1165 火烧赤壁https://vijos.o原创 2016-01-28 22:44:17 · 1204 阅读 · 0 评论 -
三维凸包之增量算法
算法工作过程:选取点集中的四个点构成一个初始的四面体:选两个点p1, p2,再选一个点p3,p3和p1, p2不在同一条直线上,这样形成了一个面。再选一个点,不在同一个面上,形成一个四面体。然后继续研究剩余的点:点在四面体内部,略过。点在四面体外部,删除此点能“看见”的面,扩大凸包体积。POJ 3528 Ultimate Weaponhttp://poj原创 2016-02-09 08:53:18 · 4618 阅读 · 0 评论 -
利用叉积判断点和线的关系
用叉积判断点在线的左侧还是右侧:记住那句话,逆正顺负(因为参数的设置不同而不同)93-24--------------------------------Process exited with return value 0Press any key to continue . . .运行代码:#include #原创 2016-01-10 15:13:09 · 2851 阅读 · 0 评论 -
模拟退火算法
一些求解极值的问题不能通过函数特性直接求解,只能暴力枚举,但是单纯的枚举效率不高,通过模拟退火算法可以高效的找到答案。学习好博文:http://www.cnblogs.com/heaad/archive/2010/12/20/1911614.html相关题目:最小圆覆盖:hdu 3007 Buried memoryhttp://acm.hdu.edu.cn/原创 2016-02-11 18:45:51 · 839 阅读 · 0 评论 -
矩阵乘法经典应用之坐标变化
nyist 298 点的变换http://acm.nyist.net/JudgeOnline/problem.php?pid=298大意:给出n个,对其进行m个操作,平移,旋转,缩放,翻转。其中n分析:对于旋转:x'=rcos(p+r)=xcosp-ysinpy'=rsin (p+r)=xsinp+ycosp然后是超时问题。想过用一个“基向量”先进行变换操作,然后再给每原创 2016-02-08 16:24:28 · 1889 阅读 · 0 评论 -
三维空间——点线面关系
最基础最重要的概念——叉积,说到叉积就要聊聊行列式。行列式的代数意义与Cramer法则联系密切,先来个简单的例子,消除x2得到这样的结果: . 行列式 正是那个分母,其计算和叉积一样。行列式的几何意义更加丰富,面积,体积……如上面的那个行列式就是向量为 的叉积。也就是他们构成的平面的有向面积。推广到三阶就是在x,y,z轴向量方向上的有向体积。故在三维空间中,向原创 2016-01-31 22:35:12 · 5161 阅读 · 0 评论 -
三角剖分·圆和多边形的交
POJ 3675 Telescopehttp://poj.org/problem?id=3675大意:求解圆和多边形的交。分析:任意一个凸N多边形均可分解成N-2个三角形。因此,这就是讨论分解后的三角形和圆的交的问题。它有这些情况:(1):(2):(3):(4):(5):5)又可分为p1在外,p2在里;p1在里,p2在外。原创 2016-02-15 17:09:17 · 1010 阅读 · 0 评论 -
ZOJ 2675 Little Mammoth(圆和矩形的交——三角剖分)
题目:ZOJ 2675 Little Mammoth http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2675大意:求解给定圆和矩形的交。分析:三角剖分的应用,继上一篇博文说,这次使用那种容易理解的方法来做,不用那个吓人的模板,嗯嗯,正常工作。感人啊,给人继续做题的勇气。。。#include #i原创 2016-02-15 18:51:10 · 840 阅读 · 0 评论 -
四面体体积求法
四面体(三棱锥)体积 : 设 有:不过这是有向的。如果知道那四个顶点,用这个公式即可求出体积。如果不知道四点仅知道6条边长,就得用下面的方法——欧拉四面体公式写成行列式:那么有:转置:行列式乘法:其中,因为:所以:有:进一步简化:题目:HDU 1411http://acm.h原创 2016-02-02 14:23:44 · 8899 阅读 · 0 评论 -
小球反弹问题
此题没有AC,下面代码没有参考意义,仅供自己学习记录。(郁闷)HDU 3834 Where am Ihttp://acm.hdu.edu.cn/showproblem.php?pid=3834大意:一个小球在大环内运动,求解经过时间T后的位置。(会给出圆和球的参数,以及初始运动向量,整个过程没有能量损耗)分析:求解线段v1v2和u1u2的交点:面积之比等原创 2016-03-13 20:32:20 · 2039 阅读 · 0 评论 -
凸包之三道模板应用题
虽然有了现成的凸包算法,但是还有一些求得凸点前期或后期类问题需要自己解决。在这里来个小小的总结。 先贴出求凸包的算法:#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int N=5e4+10;struct point{ int x,y;}p[N];int dis原创 2016-05-21 21:22:04 · 1116 阅读 · 0 评论 -
POJ 2187 Beauty Contest(凸包优化 || 凸包+旋转卡壳)
http://poj.org/problem?id=2187大意:求解点和点之间的最大距离的平方。记得曾经有一道CF的题自己写了一个3重循环也过了,当时自己怀疑计算机一秒是运算10^9吗,还是数据太弱。。。写了一个1e9的程序,果断超时。看来1e8才是保险值#include #include using namespace std;const int N=5e4+10;st原创 2016-01-22 21:38:38 · 954 阅读 · 0 评论 -
凸包入门之卷包裹法 & hdu 1348 wall
在二维空间中,凸包可以简单的认为是最小的包含所有点的凸多边形。简单的卷包裹法:寻找最边缘(一般是最下方的,次之是最左边的)点。假想用一根绳子向右逆时针旋转碰到另一个点,这样新找到的点作为端点,继续旋转绳子重复找点的步骤,一直围成一个凸多边形。时间复杂度:O(n^2)(如果在寻找的射线上有多个点的情况,使用和保留离前端点最远的那一点)因为涉及到旋转和夹角,所以运用到了叉积。例原创 2015-12-28 20:25:52 · 1814 阅读 · 0 评论 -
poj 3737 UmBasketella(数学推导||三分)
题目:http://poj.org/problem?id=3737我是想练一练三分的,听说这题能用上,但是我做完了也没把三分派上用场(第一种方法)。数学分析一下就能得出结果啊。令圆锥的底面半径是r,高是h,侧面母线是l,由几何知识:圆锥侧面积s1=2*pi*r*l/2=pi*r*l,底面积是s2=pi*r^2。所以s=pi*r*l+pi*r^2. V=(pi*r^2)/3*h. 同时有:l原创 2015-07-31 15:55:04 · 897 阅读 · 0 评论 -
线段相交的应用
线段相交是计算几何的基础知识,有必要熟练掌握。关于叉积:int mul(point p0,point p1,point p2){ return (p1.x-p0.x)*(p2.y-p0.y)-(p1.y-p0.y)*(p2.x-p0.x);}如果叉积结果大于0,表示p2-p0在p0-p1的逆时针方向(图中例子结果为4);如果叉积结果小于0,表示p2-p0在p0-p1的原创 2015-09-27 09:20:50 · 811 阅读 · 0 评论 -
poj 3301 Texas Trip(旋转+三分)
题目:http://poj.org/problem?id=3301大意:给出一些点求出最小的正方形面积把它们都覆盖掉。要解决它我们需要会一些基础知识:坐标旋转公式,三分搜索算法。逆时针旋转:x=xcosθ+ysinθ; y=ycosθ-xsinθ顺时针旋转:x=xcosθ-ysinθ; y=ycosθ+xsinθ原创 2015-08-04 09:15:44 · 772 阅读 · 0 评论 -
hdu 1558 Segment set(线段相交+并查集)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1558Problem DescriptionA segment and all segments which are connected with it compose a segment set. The size of a segment set is the number of s原创 2015-08-10 10:01:22 · 632 阅读 · 0 评论 -
最小圆覆盖
在正式介绍该算法前先来说几句废话(其实有联系滴^-^)三角关系的探索:边和角的关系:正弦定理: 盗图说明:证明:余弦定理: 围绕三点做最小的圆,使得三个点全部在圆的内部或者圆上(最小圆覆盖)。这里存在两种情况:1. 三点全部都在圆上;2. 三个点如果有2个点在圆上,另一个点在圆的内部,那么那两个点一定是直径的两个端点。即:寻找对应三角形内最长的线段--->寻找原创 2015-11-03 20:19:52 · 1213 阅读 · 0 评论 -
ACM计算几何推荐
转自http://hi.baidu.com/novosbirsk/blog/item/723a9727a9ab8804918f9dca.html其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中。之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专业,GIS)。以后若有机会,我会补充、完善这个列转载 2015-09-22 20:13:10 · 1840 阅读 · 1 评论 -
codeforces 304D. Rectangle Puzzle II(设计矩形)
http://codeforces.com/problemset/problem/304/D大致题意:给出n, m, x, y, a, b(1 ≤ n, m ≤ 109, 0 ≤ x ≤ n, 0 ≤ y ≤ m, 1 ≤ a ≤ n, 1 ≤ b ≤ m)。在范围是(0,0)(n,m)的矩形原区域找出包含(x,y)的(x1,y1)(x2,y2)矩形满足: (矩形是用左下角和右上角表示)原创 2015-12-29 16:15:37 · 705 阅读 · 0 评论 -
POJ 1066 Treasure Hunt(浮点判断线段交点)
http://poj.org/problem?id=1066在下图中,求解从四边到中间终点至少要穿过几堵墙。浮点数据的线段判断是否相交。另外,我们需要设置四边的起点,不是直接遍历每个坐标,而是找已有的交点。(有一种贪心的意思)。#include #include #include using namespace std;const double eps=1e-6;st原创 2016-01-19 19:59:35 · 595 阅读 · 0 评论 -
凸包——Graham-Scan算法
Graham-Scan算法是一种灵活的凸包算法,时间复杂度是O(nlogn)算法细节:1. 选出最左下角的点(排序:x最小,其次是y最小)2. 其余点按极角排序,在极角相等的情况下距离极点(p[0])最近的优先3. 用一个栈(数组)存储凸包上的点,先把p[0],p[1]压入栈。4. 扫描每一个点,用叉积判断新点和栈顶头两个点形成的拐向。顺时针就弹出栈顶元素,继续判断。否则压入新原创 2016-01-22 19:58:01 · 5356 阅读 · 0 评论 -
poj 3907 Build Your Home(任意多边形面积)
题目:http://poj.org/problem?id=3907大意:给出数个点,求出它们构成的多边形的面积。运用叉积求解面积,有关叉积的性质:c=a×b = x1*y2 - y1*x2,其结果是一个矢量。c垂直于a,b所在的平面。|c|=|a||b||sin| 它的1/2就是三角形的面积。若 a × b > 0 , 则a在b的顺时针方向。 若 a × b 若 a × b原创 2015-08-04 10:21:50 · 800 阅读 · 0 评论 -
POJ 3348 Cows (凸包+多边形面积)
http://poj.org/problem?id=3348大意:用已有的树围成最大的牧场来养牛,每头牛生活至少需要50平方米。求出能养多少头?听说此题不难,然而我因为打错了一个变量看了一晚上(外加一早上T_T)。大致思路是:用凸包确定能构造的最大多边形,然后求解凸包多边形的面积。耻辱句:最后求面积的:for(int i=2;itop;i++){不是:for(int原创 2016-01-23 09:45:36 · 664 阅读 · 0 评论 -
algorithm 题集三 (16.05.24)
练习的故事仍然继续下去,今天写下的题目难度适中,记录自己近段时间的训练成果。涉及数学,动态规划,字符串问题。poj 2159 Ancient Cipher(规律)http://poj.org/problem?id=2159 大意:密码加密方法,两种加密方式,第一种,替换加密:Substitution cipher changes all occurrences of each letter to原创 2016-05-24 23:56:46 · 5475 阅读 · 0 评论