[模板] 计算几何
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);
}
直线交点
以上是关于[模板] 计算几何的主要内容,如果未能解决你的问题,请参考以下文章