最終更新日時: 2025年08月25日 12:57
本セクションではTCBスプラインのパラメータが曲線の形状に与える数学的影響を解説する。2次元の具体例から3次元への拡張の数学的基礎を示し、各パラメータの設定指針を提供する。
TCBスプラインでは、各制御点にTension(t)、Continuity(c)、Bias(b)の3つのパラメータを設定する。これらは接線ベクトルの計算に以下のように影響する:
Di,i+1−Di,i+1+=2(1−t)(1+b)(1+c)(Pi−Pi−1)+2(1−t)(1−b)(1−c)(Pi+1−Pi)=2(1−t)(1+b)(1−c)(Pi−Pi−1)+2(1−t)(1−b)(1+c)(Pi+1−Pi)
ここで:
- Piは各座標で、座標の次元はユーザが定義
- Di,i+1− は点 Pi での出力接線
- Di,i+1+ は点 Pi+1 での入力接線
- t, c, b はそれぞれ Tension, Continuity, Bias
-
Tension (t)
- 数学的効果:係数 (1−t) によって接線の大きさをスケーリング
- t = -1: 接線ベクトルが2倍になる → 曲線が曲がりやすい(緩やか)
- t = 0: 標準的な大きさの接線ベクトル
- t = 1: 接線ベクトルが0になる → 曲線が直線的に
-
Continuity (c)
- 数学的効果:入力接線と出力接線の対称性を制御
- c = -1: (1+c)=0, (1−c)=2 → 接線の非対称性が最大
- c = 0: (1+c)=(1−c)=1 → 接線が対称的
- c = 1: (1+c)=2, (1−c)=0 → 逆方向の非対称性
-
Bias (b)
- 数学的効果:接線計算で使われる前後の点の影響度を調整
- b = -1: 次の点への影響が強まる
- b = 0: 前後の点が等しく影響
- b = 1: 前の点からの影響が強まる
具体的に、下記の2次元の点を用いて線を描く
P0P1P2P3P4=(0,0)=(10,25)=(20,−14)=(30,50)=(40,0)
として、PnとPn+1の間のセグメントをPn,n+1と示すことにする
まず、各セグメントを全てのパラメータを0にして計算する
- パラメータ
- t=0,c=0,b=0
- セグメントP0,1,P1,2,P2,3,P0,1,
注:Continuityとbiasが0の場合、入力接線と出力接線は同じになる。
以上より、Dを再掲すると下記のようになる。
D0,1−D1,2−D2,3−D3,4−=2(1)(1)(1)(P0−P0)+2(1)(1)(1)(P1−P0)=21(10,25)=(5,12.5)=21(P1−P0)+21(P2−P1)=21((10,25)−(0,0))+21((20,−14)−(10,25))=21(10,25)+21(10,−39)=(10,−7)=21(P2−P1)+21(P3−P2)=21((20,−14)−(10,25))+21((30,50)−(20,−14))=21(10,−39)+21(10,64)=(10,12.5)=21(P3−P2)+21(P4−P3)=21((30,50)−(20,−14))+21((40,0)−(30,50))=21(10,64)+21(10,−50)=(10,7)
また、これより、実際の線の式は
P0,1(u)P1,2(u)P2,3(u)P3,4(u)=(1−u)3P0+3u(1−u)2(P0+31D0,1−)+3u2(1−u)(P1−31D1,2−)+u3P1=(1−u)3(0,0)+3u(1−u)2((0,0)+31(5,12.5))+3u2(1−u)((10,25)−31(10,−7))+u3(10,25)=3u(1−u)2(1.67,4.17)+3u2(1−u)(6.67,27.33)+u3(10,25)=(1−u)3P1+3u(1−u)2(P1+31D1,2−)+3u2(1−u)(P2−31D2,3−)+u3P2=(1−u)3(10,25)+3u(1−u)2((10,25)+31(10,−7))+3u2(1−u)((20,−14)−31(10,12.5))+u3(20,−14)=(1−u)3(10,25)+3u(1−u)2(13.33,22.67)+3u2(1−u)(16.67,−18.17)+u3(20,−14)=(1−u)3P2+3u(1−u)2(P2+31D2,3−)+3u2(1−u)(P3−31D3,4−)+u3P3=(1−u)3(20,−14)+3u(1−u)2((20,−14)+31(10,12.5))+3u2(1−u)((30,50)−31(10,7))+u3(30,50)=(1−u)3(20,−14)+3u(1−u)2(23.33,−9.83)+3u2(1−u)(26.67,47.67)+u3(30,50)=(1−u)3P3+3u(1−u)2(P3+31D3,4−)+3u2(1−u)(P4−31D4,5−)+u3P4=(1−u)3(30,50)+3u(1−u)2((30,50)+31(10,7))+3u2(1−u)((40,0)−31(0,0))+u3(40,0)=(1−u)3(30,50)+3u(1−u)2(33.33,52.33)+3u2(1−u)(40,0)+u3(40,0)
となる。
P3,4を高Tension設定にした場合
- パラメータ設定
- t=0.8,c=0,b=0
下記のような計算結果となり、結果各セグメントの線は下記のようになる。
D3,4−=2(1−0.8)(1+0)(1+0)(P3−P2)+2(1−0.8)(1−0)(1−0)(P4−P3)=20.2((30,50)−(20,−14))+20.2((40,0)−(30,50))=0.1(10,64)+0.1(10,−50)=(2,1.4)
P3,4セグメントの曲線式:
P3,4(u)=(1−u)3P3+3u(1−u)2(P3+31D3,4−)+3u2(1−u)(P4−31D4,5−)+u3P4=(1−u)3(30,50)+3u(1−u)2((30,50)+31(2,1.4))+3u2(1−u)((40,0)−31(0,0))+u3(40,0)=(1−u)3(30,50)+3u(1−u)2(30.67,50.47)+3u2(1−u)(40,0)+u3(40,0)
P3,4を負のcontinuityを設定した場合
- パラメータ設定
- t=0,c=−0.6,b=0
下記のような計算結果となり、結果各セグメントの線は下記のようになる。
D3,4−=2(1−0)(1+0)(1+(−0.6))(P3−P2)+2(1−0)(1−0)(1−(−0.6))(P4−P3)=20.4((30,50)−(20,−14))+21.6((40,0)−(30,50))=0.2(10,64)+0.8(10,−50)=(2,12.8)+(8,−40)=(10,−27.2)
P3,4セグメントの曲線式:
P3,4(u)=(1−u)3P3+3u(1−u)2(P3+31D3,4−)+3u2(1−u)(P4−31D4,5−)+u3P4=(1−u)3(30,50)+3u(1−u)2((30,50)+31(10,−27.2))+3u2(1−u)((40,0)−31(0,0))+u3(40,0)=(1−u)3(30,50)+3u(1−u)2(33.33,40.93)+3u2(1−u)(40,0)+u3(40,0)
P3,4を負のTension設定にした場合
- パラメータ設定
- t=−0.8,c=0,b=0
D3,4−=2(1−(−0.8))(1+0)(1+0)(P3−P2)+2(1−(−0.8))(1−0)(1−0)(P4−P3)=21.8((30,50)−(20,−14))+21.8((40,0)−(30,50))=0.9(10,64)+0.9(10,−50)=(9,57.6)+(9,−45)=(18,12.6)
P3,4セグメントの曲線式:
P3,4(u)=(1−u)3P3+3u(1−u)2(P3+31D3,4−)+3u2(1−u)(P4−31D4,5−)+u3P4=(1−u)3(30,50)+3u(1−u)2((30,50)+31(18,12.6))+3u2(1−u)((40,0)−31(0,0))+u3(40,0)=(1−u)3(30,50)+3u(1−u)2(36,54.2)+3u2(1−u)(40,0)+u3(40,0)
P3,4をbiasのみ設定した場合
- パラメータ設定
- t=0,c=0,b=0.7
D3,4−=2(1−0)(1+0.7)(1+0)(P3−P2)+2(1−0)(1−0.7)(1−0)(P4−P3)=21.7((30,50)−(20,−14))+20.3((40,0)−(30,50))=0.85(10,64)+0.15(10,−50)=(8.5,54.4)+(1.5,−7.5)=(10,46.9)
P3,4セグメントの曲線式:
P3,4(u)=(1−u)3P3+3u(1−u)2(P3+31D3,4−)+3u2(1−u)(P4−31D4,5−)+u3P4=(1−u)3(30,50)+3u(1−u)2((30,50)+31(10,46.9))+3u2(1−u)((40,0)−31(0,0))+u3(40,0)=(1−u)3(30,50)+3u(1−u)2(33.33,65.63)+3u2(1−u)(40,0)+u3(40,0)
より複雑な効果を得るために、複数のパラメータを組み合わせることができる。例えば、P3,4に対してt=0.5,c=−0.4,b=0.3を設定すると:
D3,4−=2(1−0.5)(1+0.3)(1+(−0.4))(P3−P2)+2(1−0.5)(1−0.3)(1−(−0.4))(P4−P3)=20.5×1.3×0.6((30,50)−(20,−14))+20.5×0.7×1.4((40,0)−(30,50))=0.195(10,64)+0.245(10,−50)=(1.95,12.48)+(2.45,−12.25)=(4.4,0.23)
P3,4セグメントの曲線式:
P3,4(u)=(1−u)3P3+3u(1−u)2(P3+31D3,4−)+3u2(1−u)(P4−31D4,5−)+u3P4=(1−u)3(30,50)+3u(1−u)2((30,50)+31(4.4,0.23))+3u2(1−u)((40,0)−31(0,0))+u3(40,0)=(1−u)3(30,50)+3u(1−u)2(31.47,50.08)+3u2(1−u)(40,0)+u3(40,0)
P3,4に対して同じtension, continuityに対してbを変えた場合の効果を確認する
- パラメータ設定
- t=0.9,c=−0.7, bは可変
D3,4−=2(1−0.9)(1+(−0.3))(1+(−0.7))(P3−P2)+2(1−0.9)(1−(−0.3))(1−(−0.7))(P4−P3)=20.1×0.7×0.3((30,50)−(20,−14))+20.1×1.3×1.7((40,0)−(30,50))=0.0105(10,64)+0.1105(10,−50)=(0.105,0.672)+(1.105,−5.525)=(1.21,−4.853)
P3,4セグメントの曲線式:
P3,4(u)=(1−u)3P3+3u(1−u)2(P3+31D3,4−)+3u2(1−u)(P4−31D4,5−)+u3P4=(1−u)3(30,50)+3u(1−u)2((30,50)+31(1.21,−4.853))+3u2(1−u)((40,0)−31(0,0))+u3(40,0)=(1−u)3(30,50)+3u(1−u)2(30.40,48.38)+3u2(1−u)(40,0)+u3(40,0)
D3,4−=2(1−0.9)(1+0.3)(1+(−0.7))(P3−P2)+2(1−0.9)(1−0.3)(1−(−0.7))(P4−P3)=20.1×1.3×0.3((30,50)−(20,−14))+20.1×0.7×1.7((40,0)−(30,50))=0.0195(10,64)+0.0595(10,−50)=(0.195,1.248)+(0.595,−2.975)=(0.79,−1.727)
P3,4セグメントの曲線式:
P3,4(u)=(1−u)3P3+3u(1−u)2(P3+31D3,4−)+3u2(1−u)(P4−31D4,5−)+u3P4=(1−u)3(30,50)+3u(1−u)2((30,50)+31(0.79,−1.727))+3u2(1−u)((40,0)−31(0,0))+u3(40,0)=(1−u)3(30,50)+3u(1−u)2(30.26,49.42)+3u2(1−u)(40,0)+u3(40,0)
この設定により:
- 高いTensionで接線が短くなり、曲線が平坦化
- 負のContinuityで方向転換が鋭くなる
- Biasの調整で前後点の影響度が変化
P2,3を高Tension設定にした場合
- パラメータ設定
- t=0.8,c=0,b=0
[この計算結果を掲載]
P2,3を負のcontinuityを設定した場合
- パラメータ設定
- t=0,c=−0.6,b=0
[この計算結果を掲載]
P2,3を負のTension設定にした場合
- パラメータ設定
- t=−0.8,c=0,b=0
[この計算結果を掲載]
P2,3をbiasのみ設定した場合
- パラメータ設定
- t=0,c=0,b=0.7
[この計算結果を掲載]
P2,3に対してt=0.5,c=−0.4,b=0.3を設定した場合
[この計算結果を掲載]
P2,3に対して同じtension, continuityに対してbを変えた場合の効果を確認する
- パラメータ設定
- t=0.9,c=−0.7, bは可変
[この計算結果を掲載]
[この計算結果を掲載]
[この計算結果を掲載]
理論的にはパラメータは[-1,1]の範囲だが、数値計算上の安全性から推奨範囲がある:
-
Tension安全範囲(t ∈ [-0.9, 0.9])
- t < -0.9: 係数(1-t) > 1.9となり、極端な拡大でオーバーシュート
- t > 0.9: 係数(1-t) < 0.1となり、接線がほぼ消失
-
Continuity安全範囲(c ∈ [-0.8, 0.8])
- 極端な値では(1+c)または(1-c)が0に近づき、片方の影響が消失
-
Bias安全範囲(b ∈ [-0.9, 0.9])
- オーバーシュート: 曲線が制御点を超えて「行き過ぎる」現象
- エルミート基底関数: エルミート補間で使用される3次多項式の基底関数
- カトマル・ロム補間: 接線を隣接点から計算する特殊なエルミートスプライン