
计算几何
文章平均质量分 74
Terry__J
这个作者很懒,什么都没留下…
展开
-
判断两条线段是否相交
为了确定两条线段是否相交,要检查每个线段是否跨越了包含另一线段的直线。 给定一个线段p1p2,如果点p1位于某一直线的一边, 而点p2位于直线的另一边,则称线段p1p2跨越了该直线。如果p1和p2 就落在该直线的话,即出现边界情况。两条线段相交, 当且仅当下面两个条件中有一个成立,或同时成立:1)每个线段都跨越包含了另一线段的直线。2)一个线段的某一端点位于另一线段上。代码如下:原创 2012-03-06 22:48:36 · 6956 阅读 · 1 评论 -
ural 1489. Points on a Parallelepiped 计算几何
思路:以某一个面为底面,将展开的图形折合回去,进而将二位坐标转化为三维坐标。#include #include #include #include using namespace std;struct block{ double minx, maxx, miny, maxy;};block r[10];double a, b, c;int getid(doub原创 2012-03-20 14:14:28 · 579 阅读 · 0 评论 -
计算几何 ural 1874
题意:求已知两边(非直角边)的有一角为直角的四边形的最大面积。思路:三分法。极端情况:1)给定两边在同一直线上,即构成的为直角三角形2)四边形为矩形一般情况:四边形面积:Sabc + Sacd, max(Sabc)= ac*ac/4. Sacd可又海伦公式求得。其中ac是变动的,范围有1,2可知,利用三分法求最大面积。#include #include #inclu原创 2012-03-19 14:20:24 · 772 阅读 · 0 评论 -
hdoj 1147 Pick-up sticks 计算几何
思路:判断第i根木棍是否在顶上,只需判断它是否被第i+1到第n根覆盖,并标记被覆盖的木棍。#include #include #include #include using namespace std;const int N = 100009;struct Point{ double x, y;};struct Line { Point p1, p2;原创 2012-04-04 16:54:35 · 1059 阅读 · 1 评论 -
计算几何 ural 1753
题意:求book在下滑过程中,中心距书架左边栏最远距离。思路:刚开始并没有思路,只是简单的推出:在最开始的时候,book的中心距书架左边栏的距离(简称最左边距)为0,当book的中心与书架左边栏顶部重合时,最左边距也为0.那么最左边距的最大值肯定在这之间产生。搜了别人的题解,了解到三分法。至于什么是三分法,我也是刚了解,只知道,单峰函数三分法,函数在给定定义域内有不超过一个的峰值,可以根据原创 2012-03-19 12:32:27 · 1251 阅读 · 0 评论 -
ural 1588 Jamaica
思路:枚举所有点,计算两点长度,同时在搜索所有点,判断是否有共线的,有的话,只算距离最长的就可以了。对于多个点在同一直线上,最长距离肯定是两端的点,所以需要预排序。时间复杂度O(n*n*n).#include #include #include #include #include using namespace std;#define eps 1e-8const int MA原创 2012-03-19 20:56:51 · 555 阅读 · 0 评论 -
ural 1207 计算几何
1207. Median on the PlaneTime Limit: 1.0 secondMemory Limit: 16 MBThe are N points on the plane (N is even). No three points belong to the same strait line. Your task is to select two po原创 2012-03-18 10:34:10 · 976 阅读 · 0 评论 -
计算几何 ural 1793Tray 2
1793. Tray 2Time Limit: 1.0 secondMemory Limit: 64 MBOne of the organizers of the Ural Regional School Programming Contest came to the university cafeteria to have lunch. He took a soup原创 2012-03-16 21:38:07 · 982 阅读 · 0 评论 -
HDOJ Error Curves 计算几何
题意:在给定的n个抛物线中,求 min(F(x)), F(x) = max(S(x)).思路:由于给定的抛物线都是开口向上的(0 ≤ a ≤ 100)F(x)也是开口向上的类抛物线,具有单峰值,利用三分求解 。#include #include #include #include #include using namespace std;#define eps 1e-10原创 2012-03-31 20:28:10 · 673 阅读 · 0 评论 -
凸包 URAL 1215
题目读起来挺纠结的,题意的大概是:若给定点在凸包外面的话,求该点到凸包的最短距离,在凸包内的话,距离为0。思路:首先判断该点是否在凸包外面,利用叉积;然后搜索点到每条线短的最短距离,不断更新。bool inconvex(){ int i; FOR(i, 0, n) if(direction(point[i],point[i+1]) > 0)原创 2012-03-08 11:07:30 · 645 阅读 · 0 评论 -
凸包
点集Q的凸包是一个最小的凸多边形P,满足Q中的每个点或者在P的边界上,或者在P的内部。主要介绍Graham扫描算法,时间复杂度为O(nlgn)。算法:通过设置一个关于候选点的堆栈S来解决凸包问题。输入集合Q中的每个点都压入栈一次,非CH(Q)中顶点的点最终被弹出堆栈。当算法终止时,堆栈S中仅包含CH(Q)中的顶点,其顺序为各点在边界上出现的逆时针方向排序的顺序。Graham_Sca原创 2012-03-07 21:44:23 · 666 阅读 · 0 评论 -
最近点对问题
在n(n>1) 个点的集合中寻找最近点对。即求任意两点的欧几里得距离的最小值。1)最简单的暴力搜索算法,时间复杂对为O(n*n)。2)这里主要考虑分治算法,运行时间的递归式为T(n) = 2*T(n/2)+O (n),时间复杂度为O(n*lgn)。算法思想:将集合中的点按x坐标排序,我们可以想象一条垂直的直线将集合划分为左右两部分,对于每一部分,我们可以递归的求出最小距离,最终得到原创 2012-03-07 16:58:48 · 2369 阅读 · 1 评论 -
计算几何 ural 1754. Explosion in a Pyramid
思路:将题目描述的问题抽象成求点到平面的距离。由平面的三点,利用叉乘求出法向量,再由平面外一点与平面内任意一点组成的向量与该法向量的叉积比上法向量的模,得到点到平面的距离。#include #include #include #include using namespace std;struct Point { double x, y, z;};Point p[5]原创 2012-03-20 17:09:57 · 715 阅读 · 0 评论