uva 11524 InCircle 内切圆(计算几何)
2014-07-24 10:10
253 查看
题意:已知一个三角形内切圆半径r,以及各边被内切圆切点分割成两段的比例,m1:n1,m2:n2,m3:n3,求三角形面积。
题解:
列方程求解。我们可以设一条边为x,用海伦公式和内切圆求面积列出一个方程,详细见代码。令x=n1/m1,y=m2/n2,z=m3/n3,我是设n3段为未知数p,根据全等三角形,我们可以各边长a=(x+z)*p,b=(z+1)*p,c=(x+1)*p.列出方程sqrt((x+z+1)*x*z)*p^2=r*(x+z+1)*p;求解即可。
代码:
题解:
列方程求解。我们可以设一条边为x,用海伦公式和内切圆求面积列出一个方程,详细见代码。令x=n1/m1,y=m2/n2,z=m3/n3,我是设n3段为未知数p,根据全等三角形,我们可以各边长a=(x+z)*p,b=(z+1)*p,c=(x+1)*p.列出方程sqrt((x+z+1)*x*z)*p^2=r*(x+z+1)*p;求解即可。
代码:
#include <cstdio> #include <cstdlib> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> #include <map> #include <set> #include <queue> using namespace std; double f[10]; int main() { int T; scanf("%d",&T); while(T--) { int i,j,k; double x,y,z,r,ans,p,a,b,c; scanf("%lf",&r); for(i=0;i<6;i++) scanf("%lf",&f[i]); x=f[0]/f[1]; y=f[2]/f[3]; z=f[4]/f[5]; //printf("%f\n",y*z*x); x=1.0/x; p=r*(x+z+1)/sqrt((x+z+1)*x*z);//未知数n3的长 a=(x+z)*p; b=(z+1)*p; c=(x+1)*p; ans=a*r/2+b*r/2+c*r/2; printf("%.4f\n",ans); } return 0; } /* 用海伦公式求得:S=sqrt(p*(p-a)*(p-b)*(p-c));p=(a+b+c)/2 用内切圆半径求得:S=a*r/2+b*r/2+c*r/2=(a+b+c)/2*r=p*r; 列方程,可求得边长,从而得到面积。 */
相关文章推荐
- UVa 11524 InCircle 关于内切圆的计算
- UVA 11524 - InCircle (计算几何)
- 计算几何专项:UVa 11524
- 内切圆 UVA 11524 - InCircle
- uva 11524 - InCircle(几何)
- UVA - 11524 InCircle 内切圆 (数学)
- InCircle - UVa 11524 几何
- UVA 10652 Board Wrapping 计算几何
- UVa 10256 (计算几何基础摸板)
- UVA - 11646 - Athletics Track (计算几何~)
- UVa 10387 Billiard (计算几何&反射)
- 计算几何专项:UVa 10556
- UVA Orchard Trees(计算几何)
- UVALive 4818 - Largest Empty Circle on a Segment (计算几何)
- UVA 438 - The Circumference of the Circle(计算几何)
- UVA11800--Determine the Shape(计算几何)
- UVA 12301 - An Angular Puzzle(计算几何)
- UVALive 6835 Space Golf-计算几何
- 100道动态规划——4 UVA 1331 Maximum Triangulation DP 计算几何
- 计算几何专项:UVa 588