Научная статья на тему 'ПРОГРАММНО-МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ЯЗЫКА ПАРАМЕТРИЧЕСКОГО ОПИСАНИЯ ОПТИКО-ГЕОМЕТРИЧЕСКИХ СЦЕН'

ПРОГРАММНО-МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ЯЗЫКА ПАРАМЕТРИЧЕСКОГО ОПИСАНИЯ ОПТИКО-ГЕОМЕТРИЧЕСКИХ СЦЕН Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
19
4
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ВЕРШИНА / ГРАНЬ / ПОВЕРХНОСТЬ / ТРИАНГУЛЯЦИЯ / ОПТИКО-ГЕОМЕТРИЧЕСКАЯ МОДЕЛЬ / ЯЗЫК ОПИСАНИЯ ТРЁХМЕРНЫХ СЦЕН / ГЕОМЕТРИЧЕСКИЙ ПРИМИТИВ / ФОРМАТ ДАННЫХ / СТАНДАРТ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Олейников Максим Иванович, Лутов Игорь Олегович, Осипова Ирина Викторовна

В статье представлена программно-математическая реализация формирования вершин граней и поверхностей геометрических примитивов, входящих в геометрическую сцену средствами языка описания оптико-геометрических сцен (SL3D). Использование такого языка предполагается при решении задач технического зрения. Особенностью SL3D является представление трёхмерных моделей в виде набора параметров, заданных в явном виде. Для корректной работы языка в задачах численного моделирования методами конечных элементов приведены математические выражения для расчёта вершин геометрических примитивов и базовые элементы программного кода, позволяющие формировать массивы вершин и граней для формирования их внутренней и внешней поверхностей.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Олейников Максим Иванович, Лутов Игорь Олегович, Осипова Ирина Викторовна

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SOFTWARE-MATHEMATICAL SUPPORT OF THE LANGUAGE OF PARAMETRIC DESCRIPTION OF OPTICAL-GEOMETRIC SCENES

The article presents a software-mathematical implementation of the formation of vertices offaces and surfaces of geometric primitives included in a geometric scene by means of a high-level language for describing optical-geometric scenes (SL3D). The use of such a language is expected when solving problems of technical vision. A feature of SL3D is the representation of three-dimensional models as a set of explicitly specified parameters. For the correct operation of the language in problems of numerical modeling by finite element methods, mathematical expressions are given for calculating the vertices of geometric primitives and basic elements of the program code that allow you to form arrays of vertices and faces to form their inner and outer surfaces.

Текст научной работы на тему «ПРОГРАММНО-МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ЯЗЫКА ПАРАМЕТРИЧЕСКОГО ОПИСАНИЯ ОПТИКО-ГЕОМЕТРИЧЕСКИХ СЦЕН»

Sukhinin Pavel Eduardovich, enegineer of the 2 category, patiksons@gmail. com Russia, Tula, Special Design Bureau "Oktava"

Tarkhov Andrei Nikolaevich, design enegineer of the 2 category, tarhovi42009@rambler.ru, Russia, Tula, Special Design Bureau "Oktava"

УДК 004.942

DOI: 10.24412/2071-6168-2023-2-146-153

ПРОГРАММНО-МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ЯЗЫКА ПАРАМЕТРИЧЕСКОГО ОПИСАНИЯ ОПТИКО-ГЕОМЕТРИЧЕСКИХ СЦЕН

М.И. Олейников, И.О. Лутов, И.В. Осипова

В статье представлена программно-математическая реализация формирования вершин граней и поверхностей геометрических примитивов, входящих в геометрическую сцену средствами языка описания оптико-геометрических сцен (SL3D). Использование такого языка предполагается при решении задач технического зрения. Особенностью SL3D является представление трёхмерных моделей в виде набора параметров, заданных в явном виде. Для корректной работы языка в задачах численного моделирования методами конечных элементов приведены математические выражения для расчёта вершин геометрических примитивов и базовые элементы программного кода, позволяющие формировать массивы вершин и граней для формирования их внутренней и внешней поверхностей.

