[模板] 计算几何

Posted ubospica

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[模板] 计算几何相关的知识,希望对你有一定的参考价值。

基本

typedef double db;
const db eps=1e-8;

int dcmp(db x){return fabs(x)<eps?0:(x<0?-1:1);}

// 2D Point && Vector
struct tp{
    db x,y;
    tp(){}
    tp(db xx,db yy):x(xx),y(yy){}
    tp(tp a,tp b):x(b.x-a.x),y(b.y-a.y){}
};

// Segment
struct tseg{
    tp p1,p2;
    db k;
    tseg(){}
    tseg(tp aa,tp bb):p1(aa),p2(bb){
//      k=(aa.y-bb.y)/(aa.x-bb.x);
    }
};

算法

向量相关

db cross(tp a,tp b){return b.y*a.x-b.x*a.y;} //2D

判断线段相交

快速排斥 + 跨立实验

bool difside(tseg a,tseg b){ //b is on 2 sides of a
    tp v21(a.p2,a.p1),v23(a.p2,b.p1),v24(a.p2,b.p2);
    return cross(v21,v23)*cross(v21,v24)<=0;
}
bool isintersect(tseg a,tseg b){
    return difside(a,b)&&difside(b,a);
}

直线交点

以上是关于[模板] 计算几何的主要内容,如果未能解决你的问题,请参考以下文章

计算几何 点积叉积 点类模板

计算几何模板

3维计算几何模板

计算几何模板

LA 3263 好看的一笔画 欧拉几何+计算几何模板

P2742 [USACO5.1]圈奶牛Fencing the Cows /模板二维凸包(计算几何)(凸包)