计算几何模板
来源:互联网 发布:labtool48uxp软件下载 编辑:程序博客网 时间:2024/05/17 09:24
求两个圆的交点(模板)
模板代码:
bool intersection(const Point& o1, double r1, const Point& o2, double r2, Point& p1, Point& p2){double d = dis(o1, o2);if(d < fabs(r1 - r2) - eps || d > r1 + r2 + eps) {return false;}double cosa = (sqr(r1) + sqr(d) - sqr(r2)) / (2 * r1 * d);double sina = sqrt(max(0., 1. - sqr(cosa)));p1 = p2 = o1;p1.x += r1 / d * ((o2.x - o1.x) * cosa + (o2.y - o1.y) * -sina);p1.y += r1 / d * ((o2.x - o1.x) * sina + (o2.y - o1.y) * cosa);p2.x += r1 / d * ((o2.x - o1.x) * cosa + (o2.y - o1.y) * sina);p2.y += r1 / d * ((o2.x - o1.x) * -sina + (o2.y - o1.y) * cosa);//printf("%lf %lf %lf %lf\n",p1.x,p1.y,p2.x,p2.y);return true;}
点到直线的距离模板:
double fun1(double ax,double ay,double bx,double by,double x,double y){ if(ax==bx) return fabs(x-ax);//x坐标相等,及斜率不存在。 double k=(ay-by)/(ax-bx);//斜率。 double b=ay-k*ax; //所求直线方程是:y=k*x+b; double n=fabs(k*x+b-y); return n/sqrt(k*k+1);}
判断两个线段是否相交:
struct Point{ double x,y;};double Min(double a,double b){ return a>b?b:a;}double Max(double a,double b){ return a>b?a:b;}double Multi(Point p1, Point p2, Point p3){ return (p1.x-p3.x)*(p2.y-p3.y)-(p2.x-p3.x)*(p1.y-p3.y);}bool fun(Point a1, Point a2, Point b1, Point b2)//判断两条线段是否相交(含顶点){ if (Min(a1.x, a2.x) <= Max(b1.x, b2.x) && Min(a1.y, a2.y) <= Max(b1.y, b2.y) && Min(b1.x, b2.x) <= Max(a1.x, a2.x) && Min(b1.y, b2.y) <= Max(a1.y, a2.y) && Multi(a1, a2, b1) * Multi(a1, a2, b2) <= 0 && Multi(b1, b2, a1) * Multi(b1, b2, a2) <= 0 ) return true;//说明两线段之间相交 return false;}
判断点是在矩形内
bool Inrectangle(int i)//判断点是否在矩形的内部 seg为点,rec为矩形对角点坐标。{ if (seg[i].x > Max(rec[1].x, rec[3].x)) return false; if (seg[i].y > Max(rec[1].y, rec[3].y)) return false; if (seg[i].x < Min(rec[1].x, rec[3].x)) return false; if (seg[i].y < Min(rec[1].y, rec[3].y)) return false; return true;}
- [模板]计算几何模板
- 经典计算几何模板
- 计算几何模板2
- 计算几何 模板
- 计算几何模板
- 计算几何经典模板
- 计算几何模板
- ACM计算几何模板
- 计算几何模板
- 计算几何模板
- 计算几何模板
- 计算几何 模板
- 计算几何初步模板
- 计算几何三维模板
- 二维计算几何模板
- 计算几何模板
- 计算几何模板
- 计算几何的模板
- Android应用升级构想和要点总结
- Visual C++ 回调函数示例
- MFC 修改控件的属性
- android学习笔记
- WinSocket编程
- 计算几何模板
- <%@ include file=""%>与<jsp:include page=""/>区别
- C++ fstream文件流读写文件操作详解
- reverse对数字和字符串的倒置
- 在自定义对话框中显示Gallery的效果实现
- golang源码安装
- Android ROM分析(1):刷机原理及方法
- python list的简单命令
- 初始化56个民族下拉框