Ключевые слова: вершина, грань, поверхность, триангуляция, оптико-геометрическая модель, язык описания трёхмерных сцен, геометрический примитив, формат данных, стандарт.

Настоящая статья является продолжением и развитием статьи [1], ранее опубликованной авторами, в которой был предложен высокоуровневый язык описания оптико-геометрических сцен, основанный на представлении трёхмерных моделей в виде набора параметров, заданных в явном виде. Данный язык предлагается к использованию в задачах технического зрения, в частности, для решения обратных задач по определению формы объектов, входящих в состав трёхмерной сцены.

Целью разработки такого языка послужила идея для создания возможности хранения и обмена данными об объектах трёхмерной сцены заданными в виде набора параметров, что позволяет значительно снизить объём хранимых данных, а также использовать их в явном виде, что наиболее актуально при решении задач технического зрения [2-4].

Фактически данный язык претендует на прототип стандарта по обмену данными о форме и ориентации объектов (геометрических примитивов), заданных в виде параметров, определяющих непосредственно их форму, ориентацию и положение в строительной системе координат наряду с использований таких преобразований как: сдвиг, разворот и масштаб. Рабочее название такого языка предлагается как SL3D (simple language 3 dimensional) - простой язык 3Д. В качестве аналогов выступают VRML -формат, в основе которого лежит язык моделирования виртуальной реальности (в англ. литературе The Virtual Reality Modeling Language) - это текстовый формат файла «VRL» для представления 3D моделей. Определён в международном стандарте ISO / IEC 14772 [5] и его более новое развитие в виде X3D [6].

Кроме того, средствами языка SL3D предусмотрено хранение данных о характеристиках отражения материалов или покрытий с учётом физически корректно построенных моделей отражения [7].

В данной статье приведено математическое описание расчёта вершин и граней примитивов, приведённых в [1], которые формируются для создания конечных элементов и дальнейшего численного расчёта, с учётом предложенных в языке SL3D параметров.

Постановка задачи. Для решения практических задач, например, по моделированию процесса отражения света от элементов - объектов трёхмерной сцены требуется поверхностное геометрическое моделирование, именно этот вид моделирования определяется в языке SL3D.

Формирование поверхности геометрического примитива состоит из двух этапов:

1) формирование массива вершин;

2) формирование внешних и внутренних граней.

Для формирования массива вершин требуется определить правило, по которому будет рассчитываться каждая вершина и порядок перебора параметров. Так как формируется поверхность, а не объём, то для её задания достаточно использование двух параметров, третий - вырождается.

Для расчёта положения вершин необходимо знание параметров объекта, а также математические связи этих параметров, а также порядок перебора этих параметров.

Следует отметить, что порядок расчёта вершин определяется также формой граней - треугольных или содержащих большее количество вершин. Наиболее распространённым стандартом в современном компьютерном моделировании является использование треугольных граней, а процесс разбиения поверхности на такие грани называется триангуляцией.

Далее процесс формирования вершин и граней поверхностей примитивов будет приведён для треугольных граней для сферических, цилиндрических, конических, параболических и плоских поверхностей.

Формирование массива вершин. Рассмотрим подробнее процесс формирования вершин и граней для такого вида поверхностей как конические. Параметрами для описания этих поверхностей являются:

- радиус нижнего основания, R\ ;

- высота, H;

- радиус верхнего основания, R2;

- начальный угол, rstart;

- конечный угол, rend;

- число разбиений по долготе, Nr (по углу r);

- число разбиений по высоте, NH.

В соответствии с количеством разбиений по долготе и высоте необходимо сформировать массив точек в трёхмерном пространстве размерностью Nv -NH:

Рщ-Nh = {^10, у, z),...PNll+NH (X, у, z)|, где х, y, z - координаты точек в пространстве.

С учётом этого перебор идёт по следующим математическим параметрам i - по долготе j - по высоте. Как было сказано выше, третьего параметра для формирования поверхности не требуется. Ниже приведены уравнения по расчёту координат вершин конических поверхностей

