zoukankan      html  css  js  c++  java
  • zoj 1199 Point of Intersection 求两个圆公切线的交点

    题目来源:

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=199

    分析:

    两个圆,不存在交点的情况。

    1)在 半径相同的情况下, 两条公切线 是平行的, 不存在交点。

    2)当一个圆在另一个圆内时, 不存在交点。

    当存在交点时, 计算 交点的坐标。 我们用三角形的相似,计算出x,y 值。

    x  =  (p2.x * r1 - p1.x * r2 ) / (r1 - r2) ,

    y =  (p2.y * r1 - p1.y * r2) / (r1 - r2)) 

    代码如下:

    double add(double a, double b){
        return (fabs(a+b) < EPS * (fabs(a) + fabs(b))) ? 0 : (a + b) ;
    }
    struct Point{
        double x, y ;
        Point(){}
        Point(double x, double y):x(x),y(y){}
    
    } ;
    double dist(Point a, Point b){
        return sqrt(add( (a.x - b.x)*(a.x - b.x) ,(a.y - b.y)*(a.y - b.y) )) ;
    }
    double r1 ,r2 ;
    Point p1, p2;
    bool is_insection(){
        if(r1 == r2)
            return 0 ;
        if(dist(p1, p2) <= fabs(r1 - r2))
            return 0 ;
        return 1;
    }
    Point tangle_p(){
        return Point((p2.x * r1 - p1.x * r2 ) / (r1 - r2) , (p2.y * r1 - p1.y * r2) / (r1 - r2)) ;
    }
    int main()
    {
        int t;
        cin>>t;
        while(t--){
            scanf("%lf%lf%lf%lf%lf%lf", &p1.x , &p1.y,  &r1 ,&p2.x , &p2.y , &r2) ;
            if(is_insection()){
                Point p = tangle_p();
                printf("%.2lf %.2lf
    " , p.x , p.y) ;
            }
            else printf("Impossible.
    ");
        }
    }
  • 相关阅读:
    MySQL5.7(64位)windows下的安装
    Python---更改pip源
    .NET WEB技术小记
    前端板书1
    Hadoop伪分布式系统的搭建(ubuntu)
    Hive的基本操作
    SQLServer2008附加数据库不成功 操作系统错误5
    VUE学习小结
    jQuery入门基础(选择器)
    Linq(高级查询)
  • 原文地址:https://www.cnblogs.com/zn505119020/p/3713333.html
Copyright © 2011-2022 走看看