Программирование, 2019, № 1, стр. 52-58

СПОСОБ МОДЕЛИРОВАНИЯ ФУНКЦИОНАЛЬНОЙ ОБЛАСТИ ДЛЯ КРИВЫХ, ПОСТРОЕННЫХ НА ОСНОВЕ ЛИНЕЙНОЙ КОМБИНАЦИИ БАЗИСНЫХ МНОГОЧЛЕНОВ БЕРНШТЕЙНА

А. В. Толок a*, Н. Б. Толок a**, М. А. Локтев b***

a Институт проблем управления им. В.А. Трапезникова РАН
117997 Москва, ул. Профсоюзная, 65, Россия

b Московский государственный технологический университет “Станкин”
127055 Москва, Вадковский пер., 1, Россия

* E-mail: a.tolok@stankin.ru
** E-mail: nat_tolok@mail.ru
*** E-mail: m.loktev@stankin.ru

Поступила в редакцию 30.08.2018
После доработки 03.09.2018
Принята к публикации 03.09.2018

Полный текст (PDF)

Аннотация

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

1. ВВЕДЕНИЕ

Развитие средств R-функционального моделирования (RFM) для аналитического построения сложных геометрических моделей [14], а также появление метода функционально-воксельного моделирования таких моделей на компьютере [510] ставит перед разработчиками средств компьютерного проектирования новые задачи, приводящие процесс описания сложных функциональных зависимостей к традиционным способам конструирования.

Описанный функцией на выбранной области геометрический объект, где нулевым значением функции является его граница, представляет собой максимально полную и точную геометрическую модель на локальном уровне ее представления.

Метод (RFM), достаточно широко представленный в монографии К.В. Максименко-Шейко [11], получил свое развитие в вопросах описания сложных геометрических моделей и описывает конструктивные средства теоретико-множественных операций над функциями-предикатами:

$\left\{ \begin{gathered} {{\varpi }_{1}} \wedge {{\varpi }_{2}} = {{\varpi }_{1}} + {{\varpi }_{2}} - \sqrt {\varpi _{1}^{2} + \varpi _{2}^{2}} ; \hfill \\ {{\varpi }_{1}} \vee {{\varpi }_{2}} = {{\varpi }_{1}} + {{\varpi }_{2}} + \sqrt {\varpi _{1}^{2} + \varpi _{2}^{2}} ; \hfill \\ {{\varpi }_{1}} = - {{\varpi }_{1}}, \hfill \\ \end{gathered} \right.$
где ${{\varpi }_{1}} = f({{x}_{n}}),$ ${{\varpi }_{2}} = g({{x}_{n}}).$

Однако метод RFM является средством математического описания объекта и требует приличной математической подготовки для применения в инженерных задачах. К тому же компьютерный расчет значений в точках области аналитических объектов RFM напрямую зависит от сложности вычисляемых выражений и требует значительных ресурсов для хранения и обработки такой информации. Попытки аппроксимации таких моделей полигонами сводят к минимуму существующие преимущества аналитической модели перед традиционными компьютерными представлениями геометрического объекта.

Метод функционально-воксельного моделирования (ФВМ), описанный в монографии А.В. Толока [12, 13], позволяет организовать компьютерное представление области функции соразмерными воксельными образами на основе разложения функции на локальные геометрические характеристики в каждой точке воксельного пространства. На рисунке 1 демонстрируется функционально-воксельная модель для тригонометрической функции вида

$z = 5(ysin\pi x + {{x}^{2}}cos\pi y).$
Рис. 1.

Образное представление коэффициентов для локальной функции вида $z = (d{\text{/}}c) - (a{\text{/}}c)x - (b{\text{/}}c)y$.

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

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

2. ОПИСАНИЕ ФУНКЦИОНАЛЬНОЙ ОБЛАСТИ НА ОСНОВЕ МНОГОЧЛЕНА БЕРНШТЕЙНА

Кривая Бернштейна (больше известная как кривая Безье) строится на основе применения полиномов С.Н. Берштейна [15]:

${{b}_{{i,n}}}(t) = \left( {\begin{array}{*{20}{c}} n \\ i \end{array}} \right){{t}^{i}}{{(1 - t)}^{{n - i}}},$
где $\left( \begin{gathered} n \\ i \\ \end{gathered} \right) = \frac{{n!}}{{i!(n - i)!}}$ – число сочетаний из $n$ по $i,$ $n$ – степень полинома, i – порядковый номер опорной вершины.

Квадратичная кривая $(n = 2)$ принимает следующее описание с применением трех опорных точек $({{P}_{0}},{{P}_{1}},{{P}_{2}})$:

$B(t) = {{(1 - t)}^{2}}{{P}_{0}} + 2t(1 - t){{P}_{1}} + {{t}^{2}}{{P}_{2}},\quad t \in [0,1].$

Параметр $t$ в таком случае выражается через координаты опорных точек t = = $\frac{{{{P}_{0}}\, - \,{{P}_{1}}\, \pm \,\sqrt {({{P}_{0}}\, - \,2{{P}_{1}}\, + \,{{P}_{2}})} B\, + \,P_{1}^{2}\, - \,{{P}_{0}}{{P}_{2}}}}{{{{P}_{0}} - 2{{P}_{1}} + {{P}_{2}}}},$ при P0 – 2P1 + + ${{P}_{2}} \ne 0;$

$t = \frac{{B - {{P}_{0}}}}{{2({{P}_{1}} - {{P}_{0}})}},$ при ${{P}_{0}} - 2{{P}_{1}} + {{P}_{2}} = 0$ и ${{P}_{1}} \ne {{P}_{0}};$

$t = \sqrt {\frac{{B - {{P}_{0}}}}{{{{P}_{2}} - {{P}_{1}}}}} ,$ при ${{P}_{0}} = {{P}_{1}} \ne {{P}_{2}},$ $B$ – текущая точка кривой.

Чтобы построить область функции $z = f(x,y)$ для представленной квадратичной кривой достаточно описать, например, выражение:

$z = y - {{(1 - t)}^{2}}{{x}_{0}} + 2t(1 - t){{x}_{1}} + {{t}^{2}}x,\quad {\text{г д е }}$
(1)
$t = \frac{{{{x}_{0}} - {{x}_{1}} + \sqrt {({{x}_{0}} - 2{{x}_{1}} + {{x}_{2}})x + x_{1}^{2} - {{x}_{0}}{{x}_{2}}} }}{{{{x}_{0}} - 2{{x}_{1}} + {{x}_{2}}}},$
при условии, что: ${{x}_{0}} - 2{{x}_{1}} + {{x}_{2}} \ne 0.$

При выполнении поставленного условия получим квадратично гладкую поверхность $z = f(x,y),$ ограниченную заданной областью, где $f(x,y) = 0$ определяет кривую Безье, выражаемую уравнением $y = g(x).$

Для построения области $z = f(x,y)$ воспользуемся системой РАНОК 2D, используемой для построения плоской функционально-воксельной модели [5]. Система имеет встроенный формульный интерпретатор и осуществляет линейную аппроксимацию на области определения функции для получения образов функционально-воксельной модели. При этом существует возможность выделения цветом положительной области функции, а также управления точностью аппроксимации габаритами выводимого графического образа. В целом система RANOK 2D многофункциональна и применяется для исследования возможностей применения функционально-воксельных моделей в различных расчетных приложениях.

На языке интерпретатора системы РАНОК 2D получим следующий вид описания функции:

RECTANGLE(0,0,1,1) // область определения функции

RECTBMP(400,400) // область графического вывода изображения

ARGUMENT x,y // аргументы области определения функции

CONSTANT $X0 = 0.$ // задание координат опорных точек

CONSTANT $Y0 = 0.$

CONSTANT $X1 = 0.7$

CONSTANT $Y1 = 1.$

CONSTANT $X2 = 1.$

CONSTANT $Y2 = 0.$

// Расчет параметра $t$, выраженный через аргумент $x$ и опорные точки

FUNCTION t = (X0 – X1 + ((X0 – 2*X1 + X2)*x + + X1^2 – X0*X2)^0.5)/(X0 – 2*X1 + X2)

// Расчет области значений функции

FUNCTION z = y – (1 – t)^2*X0 + 2*t*(1 – t)*X1 + + t^2*X2

RETURN z

Результат построения функции z по заданным в примере опорным точкам $({{x}_{0}} = 0,$ ${{y}_{0}} = 0,$ ${{x}_{1}}$ = = 0.7, ${{y}_{1}} = 1,$ ${{x}_{2}} = 1,$ ${{y}_{2}} = 0)$ на области $x \in [0,1]$ $y \in [0,1]$ представлен на рисунке 2. Плавное изменение градации серого тона на всей области изображения говорит о гладкости полученной поверхности z. Более темная зона закраски (в цветном варианте синяя) выделяет положительную область значений функции z, демонстрируя изгиб кривой Безье по своей границе, где значение z = 0. Прямыми линиями соединены опорные точки кривой Безье.

Рис. 2.

Построение поверхности для описания области функции кривой Безье.

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

3. ПОСТРОЕНИЕ КРИВОЙ СОЧЕТАНИЕМ ЛИНЕЙНЫХ МНОГОЧЛЕНОВ БЕРНШТЕЙНА

Рассмотрим алгоритм построения той же кривой Безье, на который обратил в свое время внимание Поль де Кастельджо [13]. Он интересен тем, что позволяет конструировать из простых линейных многочленов Бернштейна кривую любого порядка. Например, квадратичная кривая моделируется на основе сочетания двух линейных многочленов:

$\begin{gathered} B(t) = (1 - t){{Q}_{0}} + t{{Q}_{1}},\quad t \in [0,1], \\ {{Q}_{0}}(t) = (1 - t){{P}_{0}} + t{{P}_{1}},\quad {{Q}_{1}}(t) = (1 - t){{P}_{1}} + t{{P}_{2}}. \\ \end{gathered} $

Геометрический смысл такого сочетания демонстрируется на рисунке 3 [13].

Рис. 3.

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

В свою очередь кубическая кривая строится по тому же принципу с нарастанием элементов (рис. 4)

$\begin{gathered} B(t) = (1 - t){{R}_{0}} + t{{R}_{1}},\quad t \in [0,1], \\ {{R}_{0}}(t) = (1 - t){{Q}_{0}} + t{{Q}_{1}},\quad {{R}_{1}}(t) = (1 - t){{Q}_{1}} + t{{Q}_{2}}, \\ {{Q}_{0}}(t) = (1 - t){{P}_{0}} + t{{P}_{1}},\quad {{Q}_{1}}(t) = (1 - t){{P}_{1}} + t{{P}_{2}}, \\ {{Q}_{2}}(t) = (1 - t){{P}_{2}} + t{{P}_{3}}, \\ \end{gathered} $
что говорит о конструктивности алгоритма и применимости его в автоматизации.

Рис. 4.

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

Построим алгоритм определения области функции z на основе сочетания линейных многочленов Бернштейна.

Из построения квадратичной кривой (рис. 3) видно, что прямая $({{Q}_{0}}{{Q}_{1}})$ является касательной к кривой Безье при текущем параметре t.

Выразим параметр $t$ через аргумент x на промежутке $[{{x}_{0}},{{x}_{2}}]$

$\begin{gathered} t = \frac{{x - {{x}_{0}}}}{{{{x}_{2}} - {{x}_{0}}}},\quad {\text{п р и }}\quad {{x}_{0}} \ne {{x}_{2}}\quad {\text{и }} \\ {{x}_{1}} - {{x}_{0}} = {{x}_{2}} - {{x}_{1}}. \\ \end{gathered} $

Тогда построение квадратичной кривой Безье по трем заданным точкам ${{P}_{0}},{{P}_{1}},{{P}_{2}}$ можно описать как

$\begin{gathered} {{x}_{{{{Q}_{0}}}}} = (1 - t){{x}_{0}} + t{{x}_{1}};\quad {{y}_{{{{Q}_{0}}}}} = (1 - t){{y}_{0}} + t{{y}_{1}}; \\ {{x}_{{{{Q}_{1}}}}} = (1 - t){{x}_{1}} + t{{x}_{2}};\quad {{y}_{{{{Q}_{1}}}}} = (1 - t){{y}_{1}} + t{{y}_{2}}; \\ z = ({{y}_{{{{Q}_{0}}}}} - {{y}_{{{{Q}_{1}}}}})x + ({{x}_{{{{Q}_{0}}}}} - {{x}_{{{{Q}_{1}}}}})y + ({{x}_{{{{Q}_{0}}}}}{{y}_{{{{Q}_{1}}}}} - {{x}_{{{{Q}_{1}}}}}{{y}_{{{{Q}_{0}}}}}). \\ \end{gathered} $

Доказательство адекватности такого алгоритма приводится на рисунке 5, где дополненные построения наглядно демонстрируют пропорциональное соответствие аргумента $x$ для точки $B$ на прямой ${{Q}_{0}}{{Q}_{1}}$ с параметром $t.$

Рис. 5.

Демонстрация касания прямой ${{Q}_{0}}{{Q}_{1}}$ в точке B при условии ${{x}_{1}} - {{x}_{0}} = {{x}_{2}} - {{x}_{1}}$.

Остается рассмотреть общий случай построения такой кривой с учетом поставленного условия.

Утверждение. Всегда можно определить такой поворот системы координат, чтобы для рассматриваемых трех точек ${{P}_{0}},{{P}_{1}},{{P}_{2}}$ выполнялось условие ${{x}_{1}} - {{x}_{0}} = {{x}_{2}} - {{x}_{1}}.$

Доказательство. В пространстве $xOy$ рассмотрим треугольник, образуемый тремя точками P0, ${{P}_{1}},{{P}_{2}}.$ Разделив отрезок $[{{P}_{0}}{{P}_{2}}]$ пополам получим точку A, доопределяющую прямую $A{{P}_{1}},$ направление которой должно совпасть с направлением оси $Oy{\text{'}}$ (рис. 6). В таком случае прямая $(A{{P}_{1}})$ делит также отрезок координатной оси $[x_{0}^{'}x_{2}^{'}]$ пополам, выполняя условие $x_{1}^{'} - x_{0}^{'} = x_{2}^{'} - x_{1}^{'}$. Что и требовалось доказать.

Рис. 6.

Доказательство утверждения.

Исходя из утверждения, рассмотрим описание алгоритма в общем случае построения кривой Безье по трем точкам:

1 шаг: Определение координат для точки A на отрезке $[{{P}_{0}}{{P}_{2}}]$

$\begin{gathered} {{x}_{A}} = {{x}_{0}} + ({{x}_{2}} - {{x}_{0}}){\text{/}}2, \\ {{y}_{A}} = {{y}_{0}} + ({{y}_{2}} - {{y}_{0}}){\text{/}}2. \\ \end{gathered} $

2 шаг: Определение параметров поворота системы координат:

$\begin{gathered} \Delta x = {{x}_{A}} - {{x}_{1}},\quad \Delta y = {{y}_{1}} - {{y}_{A}}, \\ \Delta = \sqrt {\Delta {{x}^{2}} + \Delta {{y}^{2}}} , \\ cos\alpha = \Delta x{\text{/}}\Delta ,\quad sin\alpha = \Delta y{\text{/}}\Delta . \\ \end{gathered} $

3 шаг: Поворот системы координат на угол $\alpha $ со сдвигом в точку A:

$\left\{ \begin{gathered} x{\kern 1pt} ' = {{x}_{A}} + (x - {{x}_{A}})cos\alpha + (y - {{y}_{A}})sin\alpha ; \hfill \\ y{\kern 1pt} ' = {{y}_{A}} - (x - {{x}_{A}})sin\alpha + (y - {{y}_{A}})cos\alpha ; \hfill \\ \end{gathered} \right.$

4 шаг: Построение сегмента кривой Безье:

$t = (x{\kern 1pt} {\text{'}} - {{x}_{0}}){\text{/}}({{x}_{2}} - {{x}_{0}})$ при ${{x}_{0}} \ne {{x}_{2}}$
$\begin{gathered} {{x}_{{{{Q}_{0}}}}} = (1 - t){{x}_{0}} + t{{x}_{1}},\quad {{y}_{{{{Q}_{0}}}}} = (1 - t){{y}_{0}} + t{{y}_{1}}, \\ {{x}_{{{{Q}_{1}}}}} = (1 - t){{x}_{1}} + t{{x}_{2}},\quad {{y}_{{{{Q}_{1}}}}} = (1 - t){{y}_{1}} + t{{y}_{2}}, \\ \end{gathered} $
$\begin{gathered} z = ({{y}_{{{{Q}_{0}}}}} - {{y}_{{{{Q}_{1}}}}})x - ({{x}_{{{{Q}_{0}}}}} - {{x}_{{{{Q}_{1}}}}})y \\ + \;({{x}_{{{{Q}_{0}}}}}{{y}_{{{{Q}_{1}}}}} - {{x}_{{{{Q}_{1}}}}}{{y}_{{{{Q}_{0}}}}}). \\ \end{gathered} $

На рисунке 7 демонстрируются примеры построения области функции, описывающей кривую Безье в нулевых значениях z. Более темной областью (в цветном варианте синим) выделена положительная зона.

Рис. 7.

Демонстрация работы алгоритма в системе РАНОК 2D.

Такой алгоритм вполне реализуем для построения кривых более высокого порядка. Для примера рассмотрим построение поверхности функции $z = f(x,y)$ для кубической кривой Безье, задаваемой четырьмя точками на основе сочетания линейных многочленов Бернштейна.

Допустим, что заданы четыре точки ${{P}_{0}},{{P}_{1}},{{P}_{2}},{{P}_{3}}$ в пространстве $xOy.$ Суть выполнения задачи сводится к последовательному приведению алгоритма к уже рассмотренному для точек ${{Q}_{0}},{{Q}_{1}}$ (рис. 3).

На рисунке 5 видно, что алгоритм применим при каждом определении пар точек ${{Q}_{0}},{{Q}_{1}}$ и ${{Q}_{1}},{{Q}_{2}}$ при рассмотрении соответственно тройки точек ${{P}_{0}},{{P}_{1}},{{P}_{2}}$ и ${{P}_{1}},{{P}_{2}},{{P}_{3}},$ а затем по тому же принципу определяются точки ${{R}_{0}},{{R}_{1}}$ через тройку точек Q0, ${{Q}_{1}},{{Q}_{2}}.$ Функция $z = f(x,y)$ будет выражаться как

$\begin{gathered} z = ({{y}_{{{{R}_{0}}}}} - {{y}_{{{{R}_{1}}}}})y - ({{x}_{{{{R}_{0}}}}} - {{x}_{{{{R}_{1}}}}})y \\ + \;({{x}_{{{{R}_{0}}}}}{{y}_{{{{R}_{1}}}}} - {{x}_{{{{R}_{1}}}}}{{y}_{{{{R}_{0}}}}}). \\ \end{gathered} $

На рисунке 8 демонстрируются некоторые варианты кубической кривой Безье, построенной предложенным подходом.

Рис. 8.

Демонстрация построения функции $z = f(x,y)$ для кубической кривой.

4. ЗАКЛЮЧЕНИЕ

Приведенный алгоритм позволяет моделировать кривую Безье в виде области криволинейной поверхности аналитической функции $z = f({{x}_{n}})$. Он обеспечивает применение традиционных способов конструирования кривых по опорным точкам в комплексе средств моделирования аналитических объектов, которые предназначены для дальнейшего использования R-функциональном моделировании (RFM) и построении функционально-воксельных моделей (ФВМ) без привлечения сложных описаний аналитическими выражениями.

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

  1. Рвачев В.Л. Теория R-функций и некоторые ее приложения. Киев: Наукова думка, 1982. 552 с.

  2. Максименко-Шейко К.В., Толок А.В., Шейко Т.И. R-функции в аналитическом проектировании с применением системы “РАНОК” // Вестн. МГТУ “Станкин”. Научн. рецензируемый журн. М.: МГТУ “Станкин”. 2010. Т. 12. № 4. С. 139–151.

  3. Максименко-Шейко К.В., Мацевитый А.М., Толок А.В., Шейко Т.И. R-функции и обратная задача аналитической геометрии в трехмерном пространстве // Ежемесячный теоретический и прикладной научно-технический журнал (с приложением), ISSN 1684-6400. М.: “Новые технологии”, 2007. Вып. 10. С. 23–32

  4. Максименко-Шейко К.В., Шейко Т.И., Толок А.В. R‑функции как аппарат в приложениях фрактальной геометрии // Прикладная информатика, № 6 (30). М.: “МаркетcДС”, 2010. С. 21–27.

  5. Максименко-Шейко К.В., Шейко Т.И., Толок А.В. R‑функции в аналитическом проектировании с применением системы “РАНОК” // Вестник МГТУ “Станкин”. Научный рецензируемый журнал. М.: МГТУ “Станкин”. 2010. Т. 12. № 4. С. 139–151.

  6. Tolok A.V. Using Voxel Models in Automation of Mathematical Modeling // Automation and Remote Control, 2009. № 6. P. 1067–1079.

  7. Tolok A.V. The way of automation of graphics method of the solution of mathematical modeling problems // The 19-th International Conference on Computer Graphics and Vision “GraphiCon’2009”, October 5–9, 2009. P. 313–314.

  8. Григорьев С.Н., Локтев М.А., Толок А.В. Построение воксельных моделей геометрических объектов // Прикладная информатика. 2013. Т. 46. № 4. С. 50–55.

  9. Grigorev S.N., Tolok A.V. Dichotomous indexing of array in recursive construction of voxel-graphic images // Automation and Remote Control, 2017. V. 75. № 1. P. 119–128.

  10. Васильев С.Н., Локтев М.А., Толок А.В., Толок Н.Б., Ульянов С.А. “К планированию маршрутов в 3D-среде с многовариантной моделью”. Труды СПИИРАН, Выпуск № 2 (45). ISSN 2078-9181. Санкт-Петербург, 2016. С 5–25.

  11. Максименко-Шейко К.В. R-функции в математическом моделировании геометрических объектов и физических полей / К.В. Максименко-Шейко. Харьков: ИПМаш НАН Украины, 2009. 306 с.

  12. Толок А.В. “Функционально-воксельный метод в компьютерном моделировании” / Под ред. академика РАН С.Н. Васильева. Москва. ФИЗМАТЛИТ, 2016. 112 с. ISBN: 978-5-9221-1680-0.

  13. Григорьев С.Н., Толок А.В., Толок Н.Б. Построение градиентного алгоритма локального перебора точек на основе метода функционально-воксельного моделирования // Программирование. 2017. № 5. С. 32–38.

  14. Местецкий Л.М. Диаграмма Вороного линейных отрезков – представление кривыми Безье // Программирование. 2015. № 5. С. 47–57

  15. Роджерс Д., Адамс Дж. Математические основы машинной графики. М.: Мир, 2001.

Дополнительные материалы отсутствуют.