随笔分类 -  计算几何

摘要:http://poj.org/problem?id=3304在二维空间上,给定一组线段,能否存在这样的一条直线,使所有线段在这条直线的投影会在一个点上。如果沿着这个投影点做直线的垂线,那么这条垂线必会与所有的线段相交。那么本题就转换为能否找到一条直线与所有的线段相交。想找这样的直线,就要去离散化的枚举,本题怎样有效的枚举是关键。首先假设有一条直线与所有的线段相交,慢慢平移这条直线,使它恰好在某条线段L1的端点上。当然这个时候直线还是与所有的线段相交。然后让直线在这个端点上慢慢旋转,使到直线又经过线段L2的端点。L2和L1要满足不是同一条线段,就算相同,你仍可以继续旋转,总会让直线找到L2,且不 阅读全文
posted @ 2011-04-19 11:07 CoderZhuang 阅读(191) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2079给定一组点集,选择三点组成三角形,且面积最大。肯定要求出这组点的凸包,接下来就不能想当然的三重循环枚举三点,这样很容易超时。这时就要用到神奇的旋转卡壳法。取凸包的三点i,j,k。先固定i,j。逆时针(当然你也可以顺时针)变换k,你会发现i,j,k三点组成的三角形面积具有单峰性。即如果第一次找到Area(i,j,k+1)<Area(i,j,k),那么此时就是在i,j固定下的形成最大面积的k点了。这样两重循环枚举i,j,时间复杂度为o(n^2)。也许有人会认为不是也要找k吗?时间复杂度为(n^3)才对。非也,如果你认真观察的话,你会 阅读全文
posted @ 2011-04-18 11:46 CoderZhuang 阅读(246) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=2398poj2318的翻版,所不同的是本题所给的线并不排好序的,加一个sort()函数排序即可。(poj2318解题报告)#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;double y1,y2,**p=new double*[1005];double judge(int j,double x,double y) 阅读全文
posted @ 2011-04-14 21:25 CoderZhuang 阅读(115) 评论(0) 推荐(0)
摘要:把一个矩形分成多个格子,矩形上分布多个点,求每个格子的拥有的点数。简单的叉乘运用,查找时要用二分查找,不然很容易超时。#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;double y1,y2,p[5005][2];double judge(int j,double x,double y){ return (p[j][1]-p[j][0])*(y-y1)-(y2-y1)*(x-p[j][0]); //叉乘判断方向,大 阅读全文
posted @ 2011-04-14 17:44 CoderZhuang 阅读(139) 评论(0) 推荐(0)
摘要:转自: http://hi.baidu.com/novosbirsk/blog/item/0bf7408fc05bf1e2f01f3622.html之前写过一篇《POJ计算几何入门题目推荐》。本来是随意写写,想不到这篇文章成为了我 blog浏览量第二高的文章,还被许多ACMer转载到其他地方。最近估计ACM赛季又到了,不少热心的ACMER加我Q,询问我那篇文章的事情,希望我再给出一些题目。 本人已经退役了,本来不想再写一些关于ACM的东西了,以免因为自己水平有限,思想落后,误导他人。不过后来想到这个空间晾着也比较尴尬,让各位找新文章 的 ACMER经常扑空我十分过意不去,所以整理了一下以... 阅读全文
posted @ 2011-04-14 09:37 CoderZhuang 阅读(346) 评论(0) 推荐(1)
摘要:转自http://hi.baidu.com/novosbirsk/blog/item/723a9727a9ab8804918f9dca.html其实也谈不上推荐,只是自己做过的题目而已,甚至有的题目尚未AC,让在挣扎中。之所以推荐计算几何题,是因为,本人感觉ACM各种算法中计算几何算是比较实际的算法,在很多领域有着重要的用途(例如本人的专业,GIS)。以后若有机会,我会补充、完善这个列表。计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板很重要,模板必须高度可靠。3.要注意代码的组织,因为计算几何的题目很容易上两百行代码,里面大部分是模板。如果代码一片 阅读全文
posted @ 2011-04-14 09:34 CoderZhuang 阅读(288) 评论(0) 推荐(0)
摘要:(x,y)为多边形的顶点,当k=m时,k+1为0,逆时针方向计算为正。 阅读全文
posted @ 2011-03-28 17:09 CoderZhuang 阅读(830) 评论(0) 推荐(0)
摘要:http://poj.org/problem?id=1264这题很看郁闷,看了很久才明白是什么意思。大致就是有数个国家,每个国家有数个房子,房子相互连接组成的最小周长的多边形为该国家领土,当输入-1时国家输入完毕,接下来是多个炸弹的降落地点。国家的个数最多为20,炸弹可以无限个。若炸弹在某个国家的领土内爆炸(包括边),则可看成该国领土所有面积被炸(当然原文不是这样说),求所有被炸的面积。思路其实很明了,求出每个国家的凸包,若炸弹在凸包内,则计算所有这样凸包面积的和。要注意可能多个炸弹在落在同一个国家内,这时候只要算一个即可。判断点在多边形内的算法有很多种,这里用到的是外积法:设待判断的点为p, 阅读全文
posted @ 2011-03-28 16:59 CoderZhuang 阅读(461) 评论(0) 推荐(0)