Задача.
Найти площадь треугольника по заданным координатам его вершин [latex] A(x_a,y_a,z_a )[/latex], [latex]B(x_b,y_b,z_b)[/latex] и [latex]C(x_c,y_c,z_c)[/latex].
Входные данные
Координаты вершин треугольника [latex]ABC[/latex]
Выходные данные
Площадь [latex]S[/latex] треугольника [latex]ABC[/latex]
Тесты
Входные данные | Выходные данные | ||||||||
[latex]x_a [/latex] | [latex]y_a [/latex] | [latex]z_a [/latex] | [latex]x_b [/latex] | [latex]y_b [/latex] | [latex]z_b [/latex] | [latex]x_c [/latex] | [latex]y_c [/latex] | [latex]z_c [/latex] | [latex]S [/latex] |
-2 | 1 | 2 | 3 | -3 | 4 | 1 | 0 | 9 | 19.7864 |
-3 | 13 | -5 | 6 | 11 | 12 | 4 | 8 | 18 | 50.5618 |
-6 | 0 | 4 | 5 | 1 | 3 | -3 | -1 | -4 | 43.307 |
-6 | -2.3 | -8.2 | 1.9 | -7.8 | 0.2 | -8.5 | 3.4 | -8.9 | 28.0909 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <cmath> using namespace std; //функция высчитывает расстояние между двумя координатами, координаты передаются в функцию при вызове double side(double ax,double bx,double ay,double by,double az,double bz){ return sqrt((bx-ax)*(bx-ax)+(by-ay)*(by-ay)+(bz-az)*(bz-az)); } int main() { double ax,ay,az,bx,by,bz,cx,cy,cz; cin>>ax>>ay>>az>>bx>>by>>bz>>cx>>cy>>cz; double a=side(bx,ax,by,ay,bz,az); double b=side(cx,ax,cy,ay,cz,az); double c=side(bx,cx,by,cy,bz,cz); double p=(a+b+c)/2; double s=sqrt(p*(p-a)*(p-b)*(p-c)); cout<<s; return 0; } |
Решение задачи
Используя известные нам координаты вершин треугольника и формулу вычисления расстояния между двумя точками в пространстве [latex]AB=\sqrt{(x_2-x_1)^2+(y_2-y_1)^2+(z_2-z_1)^2}[/latex] можно найти длины сторон треугольника [latex]ABC[/latex]. Для нахождения площади используем Формулу Герона[latex]AB=\sqrt{p*(p-a)*(p-b)*(p-c)}[/latex] перед этим находим полупериметр [latex]p[/latex] по формуле [latex]p=\frac{a+b+c}{2}[/latex] подставляем значение и выводим конечный результат.
Хорошо получилось. Но не без замечаний.
— Зачем ссылка «Формулы» на google.com ?
— Почему координаты вершин обязательно целочисленные.
— Для возведения в квадрат, нужно использовать умножение, а не функцию pow(). Эта функция нужна для возведения в нецелую степень.
— Нужно добавить какие-то ключевые слова (метки), для облегчения поиска статьи в сети.
Хорошо. Я засчитываю работу.
Только внесите, пожалуйста одно изменение. Именование параметров функции side не очень удачно. Это ведь координаты двух точек в пространстве? Вы ведь уже нашли удачный способ их именовать (как в условии задачи). Лучше и здесь придерживаться тех же правил именования. Можно даже использовать те же имена для переменных это ведь совсем другая функция. И напишите короткий комментарий в коде перед функцией side — что она делает и что за параметры ей требуются.
Да! Чуть не забыл. Не ставьте точки в подзаголовках. Например, «Ссылки» правильно, а «Тесты.» — нет.