УДК 004.92
Технические науки
Ильичев В. Ю., к.т.н., доцент кафедры «Тепловые двигатели и гидромашины» Калужский филиал ФГОУ ВО «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский
университет), г. Калуга, Россия Селютин В. Ю., студент кафедры «Тепловые двигатели и гидромашины» Калужский филиал ФГОУ ВО «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский
университет), г. Калуга, Россия
АВТОМАТИЗАЦИЯ РАЗБИЕНИЯ СЛОЖНЫХ ТРЁХМЕРНЫХ ОБЪЕКТОВ НА ТЭТРАЭДРАЛЬНЫЕ КОНЕЧНЫЕ ЭЛЕМЕНТЫ
Аннотация: В статье приведено описание решения одной из важных проблем машинной графики - автоматического (программного) разбиения сложных трёхмерных объектов на тетраэдры с целью дальнейшей реализации расчёта методом конечных элементов. Для составления программы, поэтапно производящей указанную процедуру, используется современный язык программирования высокого уровня Python, а также ряд специально разработанных для него библиотек функций, одна из которых реализует метод триангуляции Делоне. На примерах продемонстрировано разбиение на тетраэдры разнообразных трёхмерных объектов разной степени сложности.
Ключевые слова: машинная графика, триангуляция Делоне, метод конечных элементов, язык Python, библиотека SciPy.
Annotation: The article describes the solution of one of the important problems of machine graphics - the automatic (software) division of complex three-dimensional objects into tetrahedra in order to further implement the calculation by the finite element method. To compile a program that progressively produces this
procedure, the modern Python high-level programming language is used, as well as a number of function libraries specially developed for it, one of which implements the Delaunay triangulation method. The examples demonstrate the division into tetrahedra of various three-dimensional objects of different degrees of complexity.
Keywords: machine graphics, Delaunay triangulation, finite element method, Python language, SciPy library.
Введение
Для осуществления расчёта с использованием метода конечных элементов [1] любую геометрическую структуру сложной формы (чаще всего трёхмерную) необходимо разбить на простые фигуры, наиболее простыми и часто используемыми из которых являются тетраэдры [2]. Для решения задач расчёта деформации и прочности рассматриваемых структур для узлов полученных тетраэдров составляются дифференциальные уравнения в частных производных, система которых затем решается численными методами.
Вначале, при появлении этого метода, рассчитываемые фигуры разбивались на тетраэдры вручную, однако на современном этапе развития вычислительной техники и при существующей в настоящее время сложности рассматриваемых задач такой подход недопустим. Многие «тяжёлые» программы трёхмерного моделирования для автоматизированного разбиения структур на тетраэдры использует так называемую триангуляцию Делоне [12] или более сложные методы, однако алгоритмы такого разбиения являются как правило коммерчески закрытыми для конечного пользователя, который имеет возможность варьировать лишь некоторые параметры «вслепую», без понимания реально производимых преобразований.
Целью данной работы является разработка программы на свободно распространяемом высокоуровневом языке программирования Python [5], позволяющем автоматически разбивать сложную фигуру на тетраэдры максимально достижимого для верного описания исходной структуры размера по методу триангуляции Делоне, что даёт возможность при дальнейших
вычислениях с использованием метода конечных элементов минимизировать расчётное время и необходимые вычислительные мощности. Кроме того, очень важно, что разработка наглядного современного метода разбиения позволит исследователю не только достичь понимания данного процесса, но и с лёгкостью его модифицировать.
Материал и методы исследования
Основой применения триангуляции Делоне для любой трёхмерной фигуры является соблюдение следующего правила: все вершины тетраэдров, из которых составлена фигура, должны лежать за пределами сферы, описанной вокруг вершин текущего рассматриваемого при разбиении тетраэдра.
Для программной реализации этого правила на языке Python нет необходимости глубокого погружения в математические основания, так как в настоящее время существует функция Delaunay [4], осуществляющая преобразования Делоне, являющаяся составной частью мощной библиотеки научных расчётов SciPy. Данная библиотека является поистине уникальной для инженеров и учёных, осуществляющих разработки на Python, и поэтому уже многократно использовалась для решения разнообразных задач автором данной статьи [6; 7].
Также для разработки программы для разбиения фигур необходимо использование модуля работы с матрицами Numpy [8], с помощью которого создаётся массив для занесения в него исходных данных - координат точек внешней поверхности обрабатываемой фигуры. Так как исследование посвящено работе с трёхмерной графикой, необходимо использование ряда дополнительных модулей, предназначенных именно для выполнения трёхмерных построений, которые будут перечислены далее.
Рассмотрим последовательно алгоритм, согласно которому создан код разрабатываемой программы:
1. Импорт вышеупомянутых функций Python, графической библиотеки Matplotlib, а также следующих функций работы с трёхмерной графикой из модуля mpl_toolkits.mplot3d: Axes3D для создания базовой фигуры в
трёхмерной системе координат, art3d.Poly3DCollection для заполнения массива вывода изображения прямоугольниками и art3d. Line3DCollection для заполнения того же массива отрезками линий, делящих прямоугольники отрезками на части, образовывая при этом тетраэдры, являющиеся визуальным результатом работы программы.
2. Импорт функции combinations итерационного модуля itertools для создания возможных комбинаций сочетания данных.
3. Создание основной функции программы, комбинирующей возможные сочетания вершин тетраэдров Делоне и проверяющей, какие четыре из них попадают в одну сферу. При выполнении этого условия массивы прямоугольников и «разрезающих» их отрезков пополняются новыми примитивами.
4. Тело вычислительной части программы состоит только из команд расчёта по заданным координатам вершин исходной фигуры массива тесселяции [11] Делоне для замощения трёхмерной структуры прямоугольниками. Далее в цикле к вершинам всех созданных прямоугольников применяется основная функция п. 3.
5. Поэтапное представление результатов вычислений в графическом виде: создание трёхмерной системы координат и базовой фигуры, а также построение диаграммы по рассчитанным в п. 4 точкам, поверхностям и отрезкам (в совокупности разбивающим исходную фигуру на тетраэдры).
6. Сохранение полученной графической модели в файл заданного формата и разрешения (например, png с разрешением 600 точек на дюйм).
7. Вывод графической модели на монитор компьютера.
Рассмотрим несколько практических примеров применения созданной программы. В первом случае на тетраэдры разбивается куб единичных размеров. Результат представлен на рис. 1.
Рис. 1. Результат разбиения единичного куба на тетраэдры методом триангуляции Делоне
Рисунок подтверждает, что разбиение куба с помощью разработанной программы происходит корректно. При работе с программой можно задавать диаметр точек, обозначающих вершины тетраэдров, толщину линий - рёбер тетраэдров, а также цветовую гамму их боковых граней
Далее произведено разбиение на конечные элементы тетраэдральной формы более сложной структуры, имеющей в три раза большее количество вершин исходной фигуры (похожей на длинную немного изогнутую трубу прямоугольного сечения). Результаты представлены на рис. 2.
Рис. 2. Результат разбиения структуры усложнённой формы на тетраэдры
В представленном случае преобразование фигуры также происходит верно, в соответствии с разработанным алгоритмом.
После этого произведём деление реального технического объекта, турбинной лопатки, разработанным методом на тетраэдральные элементы с помощью программы с использованием триангуляции Делоне (рис. 3). Координаты профиля сопловой лопатки паровой турбины С-90-09А взяты из предыдущей работы автора (в которой также разрабатывалась программа на языке Python, однако совершенно для иных целей) [9].
Рис. 3. Разбивка сопловой лопатки паровой турбины с помощью разработанной программы,
использующей метод триангуляции Делоне
Из рис. 3 можно сделать вывод, что разбивка лопатки на конечные элементы тетраэдральной формы в целом выполнена успешно. Однако, в нижней части фигуры присутствуют некие лишние для последующего расчёта лопатки методом конечных элементов тетраэдры, которые необходимо исключить (отфильтровать) при дальнейшем совершенствовании программы. В данном случае их можно убрать путём исключения из созданных массивов
40
50
60
0
прямоугольников и отрезков примитивов, выходящих за контуры обрабатываемого объекта (то есть, введения некоторых дополнительных граничных условий). Подобного эффекта выхода тетраэдров за пределы обрабатываемой фигуры не возникнет при обработке двояковыпуклых или плоских профилей.
Заключение
В результате исследования создан алгоритм и программный код на языке Python, позволяющий разбивать любую трёхмерную фигуру на тетраэдры с использованием метода триангуляции Делоне. В работе показано, что разработанный метод позволяет разделять на тетраэдральные секции даже сложные объекты, например, турбинные лопасти. С использованием того же способа преобразования можно разработать, например, систему перегородок крыла самолёта или какого-либо облегчённого оболочечного корпуса.
Полученную совокупность тетраэдров можно использовать для расчётов фигуры методом конечных элементов, прикладывая к их вершинам соответствующие нагрузки и решая систему дифференциальных уравнений. Такие расчёты также можно осуществить с помощью программы на языке Python, что было доказано в работе автора [10].
Разработанную программу можно с успехом применять для обучения основам машинной графики, для дизайнерских целей, для проектирования игр (например, объёмных паззлов [3]). При этом сложный объект оказывается составленным их множества однотипных фигур - тетраэдров, причём важно, что можно задавать нужную степень детализации структуры.
По результатам работы можно сделать вывод, что язык программирования Python с библиотеками функций, разработанными для него на данный момент, позволяет наглядным и достаточно простым путём решить не только поставленную в данном исследовании задачу, но и множество других проблем, в том числе связанных с дальнейшим развитием рассмотренного метода.
Библиографический список:
1. Алферов И.В. Определение линейного перемещения в раме методом Максвелла-Мора и методом конечных элементов. // Инновации. Наука. Образование. 2021. № 26. С. 1422-1426.
2. Бритвин Е.И. Четырехузловой тетраэдрический конечный элемент с вращательными степенями свободы в узлах. // Строительная механика и расчет сооружений. 2018. № 5 (280). С. 66-73.
3. Виниченко Е. Особенности проектирования доступной среды парковых зон. // В сборнике: Материалы международного научного форума обучающихся «Молодежь в науке и творчестве». [Электронный ресурс]: сборник научных статей. 2017. С. 111-113.
4. Дубов И.Р. Статистические свойства логарифмов площади элементов триангуляции Делоне при равномерном законе распределения. // Проектирование и технология электронных средств. 2020. № 2. С. 43-47.
5. Ильичев В.Ю. Создание параметрических конечно-элементных трехмерных объектов с использованием функций Python. // Системный администратор. 2021. № 5 (222). С. 82-85.
6. Ильичев В.Ю. Разработка программы для исследования аттрактора Лоренца и ее использование. // Сложные системы. 2021. № 1 (38). С. 56-63.
7. Ильичев В.Ю. Использование алгоритма дифференциальной эволюции для решения оптимизационных задач. // Системный администратор. 2021. № 4 (221). С. 80-83.
8. Ильичев В.Ю. Разработка программных средств увеличения изображений с использованием их фрактальных свойств. // Системный администратор. 2021. № 1-2 (218-219). С. 124-127.
9. Ильичев В.Ю., Гридчин Н.В. Визуализация масштабируемых 3D-моделей с помощью модуля Matplotlib для Python. // Системный администратор. 2020. № 12 (217). С. 86-89.
10. Ильичев В.Ю. Использование библиотеки ZenCAD языка Python для разработки универсальной методики создания объемных изделий. // Системный
администратор. 2021. № 6 (223). С. 82-85.
11. Тимохин П.Ю., Михайлюк М.В. Метод извлечения поверхностей уровня на GPU с помощью программируемой тесселяции. // Программирование. 2020. № 3. С. 66-72.
12. Чумаченко А.А., Шадричева М.С. Триангуляция Делоне. // Аллея науки. 2017. Т. 1. № 12. С. 413-415.