题解 B2031 【计算三角形面积】

· · 题解

基础练手题。

基本思路

这是一道在坐标系上的海伦公式计算,首先需要会做计算两点之间距离这题,学会运用勾股定理解决两坐标点间距离计算的问题,再利用海伦秦九韶公式计算这道题目。

推导过程

根据B2030的经验,我们知道:一个平面直角坐标系内有两点 (x_1,y_1)(x_2,y_2),那么两点之间距离为:

dis=\sqrt{(x_1 - x_2)^2+(y_1-y_2)^2}

可以用勾股定理求解。

令三角形三边长分别为 abc

先摆海伦:S=\sqrt{p(p-a)(p-b)(p-c)},其中 p=\frac{a+b+c}{2} 即周长的一半。

但是我们是中国人,所以看看老祖宗的东西,秦九韶公式:

S=\sqrt{\frac{1}{4}[a^2b^2-(\frac{a^2+b^2-c^2}{2})^2]}

然而实际上这两个柿子是相同的,可以通过乘法公式和因式分解相互推倒。

综上,根据 disS 的计算方法,我们就能轻松搞定这道让人头疼的题目了。

CODE

#include <stdio.h>
#include <math.h>
double x1, y11, x2, y2, x3, y3, a, b, c, p;
inline double dis(double x1, double y11, double x2, double y2) {
    return sqrt((x1 - x2) * (x1 - x2) + (y11 - y2) * (y11 - y2));
} //给定坐标计算两点之间距离
int main(void) {
    scanf("%lf %lf %lf %lf %lf %lf", &x1, &y11, &x2, &y2, &x3, &y3);
    a = dis(x1, y11, x2, y2);
    b = dis(x2, y2, x3, y3);
    c = dis(x3, y3, x1, y11);
/*
a, b, c为三边边长
*/
    p = (a + b + c) / 2; //p为周长一半
    printf("%.2lf\n", sqrt(p * (p - a) * (p - b) * (p - c))); //直接用简单的海伦公式即可
    return 0;
}

喜欢就点个赞吧qwq