UVA-10347 Medians 计算几何 中线定理

题面

题意:已知三角形三中线的长度nmp,求面积

题解:如果知道中线定理就比较简单了

        三边长为 3*a=sqrt(8*mb*mb+8*mc*mc-4*ma*ma) 

                       3*b=sqrt(8*ma*ma+8*mc*mc-4*mb*mb)

                       3*c=sqrt(8*ma*ma+8*mb*mb-4*mc*mc) 再利用海伦s=sqrt( p*(p-a)*(p-b)*(p-c) ); p=(a+b+c)/2;

         所以 s=sqrt( t*(t-2*p)*(t-2*n)*(t-2*m ) ) / 3;               t=n+m+p;     别忘了判三角形是否存在(三中线的长度关系和三边一样,两边和大于另一边) 

复制代码
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 double t,s,n,m,p;
 4 int why;
 5 int main()
 6 {
 7     while (cin>>n>>m>>p)
 8     {
 9         if (n<=0 || m<=0 || p<=0)
10         {
11             printf("-1.000\n");
12             continue;
13         }     
14         why=0;
15         if (n+m>p) why++;
16         if (n+p>m) why++;
17         if (m+p>n) why++;
18         if (why!=3)
19         {
20             printf("-1.000\n");
21             continue;
22         } 
23         t=n+m+p;
24         s=t*(t-2*p)*(t-2*n)*(t-2*m);
25         if (s<0) printf("-1.000\n");else printf("%.3lf\n",sqrt(s)/3);
26     }
27 }
复制代码

 

posted @   口香糖万岁  阅读(254)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
阅读排行:
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 为什么UNIX使用init进程启动其他进程?
点击右上角即可分享
微信分享提示