首页 > 代码库 > 【UVA】11524-InCircle(公式推导)
【UVA】11524-InCircle(公式推导)
简直醉了。
1)对于一般的三角形,内切圆半径公式如下:
[(s-a)(s-b)(s-c)/s]^(1/2)
s=(a+b+c)/2
2)在直角三角形的内切圆中,有这样两个简便公式:
1、两直角边相加的和减去斜边后除以2,得数是内切圆的半径:
r=(a+b-c)/2(注:s是Rt△的面积,a, b是Rt△的2个直角边,c是斜边)
2、两直角边乘积除以直角三角形周长,得数是内切圆的半径:
r=ab/ (a+b+c)
内切圆的半径公式:a,b,c为三角形三条边
s = (a + b + c) / 2;
r = sqrt( (s-a)*(s-b)*(s-c)/s);
这样的话,我们可以根据边之间比例,用一个边把另外2条边表示出来,之后带入内切圆的公式。
海伦公式求面积
Area = sqrt(s * (s - a) * (s - b) * (s - c));
#include <iostream> #include <cstdlib> #include <cstdio> #include <string> #include <cstring> #include <cmath> #include <vector> #include <queue> #include <stack> #include <algorithm> using namespace std; const double eps = 1e-10; #define _PI acos(-1.0) double m1,n1,m2,n2,m3,n3; double t1,t2,t3,t4,t5,t6; double r,b; void init(){ scanf("%lf",&r); scanf("%lf%lf%lf%lf%lf%lf",&m1,&n1,&m2,&n2,&m3,&n3); double t1 = n3 / (n3 + m3); double t2 = m1 / (n1 + m1); double t3 = m3 / (n3 + m3); double t4 = n2 / (n2 + m2); double k1 = t1 / t2; // c = k1 * b double k2 = t3 / t4; // a = k2 * b double k = k1 + k2 + 1; // 周长 = a + b + c = (k1 + k2 + 1) * b; double _k = k / 2; double tt = (_k - k1)*(_k - k2)*(_k - 1); b = sqrt(r * r * _k / tt); double S = _k * b; double ans = sqrt(S * (S - k1 * b) * (S - b) * (S - k2 * b)); printf("%.4f\n",ans); } int main(){ int T; scanf("%d",&T); while(T--){ init(); } return 0; }
【UVA】11524-InCircle(公式推导)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。