题解:洛谷 B2031 计算三角形面积
【题目来源】
洛谷:B2031 计算三角形面积 - 洛谷 (luogu.com.cn)
【题目描述】
平面上有一个三角形,它的三个顶点坐标分别为 \((x_1,y_1),(x_2,y_2),(x_3,y_3)\),那么请问这个三角形的面积是多少。
【输入】
输入仅一行,包括 \(6\) 个双精度浮点数,分别对应 \(x_1,y_1,x_2,y_2,x_3,y_3\)。坐标的绝对值不超过 \(100\),且小数点后最多只有一位。
【输出】
输出也是一行,输出三角形的面积,精确到小数点后两位。
【输入样例】
0 0 4 0 0 3
【输出样例】
6.00
【算法标签】
《洛谷 B2031 计算三角形面积》 #顺序结构#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int main()
{
double x1, y1, x2, y2, x3, y3, a_m, b_m, adotb, res; // 定义三个点的坐标和中间变量
cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3; // 读入三个点的坐标
a_m = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // 计算向量a的模|a|
b_m = sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1)); // 计算向量b的模|b|
adotb = (x2 - x1) * (x3 - x1) + (y2 - y1) * (y3 - y1); // 计算向量a和b的点积
// 计算三角形面积:S = 1/2 * √(|a|²|b|² - (a·b)²)
res = 0.5 * sqrt(a_m * b_m * a_m * b_m - adotb * adotb);
cout << fixed << setprecision(2) << res << endl; // 输出面积,保留两位小数
return 0;
}
【运行结果】
0 0 4 0 0 3
6.00
浙公网安备 33010602011771号