题解:洛谷 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
posted @ 2026-02-28 20:21  团爸讲算法  阅读(0)  评论(0)    收藏  举报