首页 > 其他 > 详细

[模板] 计算几何

时间:2018-12-14 22:12:11      阅读:170      评论:0      收藏:0      [点我收藏+]

基本

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);
}

直线交点

[模板] 计算几何

原文:https://www.cnblogs.com/ubospica/p/10121673.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!