正规的做法是找切点。三角形三个顶点分别对圆作切线,然后求切点(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. 如何设置WordPress文章特色图像(Featured Image)

    WordPress的特色图像(Featured Image)是一个很方便的功能,过去为了给每篇文章设置一个缩略图,我们需要用脚本去匹配文章中的第一张或者最后一张图片,或者通过附件方式获取图片,有了特色 ...

  2. hdu5756

    http://www.cnblogs.com/duoxiao/p/5777644.html 官方题解在这里 其实这道题不难,当初训练的时候不会做说明自己太弱 lazy标记不pushdown就是用laz ...

  3. es6 map数据类型,要比set还很多

    首先它支持多数据存储,具有增删查功能 set()设置 get()获取; has()查找; delete('obj')删除指定:clear()全部删除 size长度 let json={ name:&q ...

  4. python全局变量被覆盖的问题

    下面的情况,foo全局变量会被局部变量覆盖掉,这样在其它地方使用的值就是空值. g_foo = '' #全局变量 def set(): g_foo = 'abc' # 给全局变量赋值 def use_ ...

  5. Python开发基础-Day6-函数参数、嵌套、返回值、对象、命名空间和作用域

    函数的使用原则 函数的使用必须遵循:先定义后使用的原则 函数的定义,与变量的定义是相似的,如果没有事先定义函数而直接引用就相当于在引用一个不存在变量名 定义阶段:只检测语法,不执行代码,当出现语法错误 ...

  6. Linux下屏幕截图

    Ubuntu使用教程——截屏 http://www.linuxidc.com/Linux/2014-02/96827.htm Ubuntu下使用(xfce截屏)及GNOME下一个好用的截屏工具 htt ...

  7. 【DFS】Anniversary Cake

    [poj1020]Anniversary Cake Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17203   Accep ...

  8. BZOJ 2212 [Poi2011]Tree Rotations(线段树合并)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2212 [题目大意] 给出一棵二叉树,每个叶节点上有一个权值,现在可以任意交换左右儿子, ...

  9. 浙南联合训练赛 D - Broken Clock

    You are given a broken clock. You know, that it is supposed to show time in 12- or 24-hours HH:MM fo ...

  10. BUG:php7.1 访问yii数据库 自动加端口3306 报错

    跟新完php7.1后访问yii项目出现下图错误 可见数据库链接是已经制指定了端口号9004 但是访问时后续自动加上了3306 原因:换了方式 //这种方式只支持5.6版本php 'db' => ...