• 【计算几何】【圆反演】hdu6097 Mindis


    给你一个中心在原点的圆,再给你俩在圆内且到原点距离相等的点P,Q,让你在圆上求一点D,最小化DP+DQ。

    http://blog.csdn.net/qq_34845082/article/details/77099332

    附:过反演中心的圆反演后变成一条和该圆正交的直线。

    不过反演中心的圆反演后是一个与原圆关于反演中心位似的圆。

    不过反演中心的直线反演后变成一个过反演中心且与其正交的圆。

    #include<cstdio>
    #include<cmath>
    using namespace std;
    const double EPS=0.0000000001;
    struct Point{
        double x,y;
        Point(){}
        Point(const double &x,const double &y){
            this->x=x;
            this->y=y;
        }
        double length(){
            return sqrt(x*x+y*y);
        }
        void read(){
            scanf("%lf%lf",&x,&y);
        }
    }p,q;
    double R;
    typedef Point Vector;
    Vector unit(Vector v){
        double l=v.length();
        return Vector(v.x/l,v.y/l);
    }
    Point CalcMid(const Point &a,const Point &b){
        return Point((a.x+b.x)*0.5,(a.y+b.y)*0.5);
    }
    double sqr(const double &x){
        return x*x;
    }
    Vector operator - (const Point &a,const Point &b){
        return Vector(a.x-b.x,a.y-b.y);
    }
    Vector operator * (const double &K,const Vector &v){
        return Vector(K*v.x,K*v.y);
    }
    int T;
    int main(){
        scanf("%d",&T);
        for(;T;--T){
            scanf("%lf",&R);
            p.read();
            q.read();
            if(fabs(p.x)<EPS && fabs(p.y)<EPS){
                printf("%.10lf
    ",2.0*R);
                continue;
            }
            Point mp=CalcMid(p,q);
            Point P=Point((p-mp).length(),sqrt(sqr(p.length())-sqr((p-mp).length())));
            Point Pp=R*R/P.length()*unit(P);
            if(Pp.y-R>EPS){
                printf("%.10lf
    ",P.length()/R*2.0*(Pp-Point(0.0,R)).length());
            }
            else{
                printf("%.10lf
    ",P.length()/R*2.0*Pp.x);
            }
        }
        return 0;
    }
  • 相关阅读:
    DNS正向反向解析
    varnish-4.0.5的反向代理 缓存测试 负载均衡实验
    DS8700 硬盘更换略
    ftp虚拟用户
    maven mvn 命令行 编译打包
    linux下的springboot项目启动文件
    linux系统安装gcc
    linux系统下安装两个或多个tomcat
    linux系统的磁盘挂载
    常用linux命令
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7376243.html
Copyright © 2020-2023  润新知