计算几何
文章平均质量分 65
logic_nut
这个作者很懒,什么都没留下…
展开
-
pku 1971 Parallelogram Counting(hash)
判断有多少个平行四边形。首先想到的肯定是斜率,但因为是斜率可能出现小数,不好判断,放弃。然后我们可以发现平行四边形有个重要的性质,对角线互相平分,这样我们可以通过判断点对的中点是否重合来确定是否能构成平行四边形。 这是我第一次用真正意义上用hash,5000MS的限制我用了4700MS。#include using namespace std;#define maxLen原创 2009-07-26 21:52:00 · 830 阅读 · 0 评论 -
pku 1265 Area(pick公式)
题意:坐标图上的多边形,求多边形内部点数,边上点数,多边形面积。Pick公式:S=I+E/2-1,即多边形的面积=在多边形内的格点数+在多边形边上的格点数/2-1。被题目误导了,在推出公式后一直在想怎么快速统计多边形内部点数。其实这道题目应该是逆着求的,先用叉积求多变形面积,再根据公式计算内部点数量。 #include using namespace std;struct原创 2009-08-21 14:52:00 · 919 阅读 · 0 评论 -
pku 1228 Grandpa's Estate(判断直线上顶点个数)
题意:有一个凸包,给定这个凸包上的部分顶点,问这些顶点能否唯一确定这个凸包。 当由这部分顶点构成的凸包的每条边上都有至少三个顶点的时候,可以唯一确定这个凸包。至于为什么,自己画图得到^_^。 已知这部分顶点都是凸包上的顶点。按照常规的寻找凸包的方法,将所有顶点根据和起始节点的角度排序,这即是顶点在凸包上出现的顺序。于是我们只要从前往后扫描这些点,即可得到每条边上的点的数量,判断点是原创 2009-08-20 21:23:00 · 1105 阅读 · 0 评论 -
pku 3348 Cows(求凸包面积)
凸包模板求凸包顶点,面积模板求由凸包顶点构成的多边形面积,最后输出 面积/50。#include using namespace std;struct Node{ int x,y;}pt[10000+5],pt2[10000+5];inline int CrossMutiply(Node& p1,Node& p2,Node& p3){ return (p2.x-原创 2009-08-20 07:18:00 · 1730 阅读 · 0 评论 -
zoj 2107 Quoit Design(平面最近点对)
题目的意思是求输出平面最近点对距离的一半。 分治法找平面最近点对的过程1 把整个点集按x排序2 根据x坐标,将点集A分成左右两边点集R和点集L,根据迭代分别求R中和L中的最近点对,得到min_dist3 如果点集A中还存在更小的点对,则肯定是一个点在R中另外一个点在L中的情况。并且候选点离R和L的分割线的距离都小于min_dist4 将候选点按y坐标排序。根据画图可知,如果原创 2009-08-19 10:23:00 · 1978 阅读 · 1 评论 -
pku 1654 Area(向量叉积算面积)
经典问题,求多边形面积,用向量叉积可以很好的解决。#include using namespace std;int move[10][2]={{0,0},{-1,-1},{0,-1},{1,-1},{-1,0},{0,0},{1,0},{-1,1},{0,1},{1,1}};int main(){ int n; __int64 ans; int x1,y1,x2,y原创 2009-08-18 21:38:00 · 923 阅读 · 0 评论 -
pku 1380 Equipment Box(小盒子放到大盒子里面去)
给出大盒子和小盒子的长宽,问小盒子能否放到大盒子里面去,其中小盒子可以斜着放。看到很多人枚举旋转角度来求解,其实通过几何计算,可以得到旋转后小盒子的最小长度,直接和大盒子长度比较得到结果。 直接判定的情况1.小盒子的短边大于大盒子的的短边。(不能放进去)2.小盒子的面积大于大盒子的面积。(不能放进去)3.小盒子的短边小于等于大盒子的短边,并且小盒子的场边小于等于大盒子的长边原创 2009-08-17 16:06:00 · 1075 阅读 · 0 评论 -
pku 1410 Intersection(判断线段是否相交)
题目的意思是判断线段是否和矩形相交,可以枚举矩形的4条边依次判断。(在这题里,矩形包含线段属于相交,需特殊判断)下面的那个函数可以作为线段相交判断的模板。#include using namespace std;#define Min(x,y) (x<y?x:y)#define Max(x,y) (x<y?y:x)struct Node{ int x,y;};原创 2009-08-17 13:46:00 · 705 阅读 · 0 评论 -
判断两线段是否相交
以下代码摘自 http://www.cai0715.cn/read.php?109其中x1,y1,x2,y2是全局变量,存储了一条直线的起始点和终止点坐标。x3,y3,x4,y4是表示另外一条直线。下面函数用来判断两条直线是否相交。//====================================================function cross(tx,ty,ax原创 2009-08-17 12:05:00 · 708 阅读 · 0 评论 -
pku 1696 Space Ant(转角,凸包扩展)
有一个外星人,只会左转不会右转,走路的时候还会在地上留下痕迹,外星人不能越过自己留下的痕迹。平面上有n个点,外星人从最下面一个位置出发,问最多能走遍平面上的多少个点,怎么走。 因为是从最下面的位置出发,很明显一直沿着最外围的点走,是可以走遍所有点的。这样的寻点和凸包很像,只是在走到凸包的最后一个节点时,不去连接起始节点,而是往凸包内部继续寻找。 出发后,尽量找转角小的点。一原创 2009-08-17 10:15:00 · 871 阅读 · 0 评论 -
pku 1269 Intersecting Lines(求两直线交点,解二元二次方程)
给定4个点坐标,前2个点确定一条直线,后2个点确定一条直线。判断2直线的关系:重合,平行,相交。如果相交,给出交点坐标。根据点坐标,可以给出两个直线方程。ax+b=cydx+e=fy#include using namespace std;int main(){ int N,x1,x2,x3,x4,y1,y2,y3,y4; int a,b,c,d,e,f;原创 2009-08-17 09:00:00 · 1139 阅读 · 0 评论 -
三角形基本量
三角形面积、两边夹角正弦值 (向量叉积)aXb=|a|*|b|*sin(angle)两边夹角余弦(向量点积)a*b=|a|*|b|*cos(angle) 内切圆三角形周长*内切圆半径=三角形面积*2外接圆正弦定理 外接圆直径=任意一边长/对角正弦值原创 2009-08-15 11:48:00 · 763 阅读 · 0 评论 -
pku 2318 TOYS(叉积,二分)
题意:一个句型的大盒子,加上一定数量的隔板,划分为n个小盒子。给某点坐标,判断该点是在哪个小盒子的范围内。 思路:叉积判断点是在隔板的哪一侧,二分搜索逐渐缩小范围。 #include using namespace std;int count[5005];struct Node{ __int64 x,y;};struct Edge{ Node原创 2009-08-16 10:46:00 · 942 阅读 · 0 评论 -
hdu 1392 Surround the Trees(凸包模板)
求凸包的边长,最基础的凸包问题。编码的时候为了代码今后的扩展和易读,有些可优化可化简的地方没有处理。还有,这里的凸包顶点是按逆时针顺序求的。#include "math.h"#include using namespace std;int N;struct Node{ int x,y;}m_stack[105],position[105];int stack原创 2009-08-15 07:18:00 · 1037 阅读 · 0 评论 -
pku 2187(平面最远点对距离)
又要开始做题的日子了,找了道简单题练手。据说数据很水,直接枚举都可以过。我本想凸包+旋转卡壳,但死活WA,最后只好用凸包+枚举。l路过的大牛给点提示。#include using namespace std;int N,stackTop;struct node{ int x,y;}stack[50005];int Distance(node &a,node原创 2010-03-29 22:08:00 · 1234 阅读 · 0 评论