ML28. Объём тетраэдра

Cсылка на первоначальное решение тут

Задача

Найти объём тетраэдра три стороны которого образованы векторами
$\vec {a} = \left( x_a, y_a, z_a \right)$
$\vec {b} = \left( x_b, y_b, z_x \right)$
$\vec {c} = \left( x_c, y_c, z_c \right).$

Пояснительный рисунок

Пояснительный рисунок к ML28

Входные данные

Координаты векторов $\vec {a}$,$\vec {b}$, $\vec {c}$
Выходные данные
Объём тетраэдра

Входные данные Выходные данные
$x_a$ $y_a$ $z_a$ $x_b$ $y_b$ $z_b$ $x_c$ $y_c$ $z_c$ V
0 0 1 0 1 0 1 0 0 0.166667
3 6 3 1 3 -2 2 2 2 3
0 0 0 1 3 -2 2 2 2 0

Код программы

Решение задачи
Так как тетраэдр построен на векторах $\vec {a} = \left( x_a, y_a, z_a \right)$ $\vec {b} = \left( x_b, y_b, z_x \right)$ $\vec {c} = \left( x_c, y_c, z_c \right)$ для данной задачи оптимальным решением будет использовать следующие формулы:
$V=|Δ|/6$ где $V$ обьем тетраэдра а $Δ$ определитель матрицы.

Δ = \begin{vmatrix} x_a & y_a & z_a \\ -x_b & y_b & z_b \\ x_c & y_c & z_c
\end{vmatrix}
= $x_a \left(y_b z_c-z_b y_c \right)-x_b \left( y_a z_c-z_a y_c \right)+x_c \left( y_a z_b-z_a y_b \right)$

      Итоги:
  • если значение определителя матрицы равно нулю, то либо некоторые из заданных векторов коллинеарны, либо нулевые, либо все они лежат в одной плоскости. Во всех этих случаях тетраэдр не может существовать, и программа выведет 0;
  • если значение определителя не равно нулю, то программа вычислит объём тетраэдра. В случае, если определитель примет отрицательное значение, программа домножит значение объёма на −1, в результате чего оно станет положительным.

Решение на Try Haxe!

3 thoughts on “ML28. Объём тетраэдра

  1. — Отступы в программировании очень важны для того, кто будут читать Ваш код. крупные компании не ленятся готовить инструкции на несколько десятков страниц с объяснениями по стилю оформления кода. Это экономит очень много времени при его поддержке.
    — Сделайте, пожалуйста, ссылку для запуска кода на сайте try.haxe.com.

Добавить комментарий