任意の3点から定義できる滑らかな曲線

1998年2月1日(日) 川崎 有亮

 
曲線を定義する
その3点をそれぞれP0、P1、P2として、曲線はP0とP2を通るものとします。
0≦t≦1なるtをパラメタとして、その曲線上の点X(t)は

(X(1) = P2の誤り)
と表すことができます。このとき、曲線の中間の点(t=1/2)をどこに置くかということが最初の問題になりますが、とりあえず「P1と直線P0- P2の中点をh : 1-hの比に分ける点」を通るものとします。

このhの値を変更することで、曲線の曲がり具合を調節することができます。例えば、h=1のときはP1を通る曲線となり、h=0のときは直線P0- P2となります。
 
方程式で解く
ここで、(1)〜(3)式からP0、P1、P2の恒等式を解いて

が言えます。gk(t)はそれぞれ放物線を描くと仮定して、一般式をたててみます。

このとき、

がそれぞれ極値(放物線の出っ張ったところで最大値か最小値)であるとすれば、

となります。これはもちろん、(5)式を微分して

だからです。さらに(7)式に(6)式から適当な値を代入してみると


として、各式が求まりました。

です。(1)(10)式により、線分P0-P2 の中点とP1の中点をPSと呼ぶとすれば、曲線P0-PS-P2を描くことができます。(∵h=1/2)
 
曲線の検証
ところで、X(t)は三角形P0-P1-P2の内側に入るとき、各係数の和が
  (≦でなく=の誤り)
となることが分かっています。この証明はそれほど難しくありませんが、ここでは省略します。(12)式に基づいて、(11)式を検証してみます。

tに関らず和は常に1になりました。この曲線P0-P1-P2は常に三角形P0-P1-P2の内側にあり、つまり理想的な曲線と言えるのではないでしょうか。(点P0付近では直線P0-P1に、点P2付近では直線P1-P2に接した曲線となります)
 
行列に書き換える
(11)式で主題は解決しましたが、次にこれを行列に書き換えて考えてみます。

なお、Tとは転置行列(transposed)で、縦横を変えて表示しています。
ところで、(1)式も行列の積として書き換えることができます。

(14)(15)式をまとめると、

が得られます。
 
行列で解く(h=1/2)
hの値、すなわち曲線の中間の点X(1/2)の位置が分かっている場合、(4)〜(11)式の面倒だった演算も行列を使って簡単になります。gk(t)の一般式を

として、まずこの右辺を行列にします。

次にk=0,1,2について、行列の列方向に展開します。

最後に座標の分かっているt = 0, 1/2, 1について、(19)式を行列の行方向に展開して、それぞれ値を代入していきます。

これを解くと、

が得らます。この結果は、(11)(17)式からも確認することができます。
 
3点を通る場合(h=1)
この同じ方法を用いて、h=1の場合、すなわち

というこの3点を通る曲線P0-P1-P2を考えることができます。(20)式より

とおきます。これを解いて

というマトリクスを得られます。(16)式のように書き直すと

が得られます。
 
n点を通る曲線
また、このX(1/2)=P1のときの操作は逆行列を求めたのと同じですから、

とも書けます。これを使うと、(26)式は

と変形することもできます。
これは、別に述べている「n点を通る曲線」の一般式を満たしています。
 
重心を通る曲線(h=1/3)
この他にもh=1/3の場合も同様に求められます。三角形の重心PGとすれば、すなわちX(1/2)=PGとなり、この3点を通る曲線P0-PG-P2

と表現できます。
 

Copyright (C) 1998 Kawasaki Yuusuke <u-suke [at] kawa.net>
All rights reserved.