正规的做法是找切点。三角形三个顶点分别对圆作切线,然后求切点(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. K8s的内部Pod之间都不通,搞了快两天

    试了不亚于二十种方法,绝望的时候,回到了家. 想手工安装,又遇到flannel在手工下,会更改docker启动项的不完善. cni,或许就是k8s的大方向吧. 最后,抱着试一试的态度,将flannel ...

  2. Apache配置基于端口号的虚拟主机 Apache virtual host configuration is based on the port

    有可能只有一个ip出口,但却有多个项目,那么就需要基于端口号架设虚拟主机. Step 1: 检查是否开启 httpd-vhosts.conf apache/conf/httpd.conf文件 # Vi ...

  3. Vue.js—组件快速入门及Vue路由实例应用

    上次我们学习了Vue.js的基础,并且通过综合的小实例进一步的熟悉了Vue.js的基础应用.今天我们就继续讲讲Vue.js的组件,更加深入的了解Vue,js的使用.首先我们先了解一下什么是Vue.js ...

  4. SSH Secure File Transfer上传文件错误:encountered 1 errors during the transfer解决办法

    在使用SSH 工具向Linux服务器上传文件时,弹出 encountered 1 errors during the transfer 错误. 解决方案: 1.准备上传的那个文件所在目录路径存在(), ...

  5. ubuntu下基于Anaconda使用Tensorflow

    为了在ubuntu下利用Anaconda使用tensorflow,但在利用conda安装tensorflow,不能在终端,spyder和notebook中直接使用,需要我们进行一定的配置. 1.安装A ...

  6. PAT L3-005. 垃圾箱分布

    最短路. 枚举垃圾箱放哪里,然后算最短路. #include<map> #include<set> #include<ctime> #include<cmat ...

  7. Loj#6432「PKUSC2018」真实排名(二分查找+组合数)

    题面 Loj 题解 普通的暴力是直接枚举改或者不改,最后在判断最后对哪些点有贡献. 而这种方法是很难优化的.所以考虑在排序之后线性处理.首先先假设没有重复的元素 struct Node { int p ...

  8. 分享Kali Linux 2017年第31周镜像文件

     分享Kali Linux 2017年第31周镜像文件  Kali Linux官方于7月30日发布2017年的第31周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KD ...

  9. noip 1999 回文数

    题目描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数 ...

  10. JZYZOJ1369 [coci2012]覆盖字符串 AC自动机

    http://172.20.6.3/Problem_Show.asp?id=1369 trie树如果不优化就这么往里面放这么多单词肯定超空间+超时,所以需要去掉无用的字符串(不属于原字符串的),但是一 ...