home pageに戻る
3次スプライン曲線をExcelで計算する方法
(船体外板全長の計算方法)

3次スプライン曲線は補間曲線で、与えられた点列全てを滑らかな3次曲線で結びます。実際は隣同士の点列間をつなぐ部分曲線の集合となるのですが、隣同士の部分曲線をつなぐ時にその接続点で傾きと曲率を等しくするため、つなぎ目は滑らかになります。
この曲線の特徴は木製帆船模型の船体を表現する曲線にピッタリです。ですから、フレームと外板が接触する点の座標を使って曲線を計算しその曲線の長さを求めれば、外板の長さを割り出すことが出来るはずです。

計算自体は数学用のソフトを使えばいとも簡単でしょうし、他にも簡単なプログラムの作り方はいくらでもありますが、ここでは、あえて人のやりそうに無いExcelの関数機能を使って計算する方法を紹介します。(すきこのんでなんとま−、物好きな!!)

説明図

3次スプライン関数では,上の説明図に示すように、点列の位置ベクトル(要するに座標)P1,P2,P3,・・・,Pi,・・・,Pnに対し、tを助変数として、連続する2点間の部分曲線C(t)を以下のように書きます。これは、0からτ(この字はギリシャ語の「タウ」です。文字化けする場合があるようですが、下の方の7式は図で書いたため正しく見えます。その場合は少々混乱しますが、読み替えて下さい。)までという範囲限定ではありますが、ただの3次式です。式の数は当然ながらn-1個あります。

C(t)=a3t^3+a2t^2+a1t+a0 (0=<t=<τ)----------(1)

この式のa3、a2、a1、a0を求めれば、曲線がかけます。

(1)式の係数aは各点列の1次微係数Pi'を使うと、それぞれ、下の(2)から(5)式のようになります。

a3i=(Pi+1'+Pi')/τi^2+2(Pi-Pi+1)/τi^3-------------(2)
a2i=3(Pi+1-Pi)τi^2-(2Pi'+Pi+1')/τi---------------(3)
a1i=Pi'--------------------------------------------(4)
a0i=Pi---------------------------------------------(5)

また、(1)から(5)式を使って、部分曲線のつなぎめ部分で前の曲線の終りと次の曲線の始まりの曲線の傾き(1次微係数)と曲率(2次微係数)を等しいとすると、接続点における1次微係数(Pi')を未知数とする下のような方程式が得られます。

τi+1Pi'+2(τi+1+τi)Pi+1'+τiPi+2'=3{τi+1(Pi+1-Pi)/τi+τi(Pi+2-Pi+1)/τi+1}----------(6)

この方程式の数はn-2個ですが、未知数Pi'はn個あります。
これは、一番最初と最後の部分曲線の両側に何も無いため条件が2つ不足しているからです。そこで、曲線全体の最初と終わりの点の1次微係数(P1'とPn')を自分で決めることにすれば、方程式の数と未知数の数が等しくなり解く事が出来るようになります。
P1'とPn'を既知として書き直した方程式n-2個をまとめて行列の形で書くと以下のようになります。

行列

この式をAB=Cと書いたとき、その両辺にAの逆行列A^(-1)をかけると

A^(-1)AB=B=A^(-1)C---------------------------------(8)

となりBが求められます。ここでは、B=Pi'としていますのでPi'が求まる事になります。

Excelでは、この行列の計算がそれぞれ以下の配列関数で極めて簡単に出来ます。

逆行列の計算:配列関数{=MINVERSE(配列)}
行列の掛け算:配列関数{=MMULT(配列1,配列2)}

この計算によって求めたPi'を(2)から(5)式に代入してaを求め、それを(1)式に代入すれば、n-1個の部分曲線の方程式が求まります。
これ以上、説明の必要はないかもしれませんが、個々の部分曲線はtを適当なピッチΔtに細分化して計算することで、数珠つなぎの点として求まります。

後はこれをつないで一本の曲線にし、グラフ機能(散布図を使う)で曲線の形を確認して問題が無ければ、曲線全体を積分します。そうすれば、めでたく全長が計算できます。
 

以上です