= (^1 -j - АД) • cosivstart + i •Arç) ;

yij=j-AH; (\)

Zij = (Rl -j- A R) - sin (Vstart + i -Arç). где i = 0,1. ..AL ; / = 0,1. ..NH ; Arç = Vend Vstart - шаг изменения долготы по параметру i; A R = Rl Й2 -

' NH

шаг изменения долготы по параметру j.

Для формирования всего массива вершин P[ ] размерностью Nv •NH используется двойной вложенный цикл по параметрам j и i. Далее приведён пример на языке C++.

for(int j = 0; j <= iCountOfParam_2; j++) for(int i = 0; i <= iCountOfParam_\; i++)

{

Vert.X = CalcPointX(i, j, StPar\, EnPar\, DlPar\, StPar2, EnPar2, DlPar2); Vert.Y = CalcPointY(i, j, StPar\, EnPar\, DlPar\, StPar2, EnPar2, DlPar2); Vert.Z = CalcPointZ(i, j, StPar\, EnPar\, DlPar\, StPar2, EnPar2, DlPar2); Vertices.push_back(tmpVert);

}

Здесь функции CalcPointX, CalcPointY, и CalcPointZ возвращают значения координат х, y, и z соответственно с учётом (\) в элемент структуры Vertex, содержащей в себе указанные координаты, который помещается в массив вершин «Vertices».

Указанные функции принимают следующие аргументы: StPar\ - начальное значение переменной связанной с первым параметром. EnPar\- конечное значение переменной связанной с первым параметром. DlPar\ - шаг изменения переменной связанной с первым параметром. Аналогично для второго параметра.

Результат формирования вершин конической поверхности приведён на рис. \. Формирование массива граней

Треугольные площадки формируются посредством объединения точек-вершин из массива

P[NVNH] рис. \.

Массив вершин может использоваться как для формирования внешних граней, так и внутренних.

Для этого необходимо сформировать пару треугольников ADB и BDC для граней наружной поверхности и соответственно пару треугольников BDA и CDB - для внутренней. Если формируются обе поверхности одновременно, то создаётся две пары треугольников.

Буквенное обозначение вершины в составе треугольника задаёт порядок обхода этих вершин для определения стороны площадки, которая будет лицевой по правилу буравчика. Тогда нормаль к площадке рассчитывается как векторное произведение NADB = AD х АВ и JVBDC = С5 х CD векторов,

получаемых из точек-вершин для внешней поверхности. Для определения нормалей граней внутренней поверхности необходимо изменить порядок следования векторов в векторном произведении.

Создание полной поверхности внутренней или внешней требует разработки функции, позволяющей перебором номеров вершин, входящих в массив «Vertices» сформировать массивы граней - треугольников этих поверхностей.

Ниже приведён фрагмент кода на C++, формирующий массив индексов вершин, с использованием которого затем будут формироваться массивы граней уже независимо от вида геометрического примитива.

Независимость работы данного кода от вида примитива обеспечивается тем, что для видов указанных поверхностей построение вершин осуществляется по двум параметрам j и i, что позволяет строить регулярные сетки с заданным шагом разбиения по геометрическим параметрам, определённым языком SL3D. Отличаются только математические уравнения для расчёта координат вершин, а формирование массива индексов вершин и массива граней так же как и непосредственно линейного массива вершин происходит в одном и том же порядке с использованием унифицированных программных функций и типов переменных.

