=====计算几何=====
文章平均质量分 76
林伏案
妖蛾子良多的范老爷
展开
-
poj3608(旋转卡壳求两凸包间的最短距离)
/*translation: 求两个凸包间的最小距离?solution: 旋转卡壳法。note: * 网上给出的资料都差不多,具体如下: 1. 计算凸包P在y轴方向上的最小值记为yminP,和凸包Q在y轴方向上的最大值记为ymaxQ。 2. 建立两条紧贴着yminP, ymaxQ的两条水平的直线LP, LQ。要求他们指向不同的方向。这时候他们就形成了一对anti-podal pai原创 2017-02-27 22:34:50 · 586 阅读 · 0 评论 -
poj3168(扫描线)
/*translation: 给出几个长方形的位置以及边长情况,问能扩张的长方形有几个。solution: 从上到下,从左到右扫描两边。预先对每条边排序,扫到这条边时,对其和这条边位置相同的边进行判断,是否有 重合的点。如果有,那么这两条边各自对应的长方形就不可能扩张了。note:*/#include #include #include #include using na原创 2017-02-26 10:46:45 · 808 阅读 · 0 评论 -
poj2187(凸包)
/*translation: 给出n个点的位置,计算出距离最远的一对点的距离。solution: 求凸包然后枚举凸包上的点计算即可。note: * 旋转卡壳法更加高效。*/#include #include #include #include #include #include using namespace std;const int maxn = 50000 +原创 2017-02-26 10:42:18 · 336 阅读 · 0 评论 -
aoj2201(极限情况)
/*translation: 有n个宝石,宝石为圆形。给出现在有根金属棒,靠近宝石距离m之内就会吸附上去。现在给出每颗宝石的信息,求用这个棒子一次 能钓出最多多少个宝石?solution: 极限情况 每个宝石可以看成两个圆(本来的圆+半径加上m的圆)。对这些圆形一一枚举,即可求出各自的公切线(即金属棒)。然后 求出此时能吸附多少宝石。逐一更新即可。note: # 为何最后计算吸附原创 2017-02-26 10:33:36 · 301 阅读 · 0 评论 -
poj2079(*凸包内最大三角形面积)
/*translation: 给出一组点,从这些点里面选择三个点构成三角形。求这个三角形面积最大是多少?solution: 凸包 很容易想到三角形的三个点肯定在凸包上面,但是关键怎么找出来三个点。一一枚举肯定超时。note: * 如果固定一条边的话,那么枚举剩下的一个点,在枚举过程中面积肯定有达到极大值后又减小。根据这一特性,可以先固定 一点i,然后让另外两点a,b不断旋转来找原创 2017-02-25 16:41:51 · 1449 阅读 · 3 评论 -
poj1981(几何极限情况)
/*translation: 给出若干个点的位置,求一个半径为1的圆最多能够覆盖多少个点?solution: 极限情况 先枚举两个点,假设这两个点恰好在圆上。然后计算这个圆包含的点个数即可。note: * 还有一种更为高效的写法,枚举一个点,假设该点在圆x上,则圆心必然在以该点为圆心的圆i上。此时x要覆盖尽量多的点, 所以对以枚举的点为圆心的圆求出和其他点为圆心的圆的交点,被覆原创 2017-02-25 09:22:48 · 504 阅读 · 0 评论 -
aoj2308(#离散化,极限情况)
/*translation: 可以从任意方向以速度v发射一只白鸟,可在任意时刻产下一枚卵。发射后鸟将以抛物线轨迹飞行。空中有若干障碍物,问鸟 产下的卵是否能击中目标(x,y)solution: 极限情况的离散化note: * 考虑到鸟的飞行轨迹是无数种方案的,所以只需考虑其中的极限情况,即擦着障碍物的边飞过去。所以可以枚举飞行轨迹 经过的点,也就是原创 2017-02-22 16:57:31 · 444 阅读 · 0 评论 -
poj2932(几何扫描线)
/*translation: 给出n个两两不相交的圆,求出那些不被任何圆包含的圆的编号solution: 平面几何扫描线note: * 首先对每一个圆的水平方向的两个端点进行排序处理。然后用一条扫描线从左到右扫描。遇到圆的左端点 就判断是否被其它圆包含,如果是,加进set容器中(保存的全是没有被包含的圆)。遇到右端点,从容器 中删除 *原创 2017-02-22 16:55:57 · 497 阅读 · 0 评论 -
poj1127(计算几何,并查集)
/*translation: 给出n根木棍的端点位置,然后问任意两个木棍是否连通solution: 计算几何,并查集 首先计算出任意两个木棍之间是否有公共端点,如果有,就对两个木棍的编号进行并查集的unite操作。 这样到最后只需要判断根节点是否相同即可。*/#include #include #include #include using nam原创 2017-02-22 16:54:45 · 289 阅读 · 0 评论 -
aoj1313(*simpson公式求三维体积)
/*translation: 三维坐标系上有2个棱柱,分别平行与Z轴以及Y轴,现在分别给出它们在XY平面和XZ平面上的底面顶点,求两个棱柱相交部分的体积。solution: 主要思路是不难,但前提得知道simpson公式。利用该公式即可将积分公式化为普通的公式。然后微积分求出来的既是体积。*/#include #include #include #include using原创 2017-03-01 21:57:40 · 847 阅读 · 0 评论 -
poj1912(*判断直线是否穿过凸多边形)
/*translation: 给定一些点,再给出若干条直线,对于每一条直线,判断其所有点是否都在同一侧solution: 很容易想到先求凸包,然后再对凸包上面的点做处理。note: * 很明显,只要直线不经过凸包即可。但是怎么快速判断就成了问题。方法是根据凸包上面的点进行二分查找第一个在右侧或者左侧的点。 因为凸包上的点的斜率呈现单调性,故可行。然后对两个点判断是否都在直线同一侧原创 2017-03-01 20:18:53 · 2175 阅读 · 0 评论 -
poj3246(*凸包)
/*translation:给出n个点,求去掉一点后,再求凸包,所能得到凸包最小的面积是多少?solution:很容易想到去掉的点肯定在凸包上面。所以对上面的点一一枚举,然后维护最小答案即可。note:* 想半天只想到去掉的点肯定在凸包上,然后暴力枚举上面的每一个点。但看了下数据范围又否决了自己的方法。 但是万万没想到题解就是按照暴力来写的,这数据明显偏弱了。不然如此暴原创 2017-02-28 20:46:50 · 347 阅读 · 0 评论 -
poj1113(凸包)
/*translation: 用一条线把若干个点包起来,并且线距离任何一个点的距离都不小于r。求这条线的最小距离是多少?solution: 直接求凸包,然后凸包的周长加上一个圆的周长即可。*/#include #include #include #include #include #include using namespace std;const int maxn =原创 2017-02-26 10:50:57 · 258 阅读 · 0 评论