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

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

#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. SQL注入技术专题—由浅入深【精华聚合】

    作者:坏蛋链接:https://zhuanlan.zhihu.com/p/23569276来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 不管用什么语言编写的Web应用 ...

  2. poj1637 Sightseeing tour

    Sightseeing tour Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 8859   Accepted: 3728 ...

  3. Zygote进程【2】——Zygote的分裂

    在Zygote的诞生一文中init进程是如何一步步创建Zygote进程的,也了解了Zygote的进程的作用.Zygote进程的诞生对于整个Java世界可以说有着"开天辟地"的作用, ...

  4. Types of intraclass correlation coefficience (ICC)

    Reference: Andellini M, Cannatà V, Gazzellini S, et al. Test-retest reliability of graph metrics of ...

  5. 快速排名 让人疯狂的黑帽seo技术

    对于黑帽seo大家或许并不陌生,黑帽seo和白帽seo恰恰相反,是作弊手段.有白帽seo的时候,就有了黑帽seo一直到现在.但隔行如隔山这句话这句话一点都没错,再没接触黑帽seo技术之前我根本不知道黑 ...

  6. Windows 8.1 新增控件之 DatePicker

    大年初一来介绍一个简单易用的DatePicker 控件,这个控件是新增的?印象里很早就有了啊,Anyway来看看Windows 8.1 里的DataPicker 有什么功能吧. 先来看看这个代码,很简 ...

  7. c语言 指针与地址的区别

    指针由两部分组成,指针的类型和指针的值(也就是变量的地址). 指针和地址的区别: 地址只是一堆十六进制的字符,对应着内存条的某段内存, 而指针本身有地址,指针的值也是一个地址,指针本身还有类型,这与单 ...

  8. Oracle字符分隔函数(split)

    为了让 PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行 ...

  9. Oracle:ODP.NET Managed 小试牛刀

    “ODP.NET Managed”发布已经有一段时间了,近期正好有一个新项目,想尝试用一下,参考园子里的文章:<.NET Oracle Developer的福音——ODP.NET Managed ...

  10. Canvas之打字机游戏

    最近针对粒子化作了一点点的探究,决定结合其做个小游戏,于是这个简单的打字游戏出世了. 试玩地址:Typewriter game  仅在chrome下测试,请谨慎使用其他浏览器(特别是ff):加载速度有 ...