先上代码:
#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==)