高速道路の円形のカーブの前後には、滑らかにハンドルを回して曲線区間を走行できるように、直線と円とを繋ぐ中間に緩和曲線が挿入されます。これをクロソイド曲線(clothoid)といいます。名神高速道路の線形設計にドイツの技術者が紹介して有名になりました。数学ではこれをCornuの螺旋といい、この曲線の立ち上がり部分がクロソイド緩和曲線として使われます。もともと緩和曲線という用語は鉄道の線路設計の用語でして、近似的に三次曲線が使われています。クロソイド曲線は遊園地のジェットコースターの曲線にも利用されています。もし直線から急に円に接続すると、つなぎ目で大きな加速度変化が起きて乗り心地も悪くなりますし、乗っている乗客が危険になります。Cornuの螺旋とは、曲率が、曲線に沿って測った長さに比例して増加または減少する曲線です。その全体図形は図6.3のようになります。通常の(x,y)平面座標系で表そうとしても、また極座標で表そうとしても簡単な式になりませんので、コンピュータがなかった時代には非常に数値計算の難しい曲線でした。
図6.3 Cornuの螺旋Cornuの螺旋の性質を求める基本式は、式(6.4)、(6.6)のフルネ・セレの公式に加えて、曲率変化が一定という条件を加えたものになります。曲線に沿って測った長さに変数記号tを使いますと、
ここでの記号のρは、曲率の変化率を表すとします。曲線上の任意の点r0を仮の原点として曲線式のマクローラン展開を求めます(図6.4)。
図6.4 クロソイドの微小区間
ここで、fとgとはt、κ、ρの関数と言う意味で、表6.1に示したような無限級数になります。この展開式を応用して、ある点r0から長さL離れた次の座標を求める実用式を表6.2のようにまとめることができます。これを応用して、クロソイド曲線の座標を次々に和分(積分)して求めることができます。精度を高めるためには、曲線に沿って測った弧長と弦長との長さの差を補正し、長さの差で生じる角度の差も補正します。図6.5は四回り1440度の螺旋を多角形近似で描いたもので、プログラムはG-BASICで記述してあります。四回りの曲線の全長を200等分、50等分した線分を重ねて描画してありますが、見た眼では多角形の格点がずれていません。
表6.1 Cornu螺旋を計算する級数項
次数 |
tの項 |
fの級数項の係数 |
gの級数項の係数 |
1 |
t |
1 |
0 |
2 |
t2/2! |
0 |
κ |
3 |
t3/3! |
−κ2 |
ρ |
4 |
t4/4! |
−3κρ |
−κ3 |
5 |
t5/5! |
κ4−3ρ2 |
−6κ2ρ |
6 |
t6/6! |
10κ3ρ |
κ5−15κρ2 |
7 |
t7/7! |
−κ6+45κ2ρ2 |
15κ4ρ−15ρ3 |
8 |
t8/8! |
−21κ5ρ+105κρ3 |
−κ7+105κ3ρ2 |
9 |
t9/9! |
κ8−210κ4ρ2+105ρ4 |
−28κ6ρ+420κ2ρ3 |
… |
… |
… … … … … … |
… … … … … … |
変数 |
計算式 |
変数の意味 |
i |
初期値0 |
格点番号 |
xi |
初期値x0=0 |
i番目のx座標 |
yi |
初期値y0=0 |
i番目のy座標 |
ti |
=Li |
曲線の延長 |
κi |
=κ0 + Lρi |
曲率 |
τi |
=τ>0 +κ0Li +ρL2i2/2 |
接線とx軸とのなす角度 |
θi |
=L(2κi +κi+1)/6 |
線分と接線とのなす角度 |
=κ0L/2+(1+3i)ρL2/6 |
||
φi |
=τi +θi |
線分の偏角 |
=τ0 + (2+i)κ0L/2+(1+3i+3i2)ρL2 |
||
di |
=L(1−κi2L2/24+κi4L4/1920−… |
線分の弦長(近似値) |
xi+1 |
=xi + di cosφi |
i+1番目のx座標 |
y i+1 |
=yi + di sinφi |
i+1番目のy座標 |
図6.5 クロソイドの作図例
10 REM ====== Cornu's Spiral Drawing =======
20 DEF2PT P : DEF2ED E : CLS : GROFF
30 DPWIND 0.5, 0.5, 2.1
40 TH=4*3.1416 : REM ----- two rounds spiral -----
50 INPUT N
60 P=P0 : SEGL=SQR(TH*2)/N
70 LET E0=0,0,SEGL,0 : ANG0=SEGL*SEGL/6*180./3.1416
80 FOR I=1 TO N
90 K=1-3*I+3*I*I : ANG=ANG0*K
100 TR=SEGL*SEGL*(I+I-1) : TR=1-TR*TR/96 : E1=E0*TR
110 GRON : E=MROT(ANG,P0)*E1+P : GROFF
120 P=REV(E)
130 NEXT I
140 GOTO 40