How to | スプラインプリミティブでグラフィックスを作成する方法

Mathematica は,ベジエ(Bézier)曲線,Bスプライン曲線,Bスプライン曲面等の完全に統合されたスプライングラフィックスプリミティブを提供する.スプラインプリミティブはスプラインの任意次数および有理式等の広範に渡るユーザコントロールをサポートする.スプラインプリミティブは複雑なグラフィックスを作成する簡単な方法を提供する.

BezierCurveは,ある「制御点」で定義される複合ベジエ曲線を描く.デフォルトで三次ベジエ曲線が使用される:

In[85]:=
Click for copyable input
Out[85]=

BSplineCurveGraphicsと一緒に使って,7つの制御点からなる三次Bスプライン曲線を作成する:

In[93]:=
Click for copyable input
Out[93]=

一般にスプライン曲線は制御点を通らないが,端点を通る:

In[89]:=
Click for copyable input
Out[90]=
    

SplineDegreeオプションはスプライン曲線の内在する多項式次数を制御する.通常,次数が高ければ高いほど結果の曲線はより滑らかなものとなる.

ここではTableを使ってBSplineCurveを1から6まで変化するSplineDegreeと一緒に反復させることによって,6つの異なるスプライン曲線を同じ制御点集合から作成する:

In[87]:=
Click for copyable input
Out[88]=
    

SplineKnotsオプションはBスプライン曲線の形に対して詳細な制御を提供する.SplineKnotsの値が指定されていない場合には,Mathematica は結果の曲線が全体的に滑らかで端点は補間されているようなデフォルトの結び目列を返す:

In[1]:=
Click for copyable input
Out[2]=

以下は同じ曲線であるが,デフォルトの結び目の値が明示的に示されている.最初と最後の 個の繰り返す結び目によって曲線は端点を通る.ここで はスプラインの次数である.残りの結び目は均等に配置される:

In[133]:=
Click for copyable input
Out[133]=

真ん中で結び目の値を繰り返すことによって,曲線の滑らかさを減少させることができる:

In[134]:=
Click for copyable input
Out[134]=
    

SplineClosedオプションがTrueに設定される場合,Mathematica は滑らかで閉じられたBスプライン曲線を作成する:

In[2]:=
Click for copyable input
In[3]:=
Click for copyable input
Out[3]=
In[4]:=
Click for copyable input
Out[4]=
    

SplineWeightsオプションは各点に重みを割り当てるのに使うことができる.曲線は点の方向により大きな重みで引っ張られる:

In[6]:=
Click for copyable input

SplineWeightsに明示的な設定を行わない場合, Mathematica は各点に同じ重みを割り当てる:

In[7]:=
Click for copyable input
Out[7]=

SplineWeightsで5の重みが与えられている真ん中の点に向かって曲線は引っ張られている:

In[8]:=
Click for copyable input
Out[8]=

数学的に,非一様な重みはNURBSとしても知られる有理Bスプライン関数を作成する.NURBSは通常のBスプラインが表せない形を表現することができる.例えば,BSplineCurveを使い,SplineWeightsの値に,そしてSplineKnotsの値に設定することによって正確な円を作成する:

In[105]:=
Click for copyable input
Click for copyable input
Out[108]=
    

3Dスプライン曲線は3Dの点を使って作成できる:

In[9]:=
Click for copyable input
Out[9]=
In[10]:=
Click for copyable input
Out[10]=

曲線をTubeで囲むことによって,管に入ったスプライン曲線を3Dで作成することができる.以下の例では,管の半径は0.2である:

In[11]:=
Click for copyable input
Out[11]=
In[12]:=
Click for copyable input
Out[12]=

制御点に半径のリストを関連付けることによって,いろいろな半径を持つ管を作成できる:

In[14]:=
Click for copyable input
In[15]:=
Click for copyable input
Out[15]=
    

BSplineSurfaceは3Dの点の行列で定義されるテンソル積Bスプライン曲面を作成する:

In[159]:=
Click for copyable input
Out[160]=

BSplineCurveのオプションがすべて同じように使える.しかし曲面に対しては,それぞれのパラメータ的な方向に別々にオプションを指定することができる.例えば以下のSplineDegree設定は,1つの方向については次数1,もう1つの方向については次数3でBスプライン曲面を作成する:

In[162]:=
Click for copyable input
Out[162]=

Bスプライン曲線と同様に,有理曲面,つまりNURBS曲面は,SplineWeightsを使って作成できる.コンピュータを使ったデザインアプリケーションの多くはNURBSを使って工業用の曲面を表す.以下の例では直角の円筒状管を生成する:

In[5]:=
Click for copyable input
Out[8]=
New to Mathematica? Find your learning path »
Have a question? Ask support »