
计算几何学
文章平均质量分 74
zhengnanlee
这个作者很懒,什么都没留下…
展开
-
HDU4667(有错)
正规的做法是找切点。三角形三个顶点分别对圆作切线,然后求切点(2个)。两圆之间也要求切点(4个)。扯淡了这就。。麻烦的要命。。下面是写了一半的代码。。void process_circle(point p, point o, double r, point &intersect1, point &intersect2){ point原创 2013-08-15 13:48:11 · 1270 阅读 · 0 评论 -
Computational Geometry Template_Fundamental Rules
#include #include #define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)#define pi acos(-1.0)struct point{ double x,y;};struct line{ point a,b;};struct point3{ double x,y,原创 2013-07-16 13:44:03 · 1037 阅读 · 0 评论 -
HDU1086
http://acm.hdu.edu.cn/showproblem.php?pid=1086判断是否相交,可看一条线段的两个端点是否在另一条直线的两侧,如下图:在数学中,向量的点乘,大小等于其模的成绩再乘以家教的正弦值,方向符合右旋法则(右手系),意义是其表示的平行四边形的面积。如果两个点在一条线的同一侧,如图,那么他们的点乘积应大于0,或程序中的大于eps(精度Eps原创 2013-07-16 14:54:24 · 1770 阅读 · 0 评论 -
平面几何常用定理、结论总结 第〇篇 基本定义、性质
1. 点在平面直角坐标系里表示为x坐标和y坐标,空间直角坐标系里表示为x坐标、y坐标和z坐标2. 两点确定一条直线,三点确定一个平面3. 向量点积、叉积、混合积点乘积在直角系(基向量)中表示为:另,叉乘积在直角系(基向量)中表示为:其表示为两向量所围成的平行四边形的体积另,混合积在直角系(基向量)中表示为:(不共面)原创 2013-07-17 00:24:28 · 4003 阅读 · 0 评论 -
平面几何常用定理、结论总结 第一篇 三角形及其引线、引圆
1. 勾股定理(毕达哥拉斯定理)2. 射影定理(欧几里得定理)在Rt△ABC中,∠ACB=90°,cd是斜边ab上的高,则有射影定理如下:①CD2=AD·DB②BC2=BD·BA③AC2=AD·AB④AC·BC=AB·CD(等积式,可用面积来证明)3. 三角形的三条中线交于一点,并且,各中线被这个点分成2:1的两部分4. 四边形两边中心的连线和两条对角线中心的连线交于一点原创 2013-07-17 00:29:33 · 14999 阅读 · 0 评论 -
平面几何常用定理、结论总结 第二篇 微分几何
1. 简单曲线段在三维空间是一一的,可用参数式表达如圆柱螺线:2. Ck类曲线定义为向量函数k阶连续可微,k=1时称其为光滑曲线3. 求曲线在某点法平面方程,可求偏导:求曲线在某点切线方程,可求偏导:4. 求曲线在从a到t一段上的弧长,可做如下积分:5. 若两向量平行,则其叉乘积为零,若两向量垂直,则其点乘积为零6. 曲线(C)在原创 2013-07-17 01:25:12 · 4129 阅读 · 0 评论 -
poj1265
Pick定理:一个计算点阵中顶点在格点上的多边形面积公式:S=a+b÷2-1,其中a表示多边形内部的点数,b表示多边形边界上的点数,s表示多边形的面积。如图:图中是样例二。题目要求输出边界格点个数、内部格点个数、其面积。已知一条直线,如图中(5,0)到(6,3)这条直线,经过的整点数是2,可通过如下公式计算:格点数 = gcd(abs(x2-x1),abs(y2-y1))前原创 2013-07-24 19:11:01 · 1992 阅读 · 0 评论 -
poj2318 poj2398
http://poj.org/problem?id=2318题意不难理解,如图,我的代码是以线段作为最基本单位。其实一开始时写的代码是有一个四边形的概念的,如果点在四边形内,点和左边界的点乘积再乘以点和右边界的点乘积是负的,如图:但是这样太慢,而且,原题目给出的是排好序的格子序列,如图:所以可以二分查找,故有如下代码:#include #include #inc原创 2013-07-24 19:27:00 · 1439 阅读 · 0 评论 -
poj1269
基础题,直线间关系#include #include #include #define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)#define pi acos(-1.0)struct point{ double x, y;};struct line{ point a, b;};struct point原创 2013-07-26 20:54:05 · 1248 阅读 · 0 评论 -
UVa11187
莫勒定理,证明如下:原创 2013-07-14 09:17:55 · 1681 阅读 · 0 评论 -
第四届省赛A题
http://acm.upc.edu.cn/problem.php?id=2217给定逆时针序三角形两点坐标,求第三点坐标我会告诉你我用画图画的么- -#include #include #include using namespace std;#define pi acos(-1.0)int main(){ int n; cin>>n;原创 2013-06-10 23:46:16 · 1210 阅读 · 3 评论 -
poj2653
水题不解释。#include #include #include #include #include using namespace std;#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))struct point{ double x, y;};stru原创 2013-11-12 19:26:48 · 933 阅读 · 0 评论 -
poj2462
看八戒在做这个题,我也做了做。。最后没治了,从网上找了它的全部测试数据,发现过了,然后再提交,就是过不了。我够了!注意这个题,重复点、直线等关键词。还有,判断直线跟线段交点,需要先剪枝,就是判断这个线段端点跟直线端点叉乘是不是小于eps就行了原创 2013-10-31 20:17:19 · 910 阅读 · 0 评论 -
poj2187
凸包求直径(socalled。。)采用Graham+Rotating_Calipers,Graham复杂度nlogn,RC算法复杂度n,所以时间复杂度不会很高。学习RC算法,可到http://cgm.cs.mcgill.ca/~orm/rotcal.frame.html。另:http://www.cppblog.com/staryjy/archive/2009/11/19/101412原创 2013-07-29 21:33:26 · 1552 阅读 · 0 评论 -
poj3301
参考三分讲解。http://hi.baidu.com/czyuan_acm/item/81b21d1910ea729c99ce33db#include #include #include #include using namespace std;#define pi acos(-1.0)#define eps 1e-8#define原创 2013-09-28 21:22:47 · 1195 阅读 · 3 评论 -
poj1444
水几何。。#include #include #include #include using namespace std;const int maxint = 0x7FFFFFFF;int ans;void walk(int i, int j, int x0, int y0, int x, int y, int z, int l, i原创 2013-09-28 17:09:42 · 1433 阅读 · 1 评论 -
省赛3J题 Fruit Ninja II
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2416推导过程如下:首先,题意是求切完西瓜后两半中大的。如果不是对半切,那么:其中,半椭球体积易算:而,积分体积推导过程如下:在多元函数积分学中,三重积分是用于计算任意(三元)函数的体积的,但此次不采用三重积分或简化后的原创 2013-05-29 20:21:34 · 1372 阅读 · 2 评论 -
UVa11817
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2917模版,测地线距离和直线距离之差精度问题令人头疼!#include#includeusing namespace std;const double R = 6371009;dou原创 2013-05-31 20:24:15 · 1081 阅读 · 0 评论 -
UVa11646
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2693水题,但是是special judge的第一题#include#includeusing namespace std;int main(){ int a, b, count_原创 2013-05-31 21:02:05 · 892 阅读 · 0 评论 -
poj1410
简单题,注意是实心矩形#include #include #include #define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)#define pi acos(-1.0)struct point{ double x, y;};struct line{ point a, b;};struct point原创 2013-07-26 22:00:02 · 913 阅读 · 0 评论 -
poj1696
寻找逆时针螺旋线最多能连几个点,每次都连最外面的点即可。极角排序。换做max_element可提高效率,但这个题规模太小了,没必要。综合复杂度n^nlog(n)。#include#include#includeusing namespace std;struct Point{ int x, y, num;};Point p[55], res[55];int pos;原创 2013-07-26 23:02:13 · 2491 阅读 · 0 评论 -
poj2420
模拟退火算法,其实不如说随机化变步长的贪心,向四周搜索,如果碰到更小的则把它作为更优解。本题代码中费马点部分可作为模版使用。#include #include #include #define MAX_NUM 128struct point{ double x; double y;};double distance(point p1, point p2){原创 2013-08-01 21:27:47 · 2007 阅读 · 2 评论 -
poj1556
计算几何+最短路最短路是套的模版。。= =毕竟不是自己写的。。模版上的点竟然是从0开始的。难在建图。图中,比如2和12点,其间如果没有任何线段阻挡,那么边权是他们的直线距离,如果有线段阻挡,边权是inf。枚举每两个点,用其组成的线段与其他所有线段判断,如果相交则边权inf,如果不相交距离是其直线距离。#include #include #define eps 1e原创 2013-08-02 15:51:35 · 1533 阅读 · 1 评论 -
poj2966(有问题)
仍然是多边形与线段求交(不规范),然后加最短路。边权:如果相交则inf,如果不相交则其直线距离。不知道为什么错,想出了几个脑残图形,都对了。对应的测试数据:1 0 1 460 01 12 02 41 30 40 0 5 471 05 25 43 41 4-2 2-1 00 0 2 682 04 24 42 60 42 4原创 2013-08-03 09:45:55 · 1330 阅读 · 3 评论 -
poj2007
极角排序,其实是叉乘排序#include #include #include #include using namespace std;#define eps 1e-8struct point{ double x, y;} s;double getangle(point a){ return atan2(a.y, a.x);}double xmult(poi原创 2013-08-03 20:14:47 · 1404 阅读 · 1 评论 -
poj3227
很简单的一个题,判判斜率求求交点就搞定了,可是搞了一上午。。#include #include #include using namespace std;#define eps 1e-8struct point{ double x, y;}p[1010];double dist(point a,原创 2013-08-13 16:16:09 · 1116 阅读 · 0 评论 -
poj3429(有错)
不知道为什么错。。/*************************************************************************> File Name: poj3429.cpp> Author: zhengnanlee> Mail: zhengnanlee@hotmail.com> Created Time: 2013年原创 2013-09-21 10:12:52 · 861 阅读 · 0 评论 -
HDU4741
额有必要写写了~公式啊。两条直线:构造方程:求出公垂线向量:记公垂线和l1形成的平面为alpha,下面求它:令:联立:不难得到如下代码:#include #include #include #include #define eps 1e-8#define zero(x) ((原创 2013-09-21 15:20:45 · 1914 阅读 · 0 评论 -
poj2031
最小生成树。边权=AB圆心距离-A半径-B半径。#include #include #include using namespace std;#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))#define MAXN 200#define inf 1000000000原创 2013-08-12 09:49:57 · 1432 阅读 · 2 评论 -
Computational Geometry Template_Convex Hull
#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)struct point{double x,y;};//计算cross product (P1-P0)x(P2-P0)double xmult(point p1,point p2,point p0){ return (p1.x-p0.x)*(p2.y-p0.原创 2013-08-01 21:18:00 · 888 阅读 · 0 评论 -
poj3348
凸包入门,求多边形面积多边形面积无非就是些三角形的面积之和,然后以起点叉乘积除以二即可。#include #include #include #define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)#define _sign(x) ((x)>eps?1:((x)<-eps?2:0))struct point{in原创 2013-08-01 20:18:18 · 1016 阅读 · 0 评论 -
poj1584
题意:已知一个多边形的n个顶点坐标,然后再给一个钉子,给定钉子的半径和圆心坐标,首先判断多边形是否为凸多边形,若为凸多边形,再判断钉子是否可以放到凸多边形内部。 思路:1.由于顶点给出的顺序可能为逆时针或顺时针,所以在判断是否为凸边形,利用叉积的性质,每个点依次扫描看是否都顺着同一的方向转动。2.判断圆(钉子)是否在多边形内部,第一步判断圆心是否在凸多边形内部(以圆心为定点扫描一周),第二原创 2013-07-29 17:30:11 · 1176 阅读 · 1 评论 -
Computational Geometry Template_Polygon
#include #include #include #define MAXN 1000#define offset 10000#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)#define _sign(x) ((x)>eps?1:((x)<-eps?2:0))struct point{ double x, y; }原创 2013-07-29 17:31:57 · 1002 阅读 · 0 评论 -
poj1113
标准的凸包题目,题目不难理解,就是求走一周的路程。结果等于,凸包周长+一个完整的圆周长。因为走一圈,经过拐点时,所形成的扇形的内角和是360度,故一个完整的圆。坑得的精度,四舍五入!=(int)类型强制转换。。。#include #include #include #include using namespace std;#define pi acos(-1.原创 2013-07-30 21:37:24 · 3347 阅读 · 0 评论 -
poj1066
很好的一道题。题意是,一个正方形围墙内有一些交错的内墙,内墙的端点都在正方形上,在正方形内部有一个点,求从正方形外到这个点的最少要走的门数,门只能是线段的中点。思路很巧妙,因为从一个点到终点不可能“绕过”围墙,只能传过去,所以门是否开在中点是无所谓的,只要求四周线段中点到终点的线段与墙的最少交点个数即可。更进一步,实际上,只需判断四周围墙的所有点与终点的连线与内墙的最少交点加一即可。请看下原创 2013-07-31 16:35:11 · 871 阅读 · 0 评论 -
UVa12304
基础题,注意精度和旋转方向。#include #include #include #include #include using namespace std;#define PI acos(-1.0)#define M 100007#define N 65736const int inf = 0x7f7f7f7f;const int mod = 1000000007原创 2013-07-31 21:27:47 · 1430 阅读 · 0 评论 -
poj1329
三角形外心及外接圆半径三角形三边为 a、b、c半周长 p=(a+b+c)/2三角形面积 S=√[p(p-a)(p-b)(p-c)] (海伦公式)内切圆半径 r = S/p =√[(p-a)(p-b)(p-c)/p] = ½√[(-a+b+c)(a-b+c)(a+b-c)/(a原创 2013-08-01 10:59:05 · 1041 阅读 · 0 评论 -
poj1673
所谓Exocenter就是垂心。不难证明。#include #include #include struct point{ double x, y; };struct line{ point a, b; };double distance(point p1, point p2){ return sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y -原创 2013-08-01 14:29:37 · 1001 阅读 · 0 评论 -
poj2354
计算球面距离,度分秒转换。#include #include #include #define pi acos(-1.0)//计算圆心角lat表示纬度,-90<=w<=90,lng表示经度//返回两点所在大圆劣弧对应圆心角,0<=angle<=pidouble angle(double lng1, double lat1, double lng2, double lat2){原创 2013-08-01 15:01:31 · 1208 阅读 · 0 评论 -
Recent Contest #2(Mar 25-Mar31, 2014)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=43116#overviewH 水题不述。#include using namespace std;bool visit[10005];int main() { int n; while (cin>>n) { memset(visit, 0, sizeof(vis原创 2014-03-31 09:25:44 · 1249 阅读 · 0 评论