for(int j = 0; j < iCountOfParam_2; j++) {

for(int i = 0; i < iCountOfParam_1; i++) {

Vert_numb VertN;

int p2 = i + 0 + (iCountOfParam_1+1)*(j+1); // определяем вершины входящие в

int p1 = i + 0 + (iCountOfParam_1+1)*j; // треугольник ADB

int p3 = i + 1 + (iCountOfParam_1+l)*j; //

if (iSurfaceType == 1 || iSurfaceType == 3)

{//Если поверхность внешняя

VertN.A = p1; //

VertN.B = p2; // треугольник ADB VertN.C = p3; // VertIndexes.push_back(VertN); } if (iSurfaceType == 2 || iSurfaceType == 3)

{//Так как определяем внутреннюю поверхность, то обходим наоборот VertN.A = p3; //

VertN.B = p2; // треугольник BDA VertN.C = p1; //

VertIndexes.push_back(VertN); }

pi = i + 1 + (iCountOfParam_1+1)*j; //определяем вершины входящие в

p2 = i + 0 + (iCountOfParam_1+i)*(j+1); //треугольник BDC

p3 = i + 1 + (iCountOfParam_1+i)*(j+1); //

if (iSurfaceType == 1 || iSurfaceType == 3)

{//Если поверхность внешняя

VertN.A = p1; //

VertN.B = p2; //треугольник BDC VertN.C = p3; //

VertIndexes.push_back(VertN); }

if (iSurfaceType == 2 || iSurfaceType == 3)

{//Так как определяем внутреннюю поверхность, то обходим наоборот VertN.A = p3; //

VertN.B = p2; //треугольник CDB VertN.C = p1; //

VertIndexes.push_back(VertN); }

}//цикл по i }//цикл по j

В данном коде приведён двойной вложенный цикл перебора параметров j и i. Выполнение этого блока позволяет сформировать линейный массив «Vertlndexes», содержащий в себе индексы (номера) вершин, которые будут формировать треугольные грани поверхностей (внутренней/внешней) примитива. В качестве элементов массива выступает структура Vert_numb, включающая в себя ссылки на номера вершин, из которых в дальнейшем будут формироваться треугольные грани с вершинами ADB и BDC -для внешней поверхности и BDA и CDB - для внешней.

Определение данной структуры на языке C++ приведено ниже:

struct Vert_numb //ссылка на номера(индекс) вершины {

int A; int B;

int C; };

Параметр «iSurfaceType», определяет какая поверхность задаётся: внешняя, внутренняя или

обе.

На заключительном этапе формируются непосредственно треугольные грани примитива. Каждая грань храниться в структуре «Triangle» - треугольная площадка, вид которой приведён ниже:

struct Triangle {//треугольная площадка Vertex V0; // Vertex V1; //вершины Vertex V2; //

Vertex Normal; //Вектор нормали

double ObservationCoeff; //коэффициент видимости

double Area; //Площадь };

Далее приведён блок кода, позволяющий формировать грани внешней/внутренней поверхности на основе линейного массива индексов вершин, включающий в себя с учётом предыдущего блока как грани внешней, так и внутренней поверхностей:

for(int i = 0; i < iNumOfTriangles; i++)

{

Vertex vrA = Vertices[VertIndexes[i].A];

Vertex vrB = Vertices[VertIndexes[i].B];

Vertex vrC = Vertices[VertIndexes[i].C];

Triangle tr = SetTriangle(vrA, vrB, vrC);

Triangles.push_back(tr);

}

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Таким образом, для каждого геометрического примитива формируется массив площадок «Triangles», а работа непосредственно с ним позволяет выполнять специализированные расчёты, например, связанные с отражением света и т.п.

Обобщение

Для формирования вершин и граней для других типов поверхностей происходит аналогичным образом, как и для конических. Единственным отличием является использование вместо выражения (1) следующих ниже выражений.

Для формирования сферических поверхностей в языке SL3D используются следующие параметры:

- радиус сферы, Rsph;

- высота отсечения сверху, H ;

- высота отсечения снизу, H2;

- начальный угол, rstart;

- конечный угол, rend;

- число разбиений по долготе, Nv (по углу r рис. 2);

- число разбиений по широте, NK (по углу к рис. 2)

С учётом этого приведём следующие выражения для расчёта координат вершин:

•БШ(к8ЬагЬ +] •Дк) • + 1 • Д?7); уц =Я5рН • соБ(к,(аг(+/ •Дк);

% =Я5рк • соБ(кЛаП +; •Дк) • соБ(^аП + 1 • Д Г]);

{Хзрк-НА {Я5р11-Н2\ где к5(аг( = асоБ I—--1 - начальный угол по широте; кепй = асоБ I—--1 - конечный угол по широ-

V ^БрК / V ^БрК )

те; ДК = кепа-^гагг - шаг по углу к; Д/ = - шаг по углу г

Для формирования параболических поверхностей в языке SL3D используются следующие параметры:

- радиус, R\ на срезе;

- высота, Н\;

- высота отсечения, Н2;

- начальный угол, Щап,

- конечный угол, 77^;

- число разбиений по долготе, N (по углу 77);

- число разбиений по высоте, N (и по радиусу).

С учётом этого приведём следующие выражения для расчёта координат вершин:

= (Rstart +]' •AR) •cos(r/start + i •Arj) ; yij = (Rstart +j •AR)2 ■ -j ;

zij = (fistart +У •AR) •siniV start + i •At7).

где R

start = - начальное положение по радиусу; Rend = fii - конечное положение по радиусу;

Л

AR =

Rend Rstart N7

шаг по радиусу.

Для плоских формирования поверхностей типа круг в языке SL3D используются следующие параметры:

- внешний радиус, Яи

- внутренний радиус, Я2;

- начальный угол,

- конечный угол, 77^;

- число разбиений по долготе, N1;

- число разбиений по радиусу, N2.

С учётом этого приведём следующие выражения для расчёта координат вершин, который за исключением расчёта координаты у аналогичен (1):

= - у •№) • + [ •Аг]); = 0; ^ = (Я1 -] •AR) + 1 • Ац).

Отличием от конических поверхностей является равенство нулю координат у^. Для плоских формирования поверхностей типа прямоугольник в языке SL3D используются следующие параметры:

- глубина, Б;

- ширина, Ш;

- число разбиений по долготе, М;

- число разбиений по глубине, N2.

С учётом этого приведём следующие выражения для расчёта координат вершин:

хц = i-AW- AWstart; уц = 0;

= j-AD- ADS

где АШ =--шаг по Ш (оси х); N1 - число разбиений по ширине Ш; АШ51аг1 - начальное положение по

N1

оси х; АБ =--шаг по глубине Б (оси 2); ^ - число разбиений по глубине Б; А05(аг( - начальное по-

ложение по оси 2.

В следующей таблице приведена связь математических I и] с параметрами геометрических примитивов, используемых в функциях «СакРотЪ»

параметров

Связь математических параметров с параметрами примитивов

Тип примитива Cone Sphere Parabola Circle Plane

Параметр 1 2 3 4 5

перебор по:

Pari "i" Углу ц Углу ц Углу ц Углу ц Ширине W

Par2 "j" Радиусу R Углу к Радиусу R Радиусу R Глубине D

Использование данной таблицы позволяет унифицировать программный код и алгоритмы расчёта вершин и формирования граней геометрических примитивов.

Заключение

В настоящей статье авторами представлены математические выражения и базовые программные блоки на языке С++ для программно-математической поддержки высокоуровневого языка описания 3D моделей «SL3D», что позволит в дальнейшем реализовать его как новый унифицированный формат данных о трёхмерных сценах или же как стандарт. Основным отличием языка SL3D от других форматов и стандартов является уникальная система параметров, заданных в явном виде, для описания таких типов поверхностей как, сферические, параболические, конические и плоские поверхности круглого и прямоугольного типов. Такая система представления данных позволяет строить гибкие системы по решению обратных задач с обратной связью через перебор или изменение геометрических параметров по заданному закону с целью минимизации или максимизации параметров, влияющих на решение разнородных задач, решаемых методами конечных элементов.

Несмотря на использование конечных элементов в виде треугольных граней-площадок именно система параметров языка SL3D и их программно-математическая реализация, предложенная в настоящей статье, позволит достичь требуемой унификации присущей формату данных или стандарту.

С учётом сказанного можно утверждать, что предложенная структура языка является гибкой и имеет широкий потенциал для расширения, а круг обратных задач, решаемых с использованием SL3D,

151

может быть обширным.

Список литературы

1. Олейников М.И., Лутов И.О., Королёв С.Ю., Протасова А.В. Язык параметрического описания оптико-геометрических сцен в задачах технического зрения // Известия Тульского государственного университета. Технические науки. 2022. Вып. 12. С. 347-357.

2. Moeen Valipoor, Angélica de Antonio Recent trends in computer vision-driven scene understanding for VI/blind users: a systematic mapping. Universal Access in the Information Society. January 2022.

3. Niall O' Mahony, Lenka Krpalkova, Sean Campbell, Daniel Riordan. Computer Vision for 3D Perception A review. Intelligent Systems Conference 2018 6-7 September 2018 | London, UK.

4. A F M Saifuddin Saif, Zainal Rasyid Mahayuddin. Vision based 3D Object Detection using Deep Learning: Methods with Challenges and Applications towards Future Directions. (IJACsA) International Journal of Advanced Computer Science and Applications, Vol. 13, No. 11, 2022.

5. The Virtual Reality Modeling Language International Standard ISO/IEC 14772-1:1997 [Electronic resource] URL: https://www.web3d.org/documents/specifications/14772/V2.0/index.html (дата обращения: 15.01.2023).

6. Extensible 3D (X3D). ISO/IEC 19775-1:2008. [Electronic resource] URL: https://www.web3d.org/documents/specifications/19775-1/V3.2/Part01/Architecture.html (дата обращения: 15.01.2023).

7. Чёста О.И., Осипова И.В., Олейников М.И. Феноменологический подход к построению физически корректной модели отражения материалов и покрытий в видимом диапазоне // Известия Тульского государственного университета. Технические науки. 2022. Вып. 3. С. 280-288.

Олейников Максим Иванович, канд. техн. наук, ст. науч. сотр. лаборатории, vka@mil.ru, Россия, Санкт-Петербург, Военно-космическая академия имени А. Ф.Можайского,

Лутов Игорь Олегович, канд. техн. наук, ст. науч. сотр. лаборатории, Россия, Санкт-Петербург, Военно-космическая академия имени А. Ф.Можайского,

Осипова Ирина Викторовна, мл. науч. сотр. лаборатории, Россия, Санкт-Петербург, Военно-космическая академия имени А. Ф.Можайского

SOFTWARE-MATHEMATICAL SUPPORT OF THE LANGUAGE OF PARAMETRIC DESCRIPTION OF

OPTICAL-GEOMETRIC SCENES

M.I. Oleynikov, I.O. Lutov, I.V. Osipova

The article presents a software-mathematical implementation of the formation of vertices offaces and surfaces of geometric primitives included in a geometric scene by means of a high-level language for describing optical-geometric scenes (SL3D). The use of such a language is expected when solving problems of technical vision. A feature of SL3D is the representation of three-dimensional models as a set of explicitly specified parameters. For the correct operation of the language in problems of numerical modeling by finite element methods, mathematical expressions are given for calculating the vertices of geometric primitives and basic elements of the program code that allow you to form arrays of vertices and faces to form their inner and outer surfaces.

Key words: vertex, face, surface, triangulation, optical-geometric model, 3D scene description language, geometric primitive, data format, standard.

Oleynikov Maksim Ivanovich, candidate of technical sciences, senior researcher of laboratory, vka@mil.ru, Russia, Sankt-Peterburg, Mozhaisky Military Aerospace Academy,

Lutov Igor Olegovich, candidate of technical sciences, senior researcher of military institute (research), Russia, Saint-Petersburg, Military Space Academy of Mozhaisky,

Osipova Irina Viktorovna, junior researcher, Russia, Sankt-Peterburg, Mozhaisky Military Aerospace

Academy

i Надоели баннеры? Вы всегда можете отключить рекламу.