Задача
Треугольная пирамида задана координатами своих вершин [latex] A(x_1; y_1; z_1), [/latex] [latex] B(x_2; y_2; z_2), [/latex] [latex] C(x_3; y_3; z_3), [/latex] [latex] S(x_4; y_4; z_4). [/latex] Определить площадь полной поверхности пирамиды.
Входные данные
В четырех строках заданы координаты [latex] x, y, z [/latex] вершин пирамиды. Все числа целые, не превышающие по модулю 100.
Выходные данные
Вывести полную поверхность пирамиды с точностью до десятых.
Тесты
№ | Входные данные | Выходные данные |
---|---|---|
1 | -3 0 0 | 69,8 |
0 6 0 | ||
3 0 0 | ||
0 2 5 | ||
2 | 2 4 8 | 159,1 |
2 -6 9 | ||
5 -4 0 | ||
1 3 0 | ||
3 | 5 0 1 | 107,3 |
4 1 7 | ||
-9 0 4 | ||
6 2 8 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <iostream> // std::cout, std::fixed #include <iomanip> // std::setprecision //данную библиотеку подключаем для того, чтобы установить количество знаков после запятой #include <cmath> //данную библиотеку подключаем для того, чтобы была возможность извлечь корень и возвести в квадрат using namespace std; //функция рассчитывает расстояние между двумя точками с заданными координатами double distance (double x1, double y1, double z1, double x2, double y2, double z2) { return sqrt( pow(x1-x2, 2) + pow(y1-y2, 2) + pow(z1-z2, 2)); } //функция вычисляет площадь треугольника по формуле Герона double Geron (double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3) { double a,b,c,P;//стороны треугольника и полупериметр a = distance(x1,y1,z1, x2,y2,z2); b = distance(x2,y2,z2, x3,y3,z3); c = distance(x1,y1,z1, x3,y3,z3); P = (a+b+c)/2; return sqrt(P*(P-a)*(P-b)*(P-c)); } //функция вычисляет площадь полной поверхности пирамиды double square (double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, double x4, double y4, double z4) { double S1,S2,S3,S4,S;//площади треугольников и площадь полной поверхности пирамиды S1 = Geron(x1,y1,z1,x2,y2,z2,x3,y3,z3); S2 = Geron(x1,y1,z1,x2,y2,z2,x4,y4,z4); S3 = Geron(x1,y1,z1,x3,y3,z3,x4,y4,z4); S4 = Geron(x2,y2,z2,x3,y3,z3,x4,y4,z4); S = S1+S2+S3+S4; return S; } int main() { double x1,x2,x3,x4,y1,y2,y3,y4,z1,z2,z3,z4;//координаты вершин пирамиды cin >> x1 >> y1 >> z1 >> x2 >> y2 >> z2 >> x3 >> y3 >> z3 >> x4 >> y4 >> z4; double S = square (x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4); cout << fixed << setprecision(1) << S << endl; return 0; } |
Решение задачи
Для того, чтобы найти площадь полной поверхности пирамиды, необходимо найти площади треугольников, которые являются гранями пирамиды.
Для нахождения площади треугольника можно воспользоваться формулой Герона: [latex] S = \sqrt{p \cdot(p-a) \cdot(p-b) \cdot(p-c)} [/latex],где [latex] p [/latex]-полупериметр треугольника, [latex] a,b,c [/latex] — стороны треугольника. Чтобы воспользоваться формулой Герона, необходимо предварительно найти длины сторон треугольников, используя формулу нахождения длин отрезков по координатам концов отрезка: [latex] |AB|=\sqrt{(x_b-x_a)^2+(y_b-y_a)^2+(z_b-z_a)^2} [/latex], где [latex] А,В [/latex] — концы отрезка, [latex] x_a, y_a,z_a [/latex] — координаты [latex] А [/latex], [latex] x_b, y_b,z_b [/latex] — координаты [latex] В [/latex].
Найденные площади всех треугольников, из которых состоит пирамида, складываем и получаем искомую площадь полной поверхности пирамиды.