题意:已知三角形ABC的3条边长,求三角形ABC 的面积,以及阴影部分的总面积。

#include<iostream>
#include<cstdio>
#include<cmath>
#define sqr(a) ((a)*(a))
#define pi 2.0*asin(1.0) using namespace std; typedef struct point
{
double x,y;
point(double xx=0,double yy=0):x(xx),y(yy){}
}vector; vector operator - (point a,point b)
{
return vector(a.x-b.x,a.y-b.y);
}
point operator + (point a,vector b)
{
return point(a.x+b.x,a.y+b.y);
}
vector operator * (vector a,double b)
{
return vector(a.x*b,a.y*b);
}
double dot(vector a,vector b)
{
return a.x*b.x+a.y*b.y;
}
double cross(vector a,vector b)
{
return a.x*b.y-a.y*b.x;
}
double len(vector a)
{
return sqrt(dot(a,a));
}
vector resiz(vector a,double l)
{
l/=len(a);
return vector(a.x*l,a.y*l);
}
vector rot(vector a,double rad)
{
double c=cos(rad),s=sin(rad);
return vector(a.x*c-a.y*s,a.x*s+a.y*c);
}
point inter(point p,vector v,point q,vector w)
{
vector u=p-q;
double t=cross(w,u)/cross(v,w);
return p+v*t;
}
point f(point o,vector v,point a,vector w,double r,double &rr,double rad)
{
vector u=resiz(rot(w,pi/2),2*r);
if(dot(v,u)>0) u=vector(-u.x,-u.y);
point b=a+u;
point p=inter(o,v,a,w),q=inter(o,v,b,w);
rr=len(p-o)/len(q-o)*r;
double d=rr/sin(rad);
v=resiz(v,d);
return o+v;
} int main()
{
int i=1;
double a,b,c,tha,thb,thc;
double r,r1,r2,r3;
point pa,pb,pc,p1,p2,p3;
vector va,vb,vc;
while(cin>>a>>b>>c && a+b+c)
{
tha=(sqr(b)+sqr(c)-sqr(a))/(2*b*c);
thb=(sqr(a)+sqr(c)-sqr(b))/(2*a*c);
thc=(sqr(b)+sqr(a)-sqr(c))/(2*b*a);
tha=acos(tha);
thb=acos(thb);
thc=acos(thc);
vc.x=pa.x+c;
pb=pa+vc;
vb=resiz(rot(vc,tha),b);
pc=pa+vb;
va=pc-pb;
r=cross(vc,vb)/(a+b+c);
p1=f(pa,rot(vc,tha/2),pb,va,r,r1,tha/2);
p2=f(pb,rot(va,thb/2),pc,vb,r,r2,thb/2);
p3=f(pc,rot(vb,thc/2-pi),pa,vc,r,r3,thc/2);
double s1=fabs(cross(p1-p2,p1-p3))/2;
a=len(p1-p2);
b=len(p2-p3);
c=len(p3-p1);
tha=(sqr(b)+sqr(c)-sqr(a))/(2*b*c);
thb=(sqr(a)+sqr(c)-sqr(b))/(2*a*c);
thc=(sqr(b)+sqr(a)-sqr(c))/(2*b*a);
tha=acos(tha);
thb=acos(thb);
thc=acos(thc);
double s2=tha/2*sqr(r3)+thb/2*sqr(r1)+thc/2*sqr(r2);
printf("Case %d: %.2lf %.2lf\n",i++,s1,s2);
}
return 0;
}

uva 11731 - Ex-circles的更多相关文章

  1. UVa 247 - Calling Circles(Floyd求有向图的传递闭包)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. UVa 247 Calling Circles【传递闭包】

    题意:给出n个人的m次电话,问最后构成多少个环,找出所有的环 自己想的是:用map来储存人名,每个人名映射成一个数字编号,再用并查集,求出有多少块连通块,输出 可是map不熟,写不出来,而且用并查集输 ...

  3. UVA - 247 Calling Circles Floyd判圈

    思路:利用的Floyd判圈,如果i能到j,j也能到i说明i和j在同一个圈里.每个人的名字可用map编号.最后DFS打印答案即可. AC代码 #include <cstdio> #inclu ...

  4. UVa 247 Calling Circles (DFS+Floyd)

    题意:如果两个人互通电话,那么他们就在一个电话圈里,现在给定 n 个人,并且给定 m 个通话记录,让你输出所有的电话圈. 析:刚开始没想到是Floyd算法,后来才知道是这个算法,利用这个算法进行连通性 ...

  5. UVA LIVE-4642 - Malfatti Circles

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

  6. UVA 247 - Calling Circles (Floyd)

    互相可以打电话是一个传递关系,所以Floyd求传递封包,dfs找一个尽量大的圈. #include<bits/stdc++.h> using namespace std; ; map< ...

  7. UVA - 247 Calling Circles(Floyd求传递闭包)

    题目: 思路: 利用Floyd求传递闭包(mp[i][j] = mp[i][j]||(mp[i][k]&&mp[k][j]);),当mp[i][j]=1&&mp[j][ ...

  8. UVA 247 Calling Circles —— (强连通分量模板题)

    第一个强连通分量的题. 题意:有一堆人,a给b打电话表示a有一条向b的边,一个强连通分量代表一个电话圈,把每个电话圈里的人在一行内输出出来. 直接上模板即可,但是要注意把string用map映射一下的 ...

  9. UVA 247"Calling Circles"(floyd求传递闭包+SCC)

    传送门 题意: 如果两个人相互打电话(直接或间接),则说他们在同一个电话圈里. (a,b) 表示 a 打给 b: 例如,(a,b),(b,c),(c,d),(d,a),则这四个人在同一个电话圈里: 输 ...

随机推荐

  1. Validation Rule和Binding Group

    WPF学习之绑定-Validation Rule和Binding Group 在上一篇文章中我们讨论了有关WPF绑定的知识点,现在我们可以很容易的将业务数据作为源绑定到WPF控件并可以通过创建不同的D ...

  2. 定位 position

    html结构是fixed包裹relative,relative包裹absolute position:relative;相对定位 a 不影响元素本身的特性 b 不使元素脱离文档流(元素移动之后原始位置 ...

  3. 关于ASP.Net中路径的问题

    比如你的工程是Webapplication1(url是:http://localhost/webapplication1/webform1.aspx) Request.ApplicationPath ...

  4. [GDI+] C# ImageDown帮助类教程与源码下载 (转载)

    点击下载 ImageDown.zip 1.下载图片到本地代码如下 /// <summary> /// 编 码 人:苏飞 /// 联系方式:361983679 /// 更新网站:[url=h ...

  5. (八)Struts2 文件上传和下载

    所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:Struts2 文件上传 Struts2 文件上传基于Struts2 拦 ...

  6. c#中用DirectShow实现媒体播放器的核心(1) DirectShow简介

    用.net做多媒体开发的似乎不多,所以网上资源也少,看的人更少.不过我的博客上居然还有几位在等新文章的人,有点出乎我的意料了.目前我已不再从事多媒体相关的工作,加入新公司至今都忙到吐血,再加上害怕水平 ...

  7. jQuery easyUI框架中经常出现的问题

    相信开发者对于我们jquery来说都不会陌生吧,jquery为我们的开发提供了很多各式各样的库,满足各种开发的需求,其中我们知道的有轻量级的,但是也有一些基于富客服端的一些重量级库,顾名思义,当我们在 ...

  8. 读书笔记之深入分析Java Web技术内幕

    章节: 1 B/SB/S的优点: 客户端使用统一的浏览器(Browser) ,浏览器的统一带来了操作的统一,无论使用什么服务,因为浏览器是相同的,所以操作类似.客户使用简单了.服务端开发简化; 使用统 ...

  9. linear model for classification

    不同error function比较

  10. PHP中的设计模式:单例模式(译)

    原文链接:http://coderoncode.com/2014/01/27/design-patterns-php-singletons.html 单例模式用于限制类实例化到单个对象,当整个系统只需 ...