3次曲線の行列要素を求める


~がんばろー~




■Bezier 曲線の行列要素を求める?

曲線の形を決める条件である位置 x0, x1, 及び速度 v0, v1を、3次曲線の一般形

X = x (t) = at3 + bt2 + ct + d

に代入して、係数abc 及び d を求めます。

位置の条件から、

①・・・ x0 = x (0) = a03 + b02 + c0 + d = d,
②・・・ x1 = x (1) = a13 + b12 + c1 + d = a + b + c + d.

また、速度が、初期時刻、最終時刻で v0, v1 であることから、 時間微分としての速度の定義

       dx(t)
v(t) = ―― = 3at2 + 2bt + c,
        dt

に、条件を入れて、

③・・・ v0 = v (0) = 3a02 + 2b0 + c = c,
④・・・ v1 = v (1) = 3a12 + 2b1 + c = 3a + 2b + c.

①, ③ から、

d = x0,
c = v0.

④-2② に今の結果を代入して、

v1 - 2x1 = (3a + 2b + c) - 2(a + b + c + d)
          = a - c - 2d,
⇒ a = v1 - 2x1 + v0 + 2x0.

これらの結果を②に代入すれば、

b = x1 - a - c - d
  = x1 - (v1 - 2x1 + v0 + 2x0) - v0 - x0
  = -3x0 + 3x1 - 2v0 - v1,

と、全ての係数が求まります。以上をまとめれば、

x(t) = (v1 -2x1 + v0 +2x0)t3
      + (-3x0 + 3x1 - 2v0 - v1)t2
      + v0 t
      + x0
                  ┌ 2 -2  1  1┐┌ x0 ┐
     = [t3 t2 t 1]│-3  3 -2 -1││ x1                  │ 0  0  1  0││ v0                  └ 1  0  0  0┘└ v1

となります。

最後の表現は、単なる変形です。 縦ベクトルと横ベクトルの積が、

a0b0 + a1b1 + a2b2 + a3b3
    b0 ┐
     = [a0 a1 a2 a3]│ b1    b2    b3

と、書け、さらに行列をはさんだ場合に、

 a0m00b0 + a0m01b1 + a0m02b2 + a0m03b3
+a1m00b0 + a1m11b1 + a2m12b2 + a1m13b3
+a2m00b0 + a2m21b1 + a2m22b2 + a2m23b3
+a3m00b0 + a3m31b1 + a2m32b2 + a3m33b3
                    ┌ m00 m01 m02 m03┐┌ b0 ┐
     = [a0 a1 a2 a3]│ m10 m11 m12 m13││ b1                    │ m20 m21 m22 m23││ b2                    └ m30 m31 m32 m33┘└ b3

と、書けるのを使っただけです。

もどる




■4つの制御点を通る曲線を求める

Ferguson / Coons 曲線、

                  ┌ 2 -2  1  1┐┌ x0x(t) = [t3 t2 t 1]│-3  3 -2 -1││ x1                  │ 0  0  1  0││ v0                  └ 1  0  0  0┘└ v1

の式からはじめます。i番目の曲線として、今後 x0xi, x1xi+1,として取り扱います。これに、定義した制御点と、位置及び速度の関係式、

xi   = Pi  ,
xi+1 = Pi+1,
       1                        ┌ xi   ┐   1 ┌ 0  2  0  0┐┌ Pi-1vi   = ― (Pi+1 - Pi-1),    ⇒    │ xi+1 │= ― │ 0  0  2  0││ Pi         2                        │ vi   │   2 │-1  0  1  0││ Pi+1       1                        └ vi+1 ┘     └ 0 -1  0  1┘└ Pi+2vi+1 = ― (Pi+2 - Pi  ),
       2

を、代入すると、

                   ┌ 2 -2  1  1┐ 1 ┌ 0  2  0  0┐┌ Pi-1xi(t) = [t3 t2 t 1]│-3  3 -2 -1│― │ 0  0  2  0││ Pi                     │ 0  0  1  0│ 2 │-1  0  1  0││ Pi+1                   └ 1  0  0  0┘   └ 0 -1  0  1┘└ Pi+2          1            ┌ -1  3 -3  1┐┌ Pi-1       = ― [t3 t2 t 1]│  2 -5  4 -1││ Pi            2            │ -1  0  1  0││ Pi+1                       └  0  2  0  0┘└ Pi+2

となります。

もどる




■境界での曲線の方程式を求める

境界以外の場合と同様に、位置及び速度と制御点の関係式、

x0 = P0,
x1 = P1,
      1
v1 = ― (P2 - P0),
      2
                                       1
v0 =  2 (x1 - x0) - v1 = 2 (P1 - P0) - ― (P2 - P0),
                                       2

を。Ferguson / Coons 曲線の式に代入します。最後の v0 の項が、 適当な平均速度を与える様に推測した境界の速度です。 代入すると、

         1            ┌ 2 -2  1  1┐ 1 ┌ 0  2  0  0┐┌  0  x0(t) = ― [t3 t2 t 1]│-3  3 -2 -1│― │ 0  0  2  0││ P0         2            │ 0  0  1  0│ 2 │ 0 -3  4 -1││ P1                      └ 1  0  0  0┘   └ 0 -1  0  1┘└ P2         1            ┌  0  0  0  0┐┌ 0         = ― [t3 t2 t 1]│  0  1 -2  1││ P0           2            │  0 -3  4 -1││ P1                        └  0  2  0  0┘└ P2  

と、なります。

同様に、最後の曲線は、

xn   = Pn,
xn+1 = Pn+1,
      1
vn = ― (Pn+1 - Pn-1),
      2
                                            1
vn+1 =  2 (xn+1 - xn) - vn = 2 (Pn+1 - Pn) - ― (Pn+1 - Pn-1),
                                            2

から、

         1            ┌ 2 -2  1  1┐ 1 ┌ 0  2  0  0┐┌ Pn-1xn(t) = ― [t3 t2 t 1]│-3  3 -2 -1│― │ 0  0  2  0││ Pn           2            │ 0  0  1  0│ 2 │-1  0  1  0││ Pn+1                      └ 1  0  0  0┘   └ 1 -4  3  0┘└ 0            1            ┌  0  0  0  0┐┌ Pn-1      = ― [t3 t2 t 1]│  1 -2  1  0││ Pn           2            │ -1  0  1  0││ Pn+1                      └  0  2  0  0┘└ 0   

と、なります。

もどる





もどる

imagire@gmail.com