.. role:: blue :class: blue Поверхность Кунса MbCoonsPatchSurface ================================================== .. _MbCoonsPatchSurface_Coons_Surface: .. версия ядра: 1180ХХ Класс :blue:`MbCoonsPatchSurface` объявлен в файле *surf\_coons\_surface.h*. Бикубическая поверхность Кунса MbCoonsPatchSurface построена аналогично поверхности Кунса :ref:`MbCoverSurface ` и имеет дополнительные условия для радиуса-вектора на краях. Бикубическая поверхность Кунса MbCoonsPatchSurface описывается четырьмя кривыми :blue:`MbCurve3D` * **curve0**, **curve1**, **curve2**, **curve3**, производной **curve0V** радиуса-вектора поверхности вдоль кривой **curve0** по второму параметру поверхности, производной **curve1U** радиуса-вектора поверхности вдоль кривой **curve1** по первому параметру поверхности, производной **curve2V** радиуса-вектора поверхности вдоль кривой **curve2** по второму параметру поверхности, производной **curve3U** радиуса-вектора поверхности вдоль кривой **curve3** по первому параметру поверхности, четырьмя угловыми точками **vertex**\[4], четырьмя производными по первому параметру поверхности в угловых точках **vertexU**\[4], четырьмя производными по второму параметру поверхности в угловых точках **vertexV**\[4], четырьмя смешанными производными по первому и второму параметрам поверхности в угловых точках **vertexUV**\[4], четырьмя парами граничных значений параметров соответствующих кривых: *t0min*, *t0max*, *t1min*, *t1max*, *t2min*, *t2max*, *t3min*, *t3max*, признаком периодичности поверхности по первому параметру *uclosed*, признаком периодичности поверхности по второму параметру *vclosed*. У поверхности есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов поверхности. Первый параметр поверхности *u* принимает значения на отрезке 0 ≤ *u* ≤ 1. Поверхность может быть периодической по первому параметру, если периодическими являются кривые **curve0**, **curve2**, **curveV0**, **curveV2**, а кривые **curveU1** и **curveU3** совпадают. Второй параметр поверхности *v* принимает значения на отрезке 0 ≤ *v* ≤ 1. Поверхность может быть периодической по второму параметру, если периодическими являются кривые **curve1** и **curve3**, **curveU1**, **curveU3**, а кривые **curveV0** и **curveV2** совпадают. Соседние кривые **curve0**, **curve1**, **curve2**, **curve3** должны иметь точки пересечения или точки скрещения друг с другом. Параметры кривых *t0min*, *t0max*, *t1min*, *t1max*, *t2min*, *t2max*, *t3min*, *t3max* вычисляются по точкам пересечения или скрещения кривых и определяют рабочие участки кривых, точки **vertex**\[4], **vertexU**\[4], **vertexV**\[4], **vertexUV**\[4]. Направления кривых для поверхности не имеют значения, но параметризация пар кривых **curve0** и **curveV0**, **curve2** и **curveV2**, **curve1** и **curveU1**, **curve3** и **curveU3** должна совпадать. В методе :blue:`PointOn`\( double *u*, double *v*, :ref:`MbCartPoint3D ` & **s** ) радиус-вектор поверхности **s** описывается векторной функцией, которая приведена в книге «Геометрическое моделирование» Голованова Н.Н. Бикубическая поверхность Кунса строится по заранее рассчитанным данным и используется для построения сопряжений и заплаток с условиями сопряжения на краях. Бикубическая поверхность Кунса приведена на рис. 1. .. figure:: /MODELER/SURFACES/pictures/O.5.19.1.png :width: 12cm :align: center Рис. 1 Форма поверхности зависит от формы кривых и производных. Если соседние кривые пересекаются в точках **vertex**\[4], то поверхность проходит по участкам кривых: при *u* = 0 поверхность проходит по участку кривой **curve3**, при *v* = 0 поверхность проходит по участку кривой **curve0**, при *u* = 1 поверхность проходит по участку кривой **curve1**, при *v* = 1 поверхность проходит по участку кривой **curve2**.