スプライン

本日の講義概要

スプラインとは

製図用具のスプライン

http://pages.cs.wisc.edu/~deboor/draftspline.htmlより.

このページでは実際にBOEINGのエンジニアがスプラインを使って機体設計の図面を書いている写真が公開されている.写真を公開するために$100をBOEINGに払ったのでコピーするな!と書いてあるので見るだけにしてほしい.

バネによる曲線の生成

スプラインとは,もともとは製図用具の名称で一種の曲線定規である.柔らかめのバネにそれを固定する重りが数カ所に固定された構造になっている.この重りを適当な位置に配置すると,バネは弾性エネルギーを最小にするように変形する.この曲線の特徴は

  1. バネの曲率が急激に変化することが無く連続的に変化するので,蓄積される弾性エネルギーも連続的に変化する.
  2. バネの弾性エネルギーを最小としているので,この曲線形で実際に部材を張った時も弾性エネルギーを最小にできる.
  3. 通常は円弧と直線を接続した場合には,曲率(半径の逆数)値が不連続となるため,見た上でもはっきりと接合部が分かってしまうが,スプラインで生成した曲線は図で見るとおり,接線が非常に滑らかに接続している.

このようにあるルール(制御点や接線,法線)に従った曲面・曲線をスプライン曲線・曲面と呼んでいる.

以下では,曲線表現方程式を用いて平面上の曲線表現の特徴について学ぶ

多項式表現の復習

1つのパラメータuのN次の多項式によって,x座標及びy座標が決定される曲線表現を考える.

この曲線を定義するためには,それぞれの係数の値が定まればよい.具体的には,次の表のように考えられる.

次数
定義に必要な係数
係数を定義するための条件の与え方のバリエーション
1次

xy各座標にそれぞれ2個の係数を決める.

即ち,1次の場合は何らかの形で2つのベクトルが与えられればよい.

直線の定義の仕方を考えると理解しやすい

  • 曲(直)線上の2点の座標
  • 1点の座標と方向ベクトル

※直線として成立するには,通過点が同一座標に縮退していない条件が必要

2次

xy各座標にそれぞれ3個の係数を決める.

即ち,2次の場合は何らかの形で3つのベクトルが与えられればよい.

円の定義の仕方を考えると理解しやすい

  • 曲線上の3点の座標
  • (円の場合は)中心と2点(計3点)

※円弧として成立するには,通過点が同一座標に縮退していない条件が必要

3次

xy各座標にそれぞれ4個

即ち,3次の場合は何らかの形で4つのベクトルが与えられればよい.

  • 曲線上の4点の座標
  • 2点の座標と,その座標での接線ベクトル
N次

xy各座標にそれぞれN+1個

即ち,N次の場合は何らかの形でN+1つのベクトルが与えられればよい.

  • 曲線上のN+1点の座標などなど

自由曲線の定義方法

幾つかの点群が与えられて,その上を通る曲線を定義する問題を考える.解き方としては次の幾つかの方法が考えられる.

方式
特徴
問題点

点群の全域に点数よりも一つ少ない次数の曲線を割り当てる方法

全体を一つの曲線として扱うので,曲線の接続問題を考える必要がない.

与えられた点を通るが,全体としては滑らかでない,つまり高次の振動が起こることがある.

点群を幾つかの領域に分けて,その内部で曲線を定義してつなぎ合わせる方法

個々の表現式は単純化できる.通常は3次程度の曲線が用いられる.

曲線を接続する点で,座標が合致しているだけでなく,接線ベクトル,曲率など,より高次の導関数値の連続性を保証する必要がある.

Lagrange補間

n+1個のパラメータuに対応する点(u0,x0,y0),…,(un,xn,yn)の組が与えられたとき,それらを補間するn次の曲線を求める.まずパラメータの差積を

とおく.この式から(x-xi)の項を除いたものをWi(u)とする.すなわち

となるとき,与えられた点列を補完する多項式fL(u)は次式で示される.

この式をLagrageの公式,またLi(u)をLagrangeの係数多項式と呼ぶ.Li(u)は

で表される.この係数は,各通過点を合成するための重みとして働いている.特にu=ujとした場合は

となり,j番目の点に対する重みのみが1で,他が0となり,必ずxjを通ることが分かる.

またLangrange係数をグラフにプロットすると,上のようになる.パラメータがある値を取る時には特定の点に対する重みが1になり,残りの重みが全て0になっていることが確認できる.

またこのグラフからは,場合によっては係数値が1以上になったり0以下の負の値となってしまうことも確認できる.

同次座標系との関連とパラメータについて

Lagrange補間のように,スプライン曲線・曲面は特定の端点を通過することと,中間点を与える形で境界条件を与える形式が多い.中間点を必ず通過させるかどうかはスプライン関数定義によって決まる.

一般的な機械設計などでは,これらの曲線はUをパラメータとした3次元空間で定義される.その際には,制御点は前回の同次座標系を用いて定義される.

またパラメータをU及びVとして,制御点もU方向及びV方向の次数の分だけ用意すると2パラメータの自由曲面を定義できる.

スプライン曲線・曲面は,自動車のボディや航空機の胴体と翼の接合部(フィレット)などの設計に用いられている.

http://www.newtek.com/forums/showthread.php?t=83878&page=3より

MATLABによる演習


LagEx01.m
%function z = LagEx01()
% LagEx01() Lagrange interporation example 01
% Input: None
% Output: Graphic output
% By your_name, your class, build date
clf;
clear;
msize=5;
dp=0.01;
ntimes=1/dp;

for p=1:1:msize
    u(p)=(p-1)/msize;
    x(p)=cos((p-1)*pi/2);
    y(p)=sin((p-1)*pi/2);
end

plot(x,y,'o:');axis equal; hold on;

for k=1:1:ntimes*(msize-1)/(msize)+1
   p=dp*(k-1);
   % caluculate L(u) for each point

   for i=1:1:msize
       Lu(i)=1;
       for j=1:1:msize
           if(i ~= j)
               Lu(i)=Lu(i)*(p-u(j))/(u(i)-u(j));
           end
       end
   end
   xu(k)=x*Lu';
   yu(k)=y*Lu';
 end
plot(xu,yu,'r-')

 

練習問題

Laglange補間では,指定された点群を必ず通ることは保証されているが,それ以外の経路に関しては逆に点群座標の影響を受けて歪んでしまうことがある.そこで,以下の2点を試みる.

1.この性質を,様々な点群データに対しての補間で確認する.

2.各制御点に対する重みの変化に関するグラフ描画を行う.

各パラメータ値でのラグランジュ係数を別の変数(たとえばLp)に代入しておき,係数の計算が終わったらplot関数で描画する.色の指定は

plot(...,'-r')

のようにすると,'実線の赤色'のように指定することができる.


数値解析2のページへ