B2031 计算三角形面积

先上代码:

#include<bits/stdc++.h>
using namespace std;
int xa,ya,xb,yb,xc,yc;
double a,b,c,p,s;
int main(){
    cin>>xa>>ya>>xb>>yb>>xc>>yc;
    a=sqrt(pow(xa-xb,2)+pow(ya-yb,2));
    b=sqrt(pow(xa-xc,2)+pow(ya-yc,2));
    c=sqrt(pow(xb-xc,2)+pow(yb-yc,2));
    p=(a+b+c)/2;
    s=sqrt(p*(p-a)*(p-b)*(p-c));
    cout<<fixed<<setprecision(2)<<s;
    return 0;
}

题目传送门:

B2031 计算三角形面积 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目:

题目描述

平面上有一个三角形,它的三个顶点坐标分别为 (x1​,y1​),(x2​,y2​),(x3​,y3​),那么请问这个三角形的面积是多少。

输入格式

输入仅一行,包括 66 个双精度浮点数,分别对应 x1​,y1​,x2​,y2​,x3​,y3​。

输出格式

输出也是一行,输出三角形的面积,精确到小数点后两位。

输入输出样例

输入 #1

0 0 4 0 0 3

输出 #1

6.00

解析:

其实这题非常简单, 就是给出三角形的三个顶点,然后求出三角形的面积

面积求法:

相信上过小学的人都知道 S△ = ½ah(即 三角形的面积 为 底×高÷2)

但是如果三角形的三条边没有哪一条与x轴或y轴平行,这时我们就要用到另一个方法:

用一个 直角梯形的面积 减去 两个 直角三角形的面积 如图所示:

最后得出结论:

S△=½×∣(x2−x3)(y1​−y3)−(x1−x3)(y2−y3)∣

换成c++代码就是:

abs((x1-x3)*(y1-y3)-(x2-x3)*(y2-y3))/2

但是开头的代码用的就是另一个方法了:

海伦公式:

就是八年级下册数学书第16页的那个东西(海伦-秦九韶公式):

然后我们就可以直接套公式啦(bushi)

但是这之前,我们还要学习一个东西:

欧几里得距离

点A, B之间的距离就是:√((Xa-Xb)²+(Ya-Yb)²)

所以我们就先用这个公式求出三角形的三边长度,之后就开始套海伦公式

注释代码:

#include<bits/stdc++.h>    //万能头,在这里可以分成iostream和cmath来写
using namespace std;
int xa,ya,xb,yb,xc,yc;    //三角形三顶点A,B,C的x坐标与y坐标
double a,b,c,p,s;    //三角形三边a,b,c的长度,海伦公式里的p,三角形的面积s
int main(){
    //先输入三点坐标
    cin>>xa>>ya>>xb>>yb>>xc>>yc;
    //求出三角形三边长度
    //sqrt(n)是求n的根,pow(a,b)是求a的b次方
    a=sqrt(pow(xa-xb,2)+pow(ya-yb,2));        
    b=sqrt(pow(xa-xc,2)+pow(ya-yc,2));
    c=sqrt(pow(xb-xc,2)+pow(yb-yc,2));
    //得出p
    p=(a+b+c)/2;
    //套公式
    s=sqrt(p*(p-a)*(p-b)*(p-c));
    //输出面积
    //fixed<<setprecision(n) 是保留n位小数
    cout<<fixed<<setprecision(2)<<s;
    return 0;
}   //如果你很闲也可以试试自己用秦九韶公式来试试 :3==)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值