Вычисление объема слоев модели
Для облегчения вычисления объема слоя, воспользуемся методом построения выпуклой замкнутой поверхности (выпуклой оболочки) из точек этого слоя.
Выпуклой оболочкой конечного набора точек является выпуклый многогранник, причем его вершины являются подмножеством вершин исходного набора точек. [27] Существует множество алгоритмов для создания выпуклой оболочки из набора точек. Одним из самых оптимальных способов является алгоритм быстрой оболочки (quickhull), использующий идею быстрой сортировки Хоара и основанный на принципе разделяй и властвуй [29].
В описании алгоритма будут использованы следующие понятия:
· Симплекс, или n-мерный тетраэдр – геометрическая фигура, являющаяся n-мерным обобщением треугольника.
· Многогранник – замкнутая поверхность, составленная из многоугольников.
· Выпуклый многогранник – частный случай многогранника, обладающий таким свойством, что при разбиении пространства одной из его граней он целиком лежит в одном из полупространств.
· Параллелотоп – обобщение плоского параллелограмма и объемного параллелепипеда.
· Ребро – пересечение двух граней. [27]
Алгоритм быстрой оболочки состоит из этапа подготовки и главного цикла. На этапе подготовки производятся следующие операции:
1. Построение некоего стартового симплекса из (D+1) независимых друг от друга точек, где D – размерность пространства. То есть в нашем случае с трехмерным пространством нужно выбрать любые 4 точки, трехмерный симплекс (тетраэдр). Начав со стартового симплекса, с каждым последующим шагом мы будем расширять его, получая все больший и больший многогранник, чьим неизменным свойством будет его выпуклость;
2. Распределение оставшихся точек в так называемые списки внешних точек граней – точки, находящиеся по другую сторону от грани, нежели внутренность симплекса;
3. Создание списка соседних граней. Для каждой грани он будет содержать ровно D элементов.
В главном цикле, стартовый симплекс «достраивается», захватывая все больше и больше пространства, а вместе с ним и точек исходного множества. Цикл повторяется для каждой грани до тех пор, пока не останется точек ни в одном из внешних списков. Алгоритм главного цикла описывается таким образом:
1. Выбирается грань, в списке внешних точек которой самая дальняя точка находится дальше от грани, чем аналогичные точки у других граней.
2. Выбранная грань удаляется из списка граней, как не являющаяся гранью конечного многоугольника. Из списка внешних точек данной грани находится самая дальняя от нее точка, присоединение которой к многограннику не нарушает его выпуклости.
3. Создаются грани, образованные ребрами соседних граней и выбранной точкой в качестве вершины.
После создания выпуклой оболочки слоя нужно посчитать ее объем. Если объем элементарных фигур, таких как сфера, пирамида, призма, можно выразить как функцию их геометрических размеров, то объем сложных многоугольников вычисляется только разделением их на меньшие элементарные фигуры.
Для расчета объема выпуклого многогранника нужно разделить его на пирамиды с основанием на грани многогранника и вершиной в его центре. В общем случае объем может быть выражен как:
(3.1) |
где – точка на грани F,
– единичный вектор, перпендикулярный грани F и направленный в противоположную от многогранника сторону
– площадь грани F.
В языке MATLAB уже есть реализация функции образования и подсчета объема выпуклых многогранников, поэтому будем использовать ее в целях оптимизации.
Также при расчете объема нужно учитывать поправку к вместимости за счет гидростатического давления жидкости, которую вычисляют по формуле (3.4.2):
(3.2) |
где – высота и толщина стенки первого пояса;
– высота и толщина -го вышестоящего пояса;
i – номер наполняемого пояса;
А2 – постоянный коэффициент для проверяемого резервуара, вычисляемый по формуле:
(3.3) |
где – ускорение свободного падения, м/с2 ( )
– плотность хранимой жидкости;
- длина внутренней окружности первого пояса;
– модуль упругости материала.
Программа составления градуировочной таблицы содержит 2 функции:
· Main – главная исполняемая функция. По завершении исполнения записывает готовую градуировочную таблицу в формате xls в корень проекта.
· convhull – считает объем слоя модели. В качестве аргументов принимает матрицу координат слоя.