Javascript must be enabled in your browser to use this page.
Please enable Javascript under your Tools menu in your browser.
Once javascript is enabled Click here to go back to �нтеллектуальная Кобринщина

Create Graphics with Spline Primitives - Wolfram Mathematica

Создание графики при помощи сплайн-примитивов

Mathematica содержит полностью интегрированные графические сплайн-примитивы, такие как кривые Безье, B-сплайновые кривые и B-сплайновые поверхности. Сплайновые примитивы поддерживают полный спектр пользовательских элементов управления, таких как произвольная степень и рациональная форма сплайнов. Сплайн-примитивы позволяют легко создавать сложную графику.

Функция BezierCurve прокладывает составную кривую Безье, определенную заданными опорными точками. По умолчанию, используется кривая Безье третьего порядка:

In[85]:=

CreateGraphicsWithSplinePrimitivesRU_1.gif

Out[85]=

CreateGraphicsWithSplinePrimitivesRU_2.gif

Воспользуемся функциями BSplineCurve и Graphics для создания B-сплайновой кривой третьего порядка, состоящей из семи точек привязки:

In[93]:=

CreateGraphicsWithSplinePrimitivesRU_3.gif

Out[93]=

CreateGraphicsWithSplinePrimitivesRU_4.gif

Как правило, сплайновые кривые не проходять через опорные точки. Однако, они проходят через конечные точки:

In[89]:=

CreateGraphicsWithSplinePrimitivesRU_5.gif

Out[90]=

CreateGraphicsWithSplinePrimitivesRU_6.gif

    

Опция SplineDegree (Порядок сплайна) контролирует основообразующую алгебраическую степень точности сплайновой кривой. Обычно, чем выше степень, тем ров нее результирующая кривая.

В этом примере шесть сплайновых кривых созданы по одному и тому же набору опорных точек. Использование функции Table призвано отобразить изменение результата функции BSplineCurve при изменении опции SplineDegree от 1 до 6:

In[87]:=

CreateGraphicsWithSplinePrimitivesRU_7.gif

Out[88]=

CreateGraphicsWithSplinePrimitivesRU_8.gif

    

Опция SplineKnots (Узлы сплайна) обеспечивает точный контроль над формой B-сплайновой кривой. Если значения для SplineKnots не указаны, Mathematica, по умолчанию создает такую последовательность узлов, чтобы результирующая кривая была гладкой по всей ее длине, а конечные точки имели заданные значения:

In[1]:=

CreateGraphicsWithSplinePrimitivesRU_9.gif

Out[2]=

CreateGraphicsWithSplinePrimitivesRU_10.gif

Здесь показана та же самая кривая, однако явно показаны значения узлов, используемые по умолчанию. Первый и последний d+1 повторяющиеся узлы заставляют кривую проходить через конечные точки, где d является порядком сплайна. Остальные узлы распределены равномерно:

In[133]:=

CreateGraphicsWithSplinePrimitivesRU_11.gif

Out[133]=

CreateGraphicsWithSplinePrimitivesRU_12.gif

Используя повторяющееся значение узла в 1/2 в середине, Вы можете уменьшить гладкость кривой:

In[134]:=

CreateGraphicsWithSplinePrimitivesRU_13.gif

Out[134]=

CreateGraphicsWithSplinePrimitivesRU_14.gif

    

Если опции SplineClosed (Замкнутый сплайн) задано значение True (Истина), Mathematica создаст гладкую замкнутую B-сплайновую кривую:

In[2]:=

CreateGraphicsWithSplinePrimitivesRU_15.gif

In[3]:=

CreateGraphicsWithSplinePrimitivesRU_16.gif

Out[3]=

CreateGraphicsWithSplinePrimitivesRU_17.gif

In[4]:=

CreateGraphicsWithSplinePrimitivesRU_18.gif

Out[4]=

CreateGraphicsWithSplinePrimitivesRU_19.gif

    

Опция SplineWeights (Веса сплайна) используется для задания веса каждой опорной точке. Кривая будет сильнее "притягиваться" к точке с большим весом:

In[6]:=

CreateGraphicsWithSplinePrimitivesRU_20.gif

Если опция SplineWeights не задана, Mathematica присваивает одинаковые значения веса для каждой точки:

In[7]:=

CreateGraphicsWithSplinePrimitivesRU_21.gif

Out[7]=

CreateGraphicsWithSplinePrimitivesRU_22.gif

Обратите внимание, как кривая притягивается к средней точке, которой, при помощи опции SplineWeights, присвоен вес 5:

In[8]:=

CreateGraphicsWithSplinePrimitivesRU_23.gif

Out[8]=

CreateGraphicsWithSplinePrimitivesRU_24.gif

Математически, неоднородные веса создают рациональные B-сплайновые функции, известные как  NURBS (Non-Uniform Rational B-spline, неоднородный рациональный базовый сплайн). NURBS могут представлять форму, которые однородные B-сплайны представлять не могут. Например, воспользуемся функцией BSplineCurve для создания точной окружности, задав опции SplineWeights значения под именем w, а опции SplineKnots значения под именем k:

In[105]:=

CreateGraphicsWithSplinePrimitivesRU_25.gif

CreateGraphicsWithSplinePrimitivesRU_26.gif

Out[108]=

CreateGraphicsWithSplinePrimitivesRU_27.gif

    

3D сплайн может быть создан при помощи точек с трехмерными координатами:

In[9]:=

CreateGraphicsWithSplinePrimitivesRU_28.gif

Out[9]=

CreateGraphicsWithSplinePrimitivesRU_29.gif

In[10]:=

CreateGraphicsWithSplinePrimitivesRU_30.gif

Out[10]=

CreateGraphicsWithSplinePrimitivesRU_31.gif

"Обернув" кривые функцией Tube, Вы можете соэдать "трубчатый" сплайн в 3D. Здесь, трубке задан радиус 0.2:

In[11]:=

CreateGraphicsWithSplinePrimitivesRU_32.gif

Out[11]=

CreateGraphicsWithSplinePrimitivesRU_33.gif

In[12]:=

CreateGraphicsWithSplinePrimitivesRU_34.gif

Out[12]=

CreateGraphicsWithSplinePrimitivesRU_35.gif

Можно создать "трубку" переменного радиуса, сопоставив опорным точкам список радиусов:

In[14]:=

CreateGraphicsWithSplinePrimitivesRU_36.gif

In[15]:=

CreateGraphicsWithSplinePrimitivesRU_37.gif

Out[15]=

CreateGraphicsWithSplinePrimitivesRU_38.gif

    

Функция BSplineSurface создает тензорное произведение B-сплайновой поверхности, заданной матрицей точек с трехмерными координатами:

In[159]:=

CreateGraphicsWithSplinePrimitivesRU_39.gif

Out[160]=

CreateGraphicsWithSplinePrimitivesRU_40.gif

Все опции для функции BSplineCurve работают таким же образом. Тем не менее, для поверхностей, Вы можете задать их отдельно в каждом параметрическом направлении. Например, следующие значения для опции SplineDegree создают B-сплайновую поверхность 1-ой степени в одном направлении и 3-ей степени в другом:

In[162]:=

CreateGraphicsWithSplinePrimitivesRU_41.gif

Out[162]=

CreateGraphicsWithSplinePrimitivesRU_42.gif

Подобно B-сплайновым кривым, при создании рациональных или NURBS-поверхностей может применяться опция SplineWeights. Многие программы для компьютерного прое ктирования используют NURBS (неоднородные рациональные B-сплайны) для моделирования представления технических поверхностей. Следующий пример создает изображение согнутой под прямым углом цилиндрической трубы:

In[5]:=

CreateGraphicsWithSplinePrimitivesRU_43.gif

Out[8]=

CreateGraphicsWithSplinePrimitivesRU_44.gif