计算几何模板
来源:互联网 发布:mac quick time 编辑:程序博客网 时间:2024/06/16 13:17
struct point{//点类 double x,y; point (double i,double j){x=i;y=j;}//普通构造函数 point (const point& p){x=p.x;y=p.y;}//拷贝构造函数 point& operator = (const point& p){//重载= x=p.x;y=p.y; return *this; } point operator - (const point& p){//重载-,b-a => b.-(a) 即线段abreturn point (p.x-x,p.y-y); } point operator + (const point& p){//重载+,计算中点return point ((p.x+x)/2,(p.y+y)/2); } point (){}};struct segment{//线段类 point left,right; segment (point a,point b){left=a;right=b;} segment (){}};double CrossMuti (point a,point b){return a.x*b.y-a.y*b.x;}//叉积/***判断两个线段是否相交,参数为4个端点**0-不相交 1-正常相交 2-端点在线段上 3-重合*/int ab_cross_cd (point a,point b,point c,point d){ if(min_2(a.x,b.x)>max_2(c.x,d.x)||min_2(a.y,b.y)>max_2(c.y,d.y)|| max_2(a.x,b.x)<min_2(c.x,d.x)||max_2(a.y,b.y)<min_2(c.y,d.y) ) return 0; point abVec=b-a,acVec=c-a,adVec=d-a; double x = CrossMuti (abVec,acVec); double y = CrossMuti (abVec,adVec); if(x==0.0&&y==0.0)//重合 return 3; else if (x==y) return 0;//不相交 else{ point cdVec=d-c,caVec=a-c,cbVec=b-c; x*=y; y=CrossMuti (cdVec,caVec)*CrossMuti (cdVec,cbVec); if (x<0 && y<0) return 1; else if ((x==0&&y<=0)||(y==0&&x<=0)) return 2; else return 0; }}
0 0
- [模板]计算几何模板
- 经典计算几何模板
- 计算几何模板2
- 计算几何 模板
- 计算几何模板
- 计算几何经典模板
- 计算几何模板
- ACM计算几何模板
- 计算几何模板
- 计算几何模板
- 计算几何模板
- 计算几何 模板
- 计算几何初步模板
- 计算几何三维模板
- 二维计算几何模板
- 计算几何模板
- 计算几何模板
- 计算几何的模板
- AndroidAnnotations库的使用
- GIT仓库恢复
- Makefile -fPIC 选项
- hdu 1717 小数化分数2
- STL LIST链表的使用 C++
- 计算几何模板
- hdu3076ssworld VS DDD 概率dp
- HDU 1143
- Android Application详解
- 笨鸟先飞之Java(一)--使用struts2框架实现文件上传
- NOI 97 积木游戏
- 二叉搜索树【BST】c++实现
- 集合容器对比
- 同一进程下线程共享的数据和独有的数据