利用海伦公式求三角形面积

海伦公式:
假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:在这里插入图片描述而公式里的p为半周长(周长的一半)
求三角形内切圆和外切圆的半径:
内切圆:三角形内切bai圆半径:r=2S/(a+b+c)
外切圆:三角形外接圆的半径:R=abc/4S
例题:
F - 程序设计:掎角之势 计蒜客 - A2226
在《亮剑》中,李云龙发动的平安战役不仅把晋西北搅成一锅粥,还成为了第二次世界大战的转折点。

晋绥军 358

团楚云飞得到探报,有大批日军向平安县城移动,于是他准备帮帮场子。友军在平安附近有三个团的兵力,分别是李云龙的独立团,丁伟的新一团,孔捷的新二团,他们三人互成掎角之势。

作为黄埔军校毕业生的楚云飞,对自己的数学非常自信。在研究了友军的防区分布后,想知道李云龙、丁伟、孔捷这三人指挥部位置所形成的三角形的内切圆和外接圆的面积。因为他们的位置是不断变化的,每次重新算一遍很麻烦,想请你编程帮忙来计算。
输入格式

第一行一个整数 T

,表示数据的组数。

接下来 T
行,每行 6 个整数 x1,y1,x2,y2,x3,y3

,分别表示李云龙、丁伟、孔捷这三人指挥部的坐标。
输出格式

对于每组数据,如果不能组成三角形,输出"NO SOLUTION",否则输出两个空格分隔的实数,分别表示内切圆和外接圆的面积。相对误差或者绝对误差在 10−6

范围内就认为是正确的。
数据范围

对于 40%
的数据:T≤100,x1=y2=x3=y3=0,0≤y1,x2≤100。

对于 100%
的数据:T≤10000,−10000≤x1,y1,x2,y2,x3,y3≤10000。
Sample Input

    4
    0 3 4 0 0 0
    0 0 10 10 -10 -10
    3 3 5 3 3 5
    0 0 -5 -10 5 -10

Sample Output

    3.1415926536 19.6349540849
    NO SOLUTION
    1.0780241689 6.2831853072
    29.9995403716 122.7184630309

ac代码:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
       int x1,y1,x2,y2,x3,y3;
       cin>>x1>>y1>>x2>>y2>>x3>>y3;
       double a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
       double b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
       double c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
       //cout<<a<<" "<<b<<" "<<c<<endl;

       if((x1-x2)*(y1-y3)*1.0!=(x1-x3)*(y1-y2)*1.0)//判断三个点是否能构成三角形,即判断这三点是不是在一条直线上,如果这个三个点构成的其中两条边平行,那它一定不是三角形
       {
          double p=(a+b+c)/2.0;
          //cout<<p<<endl;
          double s=sqrt(p*(p-a)*(p-b)*(p-c));
          double r1,r2,s1,s2;
          r1=2.0*s/(a+b+c);
          r2=a*b*c/(4.0*s);
          s1=acos(-1)*r1*r1;
          s2=acos(-1)*r2*r2;
          printf("%.10lf %.10lf\n",s1,s2);
       }
       else
       {
          cout<<"NO SOLUTION"<<endl;
       }
    }
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值