[2018蓝桥杯A组决赛] A-三角形面积
题解
方法一:海伦公式
中学数学中,已知三角形三条边即可求解该三角形的面积,而该公式为海伦公式。
p = (a + b + c) / 2,s = sqrt(p * (p - a) * (p - b) * (p - c))。
#include <iostream> #include <cmath> using namespace std; double x2, y2, x3, y3, x4, y4; int main() { x2 = 2.3, y2 = 2.5; x3 = 6.4, y3 = 3.1; x4 = 5.1, y4 = 7.2; // 海伦公式 // p = (a + b + c) / 2 // s = sqrt(p * (p - a) * (p - b) * (p - c)) double a = sqrt((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3)); double b = sqrt((x2 - x4) * (x2 - x4) + (y2 - y4) * (y2 - y4)); double c = sqrt((x3 - x4) * (x3 - x4) + (y3 - y4) * (y3 - y4)); double p = (a + b + c) / 2.0; double s = sqrt(p * (p - a) * (p - b) * (p - c)); printf("%.3f\n", s); return 0; }
方法二:向量的叉积
中学向量中,可采用向量的叉积求解三角形面积。
s = 1 / 2 * (a * b),a = (x2 - x1, y2 - y1),b = (x3 - x1, y3 - y1)。
x1 = x2 - x1,y1 = y2 - y1。
x2 = x3 - x1,y2 = y3 - y1。
s = 1 / 2 * (x1 * y2 - x2 * y1)。
#include <iostream> using namespace std; double x2, y2, x3, y3, x4, y4; int main() { x2 = 2.3, y2 = 2.5; x3 = 6.4, y3 = 3.1; x4 = 5.1, y4 = 7.2; // 向量的叉积 // s = 1/2 * a * b // a = (x3 - x2, y3 - y2) = (x5, y5) // b = (x4 - x2, y4 - y2) = (x6, y6) double x5 = x3 - x2, y5 = y3 - y2; double x6 = x4 - x2, y6 = y4 - y2; double s = 0.50 * (x5 * y6 - x6 * y5); printf("%.3f\n", s); return 0; }
方法三:三角形面积公式求解
可采用 s = 1 / 2 *a * b * sin<a, b>求解。
最后结果为:
s = 1 / 2 * | x1 * y2 + x2 * y3 + x3 * y1 - x1 * y3 - x3 * y2 - x2 * y1 | 。
具体推导可见我的CSDN上的一篇博客:https://blog.csdn.net/weixin_44095278/article/details/98034114
#include <iostream> #include <cmath> using namespace std; double x2, y2, x3, y3, x4, y4; int main() { x2 = 5.1, y2 = 7.2; x3 = 2.3, y3 = 2.5; x4 = 6.4, y4 = 3.1; double s = 0.50 * fabs(x2 * y3 + x3 * y4 + x4 * y2 - x2 * y4 - x4 * y3 - x3 * y2); printf("%.3f\n", s); return 0; }