正规的做法是找切点。三角形三个顶点分别对圆作切线,然后求切点(2个)。两圆之间也要求切点(4个)。

扯淡了这就。。麻烦的要命。。

下面是写了一半的代码。。

void process_circle(point p, point o, double r, point &intersect1, point &intersect2)
{
    point vec;
    vec = o - p;
    double angle = asin(r*1.0 / sqrt(dist(p, o)));
    double scale = sqrt(1 - r*r / dist(p, o));
    intersect1 = Rotate(vec, -angle, scale) + p;
    intersect2 = Rotate(vec, angle, scale) + p;
    return;
}

void process_two_circles(point o1, point o2, double r1, double r2, point &intersect1, point &intersect2, point &intersect3, point &intersect4)
{
    point vec = o2 - o1;
    double angle = asin(fabs(r2 - r1) / sqrt(dist(o2, o1)));
    intersect1 = Rotate(o1, angle + (pi / 2), sqrt(dist(o2, o1)) / r1);
    intersect2 = Rotate(o1, -angle - (pi / 2), sqrt(dist(o2, o1)) / r1);
    point vec2 = o1 - o2;
}

当然了,可以水过它,把圆离散化成点,构成1000边形,然后注意,周长不要直接两点的距离,最好还是采用它们之间围成的那段弧的长度来计算。不难得到如下代码,但是我实在找不到错误在哪里了。。

e-
?(x):-(x))<eps)

+ ], convex[number_of_devision *  + ];

?  : -) : (ret >  ?  : -);
}
;
    ], i = ; i<n; p2.x += p[i].x, p2.y += p[i].y, i++)
        ], p[] = p1;
    qsort(p + , n - , ] = p[], ch[] = p[], ch[] = p[], s = i = ; i < n; ch[s++] = p[i++])
         && xmult(ch[s - ], p[i], ch[s - ]) < -eps; s--);
}

;
    ;
    ;
    ;
    ;
}

; i < n; i++)
        ) != ) p[k++] = p[i];
    , ){
    point* temp = ] = temp[], n = , i = (dir ?  : (s - )); dir ? (i < s) : i; i += (dir ?  : -))
        ], temp[i], temp[(i + )%s])))
            convex[n++] = temp[i];
     && m == )
        {
             * pi * r << endl;
            ;
        ; i < n; i++)
        {
             * pi / (number_of_devision);
            ; angle <= pi * ; angle += step)
            {
                p[counts].x = x + r * cos(angle);
                p[counts].y = y + r * sin(angle);
                p[counts].r = r;
                p[counts++].flag = ; i < m; i++)
        {
            , p[counts].flag = , p[counts].flag = , p[counts].flag = , p, convex, );
        ;
        ; i < size_of_convex; i++)
        {
            ].flag)
            {
                dis += ( * pi * convex[i].r) / number_of_devision;
                ]);
            ], convex[size_of_convex - ]);
        cout << fixed << setprecision() << dis << endl;
    }
}

HDU4667(有错)的更多相关文章

  1. Windows 7上执行Cake 报错原因是Powershell 版本问题

    在Windows 7 SP1 电脑上执行Cake的的例子 http://cakebuild.net/docs/tutorials/getting-started ,运行./Build.ps1 报下面的 ...

  2. 关于VS2015 ASP.NET MVC添加控制器的时候报错

    调试环境:VS2015 数据库Mysql  WIN10 在调试过程中出现类似下两图的同学们,注意啦. 其实也是在学习的过程中遇到这个问题的,找了很多资料都没有正面的解决添加控制器的时候报错的问题,还是 ...

  3. php报错 ----> Call to undefined function imagecreatetruecolor()

    刚才在写验证码的时候,发现报错,然后排查分析了一下,原来是所用的php版本(PHP/5.3.13)没有开启此扩展功能. 进入php.ini 找到extension=php_gd2.dll ,将其前面的 ...

  4. scp报错 -bash: scp: command not found

    环境:RHEL6.5 使用scp命令报错: [root@oradb23 media]# scp /etc/hosts oradb24:/etc/ -bash: scp: command not fou ...

  5. VS2015使用scanf报错的解决方案

    1.在程序最前面加: #define _CRT_SECURE_NO_DEPRECATE 2.在程序最前面加: #pragma warning(disable:4996) 3.把scanf改为scanf ...

  6. VS项目中使用Nuget还原包后编译生产还一直报错?

    Nuget官网下载Nuget项目包的命令地址:https://www.nuget.org/packages 今天就遇到一个比较奇葩的问题,折腾了很久终于搞定了: 问题是这样的:我的解决方案原本是好好的 ...

  7. Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误——SHH框架

    SHH框架工程,Tomcat启动报错org.springframework.web.context.ContextLoaderListener类配置错误 1.查看配置文件web.xml中是否配置.or ...

  8. mount报错: you must specify the filesystem type

    在linux mount /dev/vdb 到 /home 分区时报错: # mount /dev/vdb /homemount: you must specify the filesystem ty ...

  9. Android——eclipse下运行android项目报错 Conversion to Dalvik format failed with error 1解决

    在eclipse中导入android项目,项目正常没有任何错误,但是运行时候会报错,(clean什么的都没用了.....)如图: 百度大神大多说是jdk的问题,解决: 右键项目-Properties如 ...

随机推荐

  1. Matlab处理数据导出Paraview可读的vtk文件(二)

    由于我在用SPH方法仿真时用的是FORTRAN语言,并且没有找到直接输出vtk文件的代码,因此偷懒通过MATLAB转换一下数据. 用到的Matlab子程序可通过一下链接找到. Matlab处理数据导出 ...

  2. 【ASP.NET MVC】HTML5+MVC上传文件显示进度

    head> <title>Index</title> <style type="text/css"> #statusBorder { po ...

  3. 【转】Django中的cookie与session

    转自:https://www.cnblogs.com/chenchao1990/p/5283725.html cookie与session的实现原理 HTTP被设计为”无状态”,每次请求都处于相同的空 ...

  4. centos xampp 隐藏phpmyadmin地址

    /opt/lampp/etc/extra/httpd-xampp.conf Alias /phpmyadmin "/opt/xampp/phpMyAdmin/" 改为 Alias ...

  5. servlet 的控制缓存时间和response的重定向

    //控制缓存时间 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletE ...

  6. Linux下python版本的升级步骤

    1.先下载,你要升级的python版本(我升级的是python3.3.0) 可使用系统自带下载工具wget下载: wget http://www.python.org/ftp/python/3.3.0 ...

  7. 洛谷P3038 牧草种植 [树链剖分]

    题目传送门 牧草种植 题目描述 Farmer John has N barren pastures (2 <= N <= 100,000) connected by N-1 bidirec ...

  8. 使用0填充string(构造类似‘00001’的字符串)

    今天在对视频进行爬取的时候,发现url最后是000001,然后是000002,依次增加,而且每一个url请求只能得到一个分段了的视频,这种情况下构造url就成了一个问题. python有一个函数可以处 ...

  9. 2017 Hackatari Codeathon B. 2Trees(深搜)(想法)

    B. 2Trees time limit per test 0.75 seconds memory limit per test 256 megabytes input standard input ...

  10. NetworkManager概述

    NetworkManager服务是管理和监控网络设置的守护进程,CentOS7更加注重使用NetworkManager服务来实现网络的配置和管理,CentOS7以前是通过network服务管理网络,以 ...