计算几何
思考熊
这个作者很懒,什么都没留下…
展开
-
2016多校联赛 HDU 5858 Hard problem
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5858 题意:求阴影部分面积#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;#define PI acos(-1.0)int main(){原创 2016-08-18 19:56:28 · 459 阅读 · 0 评论 -
浮点几何函数库
#include <math.h>#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)struct point{double x,y;};struct line{point a,b;};//计算cross product (P1-P0)x(P2-P0)double xmult(point p1,point p2,point p0){原创 2016-08-23 12:03:26 · 440 阅读 · 0 评论 -
三维几何函数库
#include <math.h>#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)struct point3{double x,y,z;};struct line3{point3 a,b;};struct plane3{point3 a,b,c;};//计算cross product U x Vpoint3 xmult(poin原创 2016-08-23 12:05:05 · 2382 阅读 · 1 评论 -
整数几何函数库
//注意某些情况下整数运算会出界!#define sign(a) ((a)>0?1:(((a)<0?-1:0)))struct point{int x,y;};struct line{point a,b;};//计算cross product (P1-P0)x(P2-P0)int xmult(point p1,point p2,point p0){ return (p1.x-p0.x原创 2016-08-23 12:06:30 · 345 阅读 · 0 评论 -
圆
#include <math.h>#define eps 1e-8struct point{double x,y;};double xmult(point p1,point p2,point p0){ return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);}double distance(point p1,point p2){原创 2016-08-23 12:07:51 · 233 阅读 · 0 评论 -
网格
#define abs(x) ((x)>0?(x):-(x))struct point{int x,y;};int gcd(int a,int b){ return b?gcd(b,a%b):a;}//多边形上的网格点个数int grid_onedge(int n,point* p){ int i,ret=0; for (i=0;i<n;i++) ret原创 2016-08-23 12:09:29 · 286 阅读 · 0 评论 -
凸包
#include <stdlib.h>#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)*原创 2016-08-23 12:10:31 · 223 阅读 · 0 评论 -
三角形各元素判断
#include <math.h>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-p2.y)*(p1.y-p2.y));}point intersection(line u,lin原创 2016-08-23 12:13:44 · 401 阅读 · 0 评论 -
球面
#include <math.h>const double pi=acos(-1);//计算圆心角lat表示纬度,-90<=w<=90,lng表示经度//返回两点所在大圆劣弧对应圆心角,0<=angle<=pidouble angle(double lng1,double lat1,double lng2,double lat2){ double dlng=fabs(lng1-lng2原创 2016-08-23 12:14:53 · 596 阅读 · 0 评论 -
求三角形面积三种方式
#include <math.h>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.y)-(p2.x-p0.x)*(p1.y-p0.y);}double xmult(double原创 2016-08-23 12:16:17 · 2445 阅读 · 0 评论 -
HDU 5120 Intersection(2014亚洲区北京站现场赛)
圆环相交面积,模板题#include <iostream>#include <cmath>#include<cstdio>using namespace std;const double pi=acos(-1.0);const double eps=1e-10;struct point{ double x,y;};struct circle{ point cent原创 2016-10-03 19:03:50 · 285 阅读 · 0 评论 -
多边形切割模板
//多边形切割//可用于半平面交#define MAXN 100#define eps 1e-8#define zero(x) (((x)>0?(x):-(x))<eps)struct point{double x,y;};double xmult(point p1,point p2,point p0){ return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p原创 2016-08-23 12:02:14 · 390 阅读 · 0 评论 -
多边形判断模板
#include <stdlib.h>#include <math.h>#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;原创 2016-08-23 11:58:32 · 312 阅读 · 0 评论 -
凸包求面数和表面积
面数#include<stdio.h>#include<math.h>#include<algorithm>#define eps 1e-7#define MAXV 305using namespace std;struct pt{ double x, y, z; pt() {} pt(double _x, double _y, double _z): x(_x原创 2016-08-21 18:57:32 · 560 阅读 · 0 评论 -
求圆和多边形的面积交
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>#include <iostream>#include <ctime>using namespace std;#define M 30#define eps 1e-7const double PI = a原创 2016-08-22 15:59:24 · 1258 阅读 · 0 评论 -
求圆面积并
#include<stdio.h>#include<math.h>#include<algorithm>using namespace std;//(坐标、半径为-10000..10000)const int chash=12343;const double zero=1e-8;int n,nodes;double pi;const int nSIZE=1010;double x原创 2016-08-22 16:01:22 · 619 阅读 · 0 评论 -
旋卡求凸包直径
#include <iostream>#include <algorithm>using namespace std;const int maxn = 50005;struct point{ int x,y; bool operator<(const point a)const { return y < a.y ||(y == a.y && x <原创 2016-08-22 16:03:19 · 304 阅读 · 0 评论 -
求包含点集的最小正方形个数。
把枚举数量减少下来,这里用到逼近迭代,就是先m分枚举范围,从中找到最小的,然后再在那个区间m分,这样迭代下去。#include <iostream>#include <math.h>using namespace std;const int MAX = 305;const double PI = asin(1.0) * 2;const double EPS = 1e-6;int n;d原创 2016-08-22 16:07:25 · 663 阅读 · 0 评论 -
POJ-2208 Pyramids (Northeastern Europe 2002)
题目链接:http://poj.org/problem?id=2208 四面体体积计算: 四面体ABCD的体积是V,AB=a,AC=b,AD=c,CD=p,DB=q,BC=r, 设P1=(ap)2(–a2+b2+c2–p2+q2+r2), P2=(bq)2(a2–b2+c2+p2–q2+r2), P3=(cr)2(a2+b2–c2+p2+q2–r2), P=(abr)2+(acq)2+(原创 2016-08-22 16:12:33 · 339 阅读 · 0 评论 -
半平面的核
【题意】给出很多个半平面,这里每个半平面由线段组成,都是指向线段方向的左边表示有 (x1 - x) * (y2 - y) - (x2 - x) * (y1 - y) >=0 ( >=0 表示左边,<=0 表示右边) 要你求个半平面的核,就是所有半平面所围成的面积 【算法】O(nlogn)的半平面交算法,最后统计出得到的多边形的点,然后利用叉积公式求出面积就行了#include<cstdio>原创 2016-08-22 16:17:16 · 228 阅读 · 0 评论 -
三维矩阵旋转
#include <iostream>#include <cmath>using namespace std;const double PI = acos(-1.0);const double eps = 1e-16;struct point3{ double x,y,z; point3(double a,double b,double c) {原创 2016-08-22 16:20:59 · 444 阅读 · 0 评论 -
POJ-1931 Biometrics
题目链接:http://poj.org/problem?id=1931判断两个多边形是否相似多边形相似充要条件:多边形A的任何两点之间长度,与多边形B对应的两个点长度比值都相等注意一下顺时针和逆时针,还有数值的范围*/#include <math.h>#include <stdio.h>#define eps 1e-6#define sqr(x) ((x) * (x))#define s原创 2016-08-22 16:23:35 · 293 阅读 · 0 评论 -
计算几何公式总结
一.注意 1. 注意舍入方式(0.5的舍入方向);防止输出-0. 2. 几何题注意多测试不对称数据. 3. 整数几何注意xmult和dmult是否会出界; 符点几何注意eps的使用. 4. 避免使用斜率;注意除数是否会为0. 5. 公式一定要化简后再代入. 6. 判断同一个2*PI域内 两角度差应该是 abs(a1-a2)<beta||abs(a1-a2)>原创 2016-08-23 11:56:25 · 1565 阅读 · 0 评论 -
HDU 5128 The E-pang Palace(2014亚洲区广州站现场赛)
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5128#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<string>#include<algorithm>#include<queue>#include<stack>#incl原创 2016-10-04 16:35:15 · 365 阅读 · 0 评论