三角形面积

三角形面积

GESP二级练习,数学函数练习,难度★✮☆☆☆。

luogu-B3638 三角形面积

题目要求

题目描述

给定平面直角坐标系上的三个整点 A,B,CA, B, C 的坐标,求其围成的三角形面积。

数据保证答案一定是整数。所以如果你采用了浮点数来计算,请四舍五入到整数


两点之间的距离公式: (x1,y1),(x2,y2)(x_1, y_1), (x_2, y_2) 之间的距离是 (x1x2)2+(y1y2)2\sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}

海伦公式: 若三角形的边长为 a,b,ca, b, c,则三角形的面积是 s(sa)(sb)(sc)\sqrt{s(s-a)(s-b)(s-c)},其中 s=12(a+b+c)s=\frac12(a+b+c).

输入格式

共三行,每行表示一个三角形上的点。 每行包含两个正整数,表示点的坐标,形式为 x y

输出格式

共一行,一个整数,表示三角形面积。

样例输入 #1

10 20
30 40
50 50

样例输出 #1

100

样例解释

可以通过海伦公式计算面积。方法如下。

ABAB 距离:(3010)2+(4020)228.284\sqrt{(30 - 10)^2 + (40 -20)^2} \approx 28.284
BCBC 距离:(5030)2+(5040)222.361\sqrt{(50-30)^2 + (50-40)^2} \approx 22.361
ACAC 距离:(5010)2+(5020)250\sqrt{(50-10)^2+(50-20)^2}\approx 50

应用海伦公式,s(28.284+22.361+50)/250.323s \approx (28.284 + 22.361 + 50) / 2 \approx 50.323
求出近似面积: s(sa)(sb)(sc)10016.80100.08\sqrt{s(s-a)(s-b)(s-c)} \approx \sqrt{10016.80} \approx 100.08,故答案为 100100

数据规模与约定

对于 100%100\% 的数据:每个点的 x,yx, y 坐标值一定在 [1,200][1, 200] 之内,均为整数;答案一定为正整数。


题目分析

  1. 读取三个点的坐标
  2. 使用sqrt函数计算三个点之间的距离
  3. 计算三角形的半周长
  4. 使用sqrt函数计算三角形的面积
  5. 输出三角形的面积

{% include custom/custom-post-content-inner.html %}

示例代码

#include <cmath>
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
    // 读取三个点的坐标
    int x1, y1, x2, y2, x3, y3;
    cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;
    // 计算三个点之间的距离
    double a, b, c;
    a = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); // 计算AB距离
    b = sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3)); // 计算AC距离
    c = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3)); // 计算BC距离
    // 计算三角形的半周长
    double tmp = (a + b + c) / 2;
    // 计算三角形的面积
    double s = sqrt(tmp * (tmp - a) * (tmp - b) * (tmp - c));
    // 输出三角形的面积
    printf("%.0f", s);
    return 0;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on