给定三角形,求三个两两相切且与三角形的一条边相切的圆的半径。

二分一个半径,可以得出另外两个半径,需要推一推公式(太久了,我忘记了)

#include<cstdio>
#include<cmath>
#define eps (1e-8)
#define sqr(a) (a)*(a)
#define min(a,b) (a)>(b)?(b):(a)
#define dd double
struct point{
dd x,y,v,a;//点x,y,v为角度,a为边长
}q[];
dd r0,r1,r2,r3;
int read(){
int f=;
for(int i=;i<;i++){
scanf("%lf%lf",&q[i].x,&q[i].y);
if(q[i].x||q[i].y) f=;
}
return f;
}
dd make(dd r,dd a,dd h,dd n){
dd t=r-r/tan(h)/tan(n)+a/tan(n);
if(t<=eps)return -;
return sqr((sqrt(t)-sqrt(r))*tan(n));
}
void solve(){
dd l=,r=min(q[].a*tan(q[].v),q[].a*tan(q[].v));
while(r-l>eps){
r0=(l+r)/;
r1=make(r0,q[].a,q[].v,q[].v);
r2=make(r0,q[].a,q[].v,q[].v);
if(r1<=eps||r2<=eps||r2/tan(q[].v)+r1/tan(q[].v)+*sqrt(r2*r1)-q[].a<eps)
r=r0;
else
l=r0;
}
}
int main(){
while(read())
{
for(int i=;i<;i++)
q[i].a=sqrt(sqr(q[(i+)%].x-q[i].x)+sqr(q[(i+)%].y-q[i].y));//计算边长
for(int i=;i<;i++)
q[i].v=acos((sqr(q[i].a)+sqr(q[(i+)%].a)-sqr(q[(i+)%].a))//q[i].a/q[(i+)%].a)/;
solve();
printf("%lf %lf %lf\n",r0,r1,r2);
}
}

  

【UVALive 4642】Malfatti Circles(圆,二分)的更多相关文章

  1. UVA LIVE-4642 - Malfatti Circles

    给出三角形三个顶点,求出三个互切的圆的半径 尽管大白鼠说能够推出公式,但是这个公式仅仅怕没那么easy推--我左看右看上看下看也推不出. 应该是要做辅助线什么的,那也-- 因为非常easy就推出了关于 ...

  2. Gym 101194D / UVALive 7900 - Ice Cream Tower - [二分+贪心][2016 EC-Final Problem D]

    题目链接: http://codeforces.com/gym/101194/attachments https://icpcarchive.ecs.baylor.edu/index.php?opti ...

  3. 51nod - 1278 相离的圆 (二分)

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 因为圆心都在x轴上,把每个圆转化成线段后,按线段的起点排序,那么对 ...

  4. UVALive 6656 Watching the Kangaroo --二分

    题意:给你一些区间,再查询一些点,问这些点与所有区间形成的最小距离的最大值.最小距离定义为:如果点在区间内,那么最小距离为0,否则为min(pos-L[i],R[i]-pos). 解法:当然要排个序, ...

  5. UVALive 3635 Pie 切糕大师 二分

    题意:为每个小伙伴切糕,要求每个小盆友(包括你自己)分得的pie一样大,但是每个人只能分得一份pie,不能拿两份凑一起的. 做法:二分查找切糕的大小,然后看看分出来的个数有没有大于小盆友们的个数,它又 ...

  6. UVALive 2949 Elevator Stopping Plan(二分 + 贪心)

    ZSoft Corp. is a software company in GaoKe Hall. And the workers in the hall are very hard-working. ...

  7. UVALive 5903 Piece it together 二分匹配,拆点 难度:1

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  8. UVALive - 3211 Now or later (二分+2SAT)

    题目链接 题意:有n架飞机,每架飞机有两个着陆时间点可以选,要求任意两架飞机的着陆时间之差不超过k,求k的最大值. 解法:由于每架飞机都有两个选择,并且必选且只能选其中一个,时间冲突也是发生在两架飞机 ...

  9. UVALive - 7427 the math 【二分匹配】

    题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

随机推荐

  1. jsp的九大内置对象和四大作用域

    定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量? JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):? 1.request对象(作用域)? 客户 ...

  2. tyvj[1087]sumsets

    描述     正整数N可以被表示成若干2的幂次之和.例如,N = 7时,共有下列6种不同的方案:1) 1+1+1+1+1+1+12) 1+1+1+1+1+23) 1+1+1+2+24) 1+1+1+4 ...

  3. javascript的几个小技巧

    1.在循环中缓存array.length 这个技巧很简单,这个在处理一个很大的数组循环时,对性能影响将是非常大的.基本上,大家都会写一个这样的同步迭代的数组. for(var i=0;i<arr ...

  4. svn那些错误

    一.提交.a文件 第一种方法: 1. 通常选择svn的commit后一般不会上传.a文件. 2. 选中要上传的.a文件,右击选择Add Working Copy. 3. 然后再点击commit,就可以 ...

  5. 叫板OpenStack:用Docker实现私有云

    看到各大厂商的云主机,会不会觉得高大上?目前大公司的主流方案是OpenStack,比如某个公司的私有云

  6. C语言操作内存

    炒了个栗子 #include <stdio.h> #define N1 (5) #define N2 (7) #define N3 (3) int main(){ int *ip; int ...

  7. windows 10磁盘占用100%解决方案

    可以试试在 控制面板–管理工具–服务– HomeGroup Listener和HomeGroup Provider禁用. (这2项服务是家庭组共享用的,一般我们也不会去共享什么的.) 效果:我的磁盘是 ...

  8. CentOS下OpenVPN客户端配置

    CentOS下OpenVPN客户端配置 http://liumissyou.blog.51cto.com/4828343/1762683 1,安装 yum install openvpn -y mkd ...

  9. struts2: 通过流输出实现exce导出

    参考下面代码,在Action中加一个方法: // 导出excel public String excel() throws Exception { StringBuffer excelBuf = ne ...

  10. Autofac中的属性注入功能使用

    使用依赖注入容器时,大部分都是使用构造函数来注入或者是xml配置文件.也有很多支持属性注入.Autofac就是其中一个. 1 为什么要有属性注入? 对于一些使用特频繁的类或者方法,很多类都会用到,那么 ...