POJ 1375 Intervals | 解析几何
2017-12-09 15:19
323 查看
参考了这个博客
#include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; struct point { double x,y; point(){}; point(double _x,double _y) { x=_x,y=_y; } }p,q; struct range { double l,r; bool operator <(const range &a) const { return l<a.l; } }line[505]; double dist(point a,point b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } double r; int n,t; int main() { while (scanf("%d",&n)!=EOF && n) { scanf("%lf%lf",&p.x,&p.y); for (int i=1;i<=n;i++) { scanf("%lf%lf%lf",&q.x,&q.y,&r); double d=dist(p,q); double a=asin(r/d),b=asin((p.x-q.x)/d); // printf("a:%lf b:%lf\n",a,b); line[i].r=p.x-p.y*tan(b-a); line[i].l=p.x-p.y*tan(a+b); // printf("%d : %lf~%lf\n",i,p.y*tan(b-a),p.y*tan(b+a)); } sort(line+1,line+1+n); double L=line[1].l,R=line[1].r; for (int i=2;i<=n;i++) { if (line[i].l>R) { printf("%.2f %.2f\n",L,R); L=line[i].l,R=line[i].r; } else R=max(R,line[i].r); } printf("%.2f %.2f\n\n",L,R); } return 0; }
相关文章推荐
- POJ 1375 Intervals 解析几何 求圆的切线
- POJ 1375 Intervals
- POJ 1269(计算几何初步——简单处理解析几何,求直线交点)
- poj1799---解析几何
- POJ 1375 Intervals【过定点做圆的切线】
- POJ1375-Intervals
- zoj 1309 || poj 1375 Intervals
- [计算几何]POJ 1375 点对圆的切线+线段重叠
- poj 1375 Intervals(圆外一点到圆的切点)
- POJ 1375 Intervals
- poj 1375 Intervals
- poj 1375 Intervals 圆的切线
- POJ1329 Circle Through Three Points(解析几何,圆)
- poj 1375 Intervals(计算圆的切线)
- [复数 解析几何 || 随机化] Ural 1046 Geometrical Dreams & POJ 2600 Geometrical dreams
- POJ 1375 Intervals 笔记
- POJ 1375 Intervals(解析几何)
- POJ 1375 Intervals
- poj1329 解析几何-三角形求外接圆
- 计算几何基础与一般模板:POJ 3675&&ZOJ 1450&&POJ 1375