计算几何(中线长计算三角形面积) - Medians - UVA 10347

计算几何(中线长计算三角形面积) - Medians - UVA 10347

题意:

给 定 三 角 形 的 三 条 中 线 的 长 度 , 求 三 角 形 的 面 积 。 给定三角形的三条中线的长度,求三角形的面积。 线

输入:

多 组 测 试 数 据 多组测试数据

每 组 包 括 三 个 数 , 表 示 三 条 中 线 的 长 度 。 每组包括三个数,表示三条中线的长度。 线

输出:

一 个 浮 点 数 , 表 示 三 角 形 的 面 积 。 一个浮点数,表示三角形的面积。


分析:

结论:

由 △ A B C 的 三 条 中 线 A D 、 B E 、 C F 作 为 三 条 边 , 构 成 的 三 角 形 的 面 积 是 △ A B C 面 积 的 3 4 由\triangle ABC的三条中线AD、BE、CF作为三条边,构成的三角形的面积是\triangle ABC面积的\frac{3}{4} ABC线ADBECFABC43

证明:

在这里插入图片描述
如 上 图 , 作 F G / / = B E , C G / / = A D , 如上图,作FG\underset{=}{//}BE,CG\underset{=}{//}AD, FG=//BECG=//AD

易 证 △ A H F ~ = △ E H G , 易证\triangle AHF\underset{=}{~}\triangle EHG, AHF=EHG

于 是 得 到 H 是 A E 、 F G 的 中 点 , 是 A C 的 四 等 分 点 , 于是得到H是AE、FG的中点,是AC的四等分点, HAEFGAC

从 而 , S △ A C F = 1 2 S △ A B C , S △ C H F = 1 2 S △ C F G , S △ C H F = 3 4 S △ A C F 从而,S_{\triangle ACF}=\frac{1}{2}S_{\triangle ABC},S_{\triangle CHF}=\frac{1}{2}S_{\triangle CFG},S_{\triangle CHF}=\frac{3}{4}S_{\triangle ACF} SACF=21SABCSCHF=21SCFGSCHF=43SACF

最 终 得 到 S △ C G F = 3 4 S △ A B C 最终得到S_{\triangle CGF}=\frac{3}{4}S_{\triangle ABC} SCGF=43SABC

本题中:

利 用 结 论 , S △ A B C = 4 3 S △ C G F = 4 3 p ( p − u ) ( p − v ) ( p − w ) , 其 中 p = u + v + w 2 利用结论,S_{\triangle ABC}=\frac{4}{3}S_{\triangle CGF}=\frac{4}{3}\sqrt{p(p-u)(p-v)(p-w)},其中p=\frac{u+v+w}{2} SABC=34SCGF=34p(pu)(pv)(pw) p=2u+v+w

注意:

首 先 中 线 长 要 能 够 构 成 三 角 形 , 即 任 意 两 边 之 和 大 于 第 三 边 , 任 意 两 边 之 差 小 于 第 三 边 , 否 则 无 解 。 首先中线长要能够构成三角形,即任意两边之和大于第三边,任意两边之差小于第三边,否则无解。 线

且 无 解 要 输 出 − 1.000 。 且无解要输出-1.000。 1.000

代码:

#include<cstring>
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>

using namespace std;

bool check(double a,double b,double c)
{
	if( a >= b + c || a <= fabs(b-c) )
		return true;
	return false;
}

double area(double u,double v,double w)
{
    double p=(u+v+w)/2.0;
    return 4.0/3.0*sqrt(p*(p-u)*(p-v)*(p-w));
}

int main()
{
    double m,n,p;
    while(~scanf("%lf%lf%lf",&m,&n,&p))
    {
        if(check(m,n,p) || check(n,m,p) || check(p,m,n)) puts("-1.000");
        else printf("%.3lf\n",area(m,n,p));
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值