.. role:: blue :class: blue Функция MbFunction ================== .. _MbFunction_Function: .. версия ядра: 1180XX Класс :blue:`MbFunction` объявлен в файле *function.h*. Функция :blue:`MbFunction` является абстрактным классом, наследником классов :ref:`MbRefItem ` и :blue:`TapeBase`: .. figure:: /MODELER/SPECIAL_OBJECTS/pictures/O.6.1.1.png :width: 12cm :align: center В геометрическом ядре C3D реализованы следующие скалярные функции, которые являются наследниками класса :blue:`MbFunction`: :ref:`MbConctFunction ` – константная функция, :ref:`MbLineFunction ` – линейная функция, :ref:`MbCubicFunction ` – кубическая функция Эрмита, :ref:`MbCubicSplineFunction ` – кубическая сплайн-функция, :ref:`MdCharacterFunction ` – аналитическая функция. MbFunction представляет собой скалярную функцию .. math:: \textit{function}( \textit{t} ) = \textit{f}( \textit{t} ) скалярного параметра *t*, принимающего значения на отрезке [ *t*\ :sub:`min`, *t*\ :sub:`max` ]. Область изменения параметра функции есть отрезок [ *t*\ :sub:`min`, *t*\ :sub:`max` ] в одномерном пространстве. Функция *f*\(*t*\) должна быть однозначной и непрерывной. Граничные значения *t*\ :sub:`min` и *t*\ :sub:`max` области определения параметра выдают методы функции double :blue:`GetTMin`\() и double :blue:`GetTMax`\(), соответственно. Функцию будем называть периодической, если существует *p* > 0, такое, что *f*\(*t* ± *kp*) = *f*\(*t*), где *k* – целое число. Метод :blue:`IsClosed`\() периодической функции возвращает true. Метод double :blue:`GetPeriod`\() периодической функции или функции, которая может быть расширена до периодической, выдает период *p*. Область определения параметра периодической функции всегда лежит в пределах одного периода. Основным методом функции является метод double :blue:`Value`\( double & *t* ). Он выдаёт значение функции для заданного параметра *t*. Методы double :blue:`FirstDer`\( double & *t* ), double :blue:`SecondDer`\( double & *t* ), double :blue:`ThirdDer`\( double & *t* ) выдают соответственно первую, вторую и третью производные функции для заданного параметра *t*. Перечисленные методы корректируют параметр функции при его выходе за пределы области определения. При выходе параметра *t* за пределы отрезка [ *t*\ :sub:`min`, *t*\ :sub:`max` ] непериодические функции смещают параметр *t* к ближайшей границе *t*\ :sub:`min` или *t*\ :sub:`max`, а периодические функции добавляют или вычитают необходимое количество периодов. Метод double :blue:`\_Value`\( double *t* ) выдаёт значение функции для заданного параметра *t* как в области определения параметра функции, так и за её пределами. В общем случае непериодическая функция за пределами области определения параметра продолжается по касательной в крайней точке. Исключение составляют аналитические функции. Периодические функции за пределами области определения параметра продолжаются циклически. Методы double :blue:`\_FirstDer`\( double *t* ), double :blue:`\_SecondDer`\( double *t* ), double :blue:`\_ThirdDer`\( double *t* ) выдают соответственно первую, вторую и третью производные функции для заданного параметра *t* как в области определения функции, так и за её пределами. Функции перегружают такие методы, как методы, обеспечивающие копирование, проверку на совпадение, проверку на возможность сделать совпадающими, делающие объекты совпадающими, MbFunction & :blue:`Duplicate`\(), Boolean :blue:`IsSame`\( const MbFunction & **item** ), Boolean :blue:`IsSimilar`\( const MbFunction & **item** ), Boolean :blue:`SetEqual`\( const MbFunction & **item** ), метод, возвращающий тип из перечисления функция, MbeFunctionType :blue:`IsA`\(), методы, обеспечивающие выдачу и редактирование внутренних данных объекта, MbProperty & :blue:`CreateProperty`\( MbePrompt name ), void :blue:`GetProperties`\( MbProperties & *properties* ), void :blue:`SetProperties`\( MbProperties & *properties* ). Все функции, как правило, не имеют изломов. Функция :blue:`MbAnaliticalFunction`, задаваемая пользователем, также должна быть непрерывной и не иметь особых точек.