BVE5の最近の記事

BVE4から使えるようになったx形式のストラクチャファイルですが、
このとき同時に光源の方向を設定する構文も登場しました。

この「光源の方向を設定する構文」はストラクチャの面に対し明暗をつける作用をしますが、
他の3Dを扱うソフトとは異なり影を作る機能までは有していません。
いわばBVE2まででマニュアルで行っていた太陽の当たる側に明るい面を、当たらない側には面をそれぞれ設定する作業を
BVE側で自動でやってくれる機能といってもいいかと思います。

BVE4が出た当時は便利な機能だなーと思ったものですが、いざこの機能を使って作ってみると問題が生じました。

問題が起きたのは国境の長いトンネルを有する上越国境。
どんな問題なのか見てみましょう。
k201.jpg
屋外では太陽光があたっていますが、トンネルに入ると当然ながら太陽光は差し込みません。
変わりにトンネル内を照らすのは前照灯。

この2つの光は当然ながら角度が違います。

しかしBVE4・Bvets5では光源の方向を設定できるのは路線ファイル中でただ1回のみ
トンネルに入る前の光源設定がトンネル内でも生きてしまい、不自然な描画になってしまいます。

これを解決する方法のひとつがBvets5から出てきたLight.Diffuse構文(平行光の色)の値を(0,0,0)に設定することです。
(0,0,0)に設定することで一切の明暗が自動で付くことがなくなり
面の明暗はテクスチャのみで表現されることになります。

ここでの例は日なたとトンネルですが、ビル陰に隠れる都市路線や、木々の間を縫うローカル線など
日なたと日陰が連続する路線でも同様に平行光を無効化したほうが扱いやすいかと思います。

さて、ここで.xファイルに関してですが、.xファイルの面の明暗は各面の法線ベクトル等の要素で決まります。
しかし面の明暗は先ほど平行光を無効にすることで付かなくなるようにしたいと書いたわけですから、
現行のBvets5においては.xファイル自体に面の明暗を設定する記述を書かなくても特に問題はないわけです。
(ただ完全に消し去ってしまうとエラーとなって正常に読み込めないので、テキトーな値を入れておく必要はあります)

テキスト形式の.xファイルをメモ帳等で開いてみれば分かりますが、.xファイルの中身は
頂点座標、面の張り方、面の色、透過率、テクスチャ名、テクスチャマッピングと面の明暗に関わる情報です。
つまりメモ帳で書く限りは、面の明暗に関わる情報を除けばcsvを書くのと同じ感じで手打ちすることが可能なのです。

では前置きはこのあたりにして実際にストラクチャを作ってみましょう。
今回のお題はコレ。速度制限標識です。
k202.jpg
テクスチャはこちら
limit25.png
【lim25.png】

まずは柱なしで標識の板だけで書いてみましょう。
従来のcsvの書き方だと



CreateMeshBuilder,
AddVertex,-2.4,2.2,-0.04,
AddVertex,-1.8,2.2,-0.04,
AddVertex,-1.8,1.7,-0.04,
AddVertex,-2.4,1.7,-0.04,
AddFace,0,1,2,3
GenerateNormals,

LoadTexture,limit25.bmp,
SetTextureCoordinates,0,0,0,
SetTextureCoordinates,1,1,0,
SetTextureCoordinates,2,1,0.78,
SetTextureCoordinates,3,0,0.78,
SetDecalTransparentColor,0,0,0,



書き方に個人差はあるにしても見慣れた文かと思います。
ではこれを.xの書き方でやってみましょう。


xof 0303txt 0032

Material limit25 {
1.0000;1.0000;1.0000; 1.0000;;
0.0000;
0.0000;0.0000;0.0000;;
0.0000;0.0000;0.0000;;
TextureFilename { "limit25.png"; }
}

Mesh{
4;
-2.4000; 2.2000;-0.0400;,
-1.8000; 2.2000;-0.0400;,
-1.8000; 1.7000;-0.0400;,
-2.4000; 1.7000;-0.0400;;
1;
4;0,1,2,3;;

MeshMaterialList {
1;
1;
0;
{ limit25 }
}

MeshTextureCoords {
4;
0.0000,0.0000;
1.0000,0.0000;
1.0000,1.0000;
0.0000,1.0000;
}
}



これをメモ帳に貼って.x形式で保存してビューワで見ると正常に表示されているはずです。
詳しく見てみましょう。


xof 0303txt 0032  ←ヘッダ

Material limit25 {  ←材質グループ「limit25」の設定をする宣言
1.0000;1.0000;1.0000; 1.0000;;  ←面の色(RGBの3色、255が100%=1)と不透過率(100%=1)
0.0000;  ←面の明暗に関する値なので適当な値を入力
0.0000;0.0000;0.0000;;  ←面の明暗に関する値なので適当な値を入力
0.0000;0.0000;0.0000;;  ←面の明暗に関する値なので適当な値を入力
TextureFilename { "limit25.png"; }  ←テクスチャファイル名
}

Mesh{  ←頂点を作る宣言
4;  ←作る頂点の総数
-2.4000; 2.2000;-0.0400;,  ←0番目の頂点座標
-1.8000; 2.2000;-0.0400;,  ←1番目の頂点座標
-1.8000; 1.7000;-0.0400;,  ←2番目の頂点座標
-2.4000; 1.7000;-0.0400;;  ←3番目の頂点座標
2;  ←作る面の総数
4;0,1,2,3;;  ←0番目の面の構成要素(面を構成する頂点数;面を構成する頂点の番数)・右回りの順

MeshMaterialList {  ←面ごとの材質グループを設定する宣言
1;  ←設定する材質グループの総数
1;  ←材質グループを設定する面の総数
0;  ←0番目の面に0番の材質グループを設定
{ limit25 }  ←0番の材質グループに「limit25」を設定
}

MeshTextureCoords {  ←テクスチャマッピングを設定する宣言
4;  ←頂点の総数
0.0000,0.0000;  ←0番目の頂点のテクスチャマッピングの座標
1.0000,0.0000;  ←1番目の頂点のテクスチャマッピングの座標
1.0000,1.0000;  ←2番目の頂点のテクスチャマッピングの座標
0.0000,1.0000;  ←3番目の頂点のテクスチャマッピングの座標
}
}



最初は行数も多くなっているので難しく感じてしまうかもしれませんが、何度か試しているうちに慣れてくるかと思います。
ただエラーに関しては非常にシビアで、1箇所でも誤りがあるとビューワが固まるので、
その場合は記述をよく見直して修正して下さい。

続いてこのファイルに柱を入れます。
従来のcsvだと



CreateMeshBuilder,
AddVertex,-2.4,2.2,-0.04,
AddVertex,-1.8,2.2,-0.04,
AddVertex,-1.8,1.7,-0.04,
AddVertex,-2.4,1.7,-0.04,
AddFace,0,1,2,3
GenerateNormals,

LoadTexture,limit25.bmp,
SetTextureCoordinates,0,0,0,
SetTextureCoordinates,1,1,0,
SetTextureCoordinates,2,1,0.78,
SetTextureCoordinates,3,0,0.78,
SetDecalTransparentColor,0,0,0,

;柱
CreateMeshBuilder,
AddVertex,-2.13,1.8,0,
AddVertex,-2.07,1.8,0,
AddVertex,-2.07,-1,0,
AddVertex,-2.13,-1,0,
AddVertex,-2.13,1.8,0.06,
AddVertex,-2.07,1.8,0.06,
AddVertex,-2.07,-1,0.06,
AddVertex,-2.13,-1,0.06,
AddFace,0,1,2,3,
AddFace,5,4,7,6,
AddFace,1,5,6,2,
AddFace,4,0,3,7,
SetColor,192,192,192,
GenerateNormals,



これの.x形式での書き方は2つあり、1つはコンバータで作成される全ブロック一纏めという書き方ですが、
たとえば上の構文で標識自体に面や頂点を追加すると後ろの柱のブロックまで
書き換えが必要となる場合もあるので不向きな場合が多いかと思います。


xof 0303txt 0032

Material limit25 {
1.0000;1.0000;1.0000; 1.0000;;
0.0000;
0.0000;0.0000;0.0000;;
0.0000;0.0000;0.0000;;
TextureFilename { "limit25.png"; }
}

Material pole {
0.7500;0.7500;0.7500; 1.0000;;
0.0000;
0.0000;0.0000;0.0000;;
0.0000;0.0000;0.0000;;
}

Mesh{
12;
-2.4000; 2.2000;-0.0400;,
-1.8000; 2.2000;-0.0400;,
-1.8000; 1.7000;-0.0400;,
-2.4000; 1.7000;-0.0400;,
-2.1300; 1.8000; 0.0000;,
-2.0700; 1.8000; 0.0000;,
-2.0700;-1.0000; 0.0000;,
-2.1300;-1.0000; 0.0000;,
-2.1300; 1.8000; 0.0600;,
-2.0700; 1.8000; 0.0600;,
-2.0700;-1.0000; 0.0600;,
-2.1300;-1.0000; 0.0600;;
5;
4;0,1,2,3;,
4;4,5,6,7;,
4;5,9,10,6;,
4;9,8,11,10;,
4;8,4,7,11;;

MeshMaterialList {
2;
5;
0,
1,
1,
1,
1;
{ limit25 }
{ pole }
}

MeshTextureCoords {
12;
0.0000,0.0000;
1.0000,0.0000;
1.0000,1.0000;
0.0000,1.0000;
0.0000,0.0000;
0.0000,0.0000;
0.0000,0.0000;
0.0000,0.0000;
0.0000,0.0000;
0.0000,0.0000;
0.0000,0.0000;
0.0000,0.0000;
}
}



もう1つの書き方、標識は標識ブロック、柱は柱ブロック、という風に分けて書いていくことにします。


xof 0303txt 0032

Material limit25 {
1.0000;1.0000;1.0000; 1.0000;;
0.0000;
0.0000;0.0000;0.0000;;
0.0000;0.0000;0.0000;;
TextureFilename { "limit25.png"; }
}

Material pole {
0.7500;0.7500;0.7500; 1.0000;;
0.0000;
0.0000;0.0000;0.0000;;
0.0000;0.0000;0.0000;;
}

Mesh{
4;
-2.4000; 2.2000;-0.0400;,
-1.8000; 2.2000;-0.0400;,
-1.8000; 1.7000;-0.0400;,
-2.4000; 1.7000;-0.0400;;
1;
4;0,1,2,3;;

MeshMaterialList {
1;
1;
0;
{ limit25 }
}

MeshTextureCoords {
4;
0.0000,0.0000;
1.0000,0.0000;
1.0000,1.0000;
0.0000,1.0000;
}

MeshNormals {
1;
0.0000;0.0000;-1.0000;;
1;
4;0,0,0,0;;
}
}

Mesh{
8;
-2.1300; 1.8000; 0.0000;,
-2.0700; 1.8000; 0.0000;,
-2.0700;-1.0000; 0.0000;,
-2.1300;-1.0000; 0.0000;,
-2.1300; 1.8000; 0.0600;,
-2.0700; 1.8000; 0.0600;,
-2.0700;-1.0000; 0.0600;,
-2.1300;-1.0000; 0.0600;;
4;
4;0,1,2,3;,
4;5,4,7,6;,
4;1,5,6,2;,
4;4,0,3,7;;

MeshMaterialList {
1;
4;
0,
0,
0,
0;
{ pole }
}
}


こちらの柱のブロックではテクスチャを使用していないのでMeshTextureCoordsを省略できます。

Materialのところの0.7500という数字は192÷255の近似値です。

数値は上で小数で書いているところは小数で書く必要があるようで、
整数で書くとエラーを返される場合があります。

csv形式では「;」を文頭にすることでコメント扱いにできましたが.x形式ではできないようです。
代わりにそれぞれのブロックごとに名前をつけることはできるようで、
Mesh{ の箇所を Mesh limit25{ や Mesh pole{ とすることができます。
k203.jpg

なお最後になりますが、ビューワとしてRock_Onさんのストラクチャビューワを使う場合は
View>Change render setting から Deffuse color を 0,0,0 に変更して確認して下さい。

今回の記事は以下のwebページを参考にしました。
ゲームプログラマーを目指すひと Xファイルを解析してみる
mikunanakusa/MMDExporter・GitHub

南線の製作を一時休止して国境の改修の行っている関係で更新が止まっておりますが、
国境側で行っているストラクチャの製作は南線側でも必要な事柄なので簡単に書いておきます。

少し前に国鉄トンネルの標準断面CADデータをアップしてあるので、今回は単線1号型側壁直に
大き目の退避坑を付けてみます。
k101.jpg

1.必要なツール等

 ・Jw_cad(2次元CAD)
    http://www.jwcad.net/

 ・SketchUp(3次元モデリングソフト)
    http://www.sketchup.com/intl/ja/
      →Proでない版の使用で十分

 ・RSjww(Jw_cadのデータをSketchUpに送るプラグイン)
    http://hinoado.com/tw/index.html#RSjww%20TopPage

 ・ MMDExporter(SketchUpのデータを.xファイルに出力するプラグイン)
    https://github.com/mikunanakusa/MMDExporter

 ・ImageMagick(MMDExporterの使用で必要)
    http://www.imagemagick.org/script/index.php
      →MMDExporterのim_setup.htmlの頁を見ながらインストール

各ツールのインストールはインストール画面又はReadMe等に従って行ってください。


2.Jw_cadで製図

 竣工図や形式図、外観図等を参考に製図します。
 ここでは新清水隧道工事誌を参考に以下の図面を作ります(寸法不要)。
k102.gif


3.Jw_cadのデータをSketchUpに送る

 RSjwwでデータを送りますが、使い方は http://hinoado.com/tw/index.html#RSjww%20TopPage を参照して下さい。
 SketchUpは「表示」>「ツールバー」>「RSjww」にチェックを入れておき「jw」のアイコンを出しておきます。


4.2Dの3D化
 Jw_cadから送られたデータは地面と平行の状態になっているので、回転ツールでこれを地面と垂直な状態にします。
k103.jpg
 グループ化されている場合は垂直にしてからとりあえず分解し、適当に頂点同士を結んでは線を消すの繰り返しで面を張ります。
k105.jpg
 曲線部の分割数は線上を右クリックし、エンティティ情報からセグメント数の項に適当な数字を書くことで調整できます。
 この面を押出ツールで押し出します(押出長数値入力可)。
k104.jpg
 トンネルを閉そくする断面は削除します。
k106.jpg
 退避坑の断面を90度回転し、側壁にくっ付けます。
k107.jpg
 退避坑の断面を奥行き分だけ押し出します。
k108.jpg
 退避坑の断面が側壁の曲面にくっ付いてないので、
k109.jpg
 断面を手前に押し出します。
k110.jpg
押し出した曲面と側壁には共有する線がないので、
どちらかの曲面上で右クリックして「面を交差」>「モデルと交差」して共有線を作ります。
k111.jpg
不要な線と面を消して3D化完成。あとはテクスチャを貼り付ければ出来上がりです。
k112.jpg


5. .xファイルで出す

GoogleSketchUpでBVEストラクチャを作る(Bve trainsim 5 から始める BVE Wiki)を参照
k113.jpg


.csvストラクチャと比べると座標計算が皆無な上、操作も非常に簡単なので10分もあれば製図から3D化までできてしまいます。
.csvでやろうとすると曲面同士の座標計算が非常に厄介なうえ、面を張るのも大変なので、作業の簡略効果は絶大です。

他線の設定方法は7回目に扱っていますので、CAD配線図から線路間隔を求め、
mapファイルに書いていく作業の繰り返しとなります。

こうしてできたのが11回目の最後に出てきた下のSSです。
9011l.gif

今回敷設に使用したレールストラクチャは5m長のものですが、これの敷き方はおそらく十人十色でしょう。

たとえば下の74.750km~74.789kmを見てみましょう。
9013a.gif
8番線の74.757kmまでは線路間隔16.9mで、そこから長さ20mの緩和曲線、R500の円曲線と続いています。
緩和曲線長が20mだからこの区間に4個のストラクチャを配して、その終始端で.Positionを設定すれば
キレイに曲げられる、と考える人もいるでしょうし、
線路間隔が変わる位置を気にせずに等間隔で.Positionとストラクチャを配していく人も要るでしょう。
またストラクチャは一律に5mごとにしながら、.Positionは線路間隔が変わったら随時置いていく人もいるでしょう。

どのやり方が良くてどのやり方が悪い、というのは当然ながらありませんし、
各人の創造性が100%発揮される方法であればそのやり方が優先されるべきではありますが、
私が書いてみたところでは先の2番目に準じたやり方が.Positionをまとめて書けて都合が良かったので
ここでは基本的に.Positionは5mごとに配していくことにします。

さて、そんな具合に一応線路を敷くまでは辿り着きましたが、
ポイントもクロッシングも何もない分岐器というのはBVE2/4時代ならともかく、
フルHDの全画面、もしくはそれ以上でこれをやりますとリアリティが一気に失われてしまいます。
海外の作品では2/4時代でもこのあたりは既に標準ですし、
Bvets5が従来の日本的考えを改めるいいきっかけになるのではないかと期待しています。

それでは一から分岐器を作りましょう、となると作る労力は果てしないのでこちらで線形だけ作ったものを
mapファイルと一緒にアップしますので、あとは煮るなり焼くなり好きにして頂いて、
色々調整しながら知識を深めてもらえればと思います。
(線形固定のために作ったものなのでテクスチャもトングレールもない仮状態ですが
 将来的には分岐器ストラクチャ単体での公開を考えています)

.xファイルの編集は『Bve trainsim 5 から始める BVE』の中に記事がありますので

そちらをご覧ください。

これらのストラクチャをstructures.txtに書き込む作業は初回に扱っていますのでその時と同様に行いますが、
今回アップした分岐器ストラクチャは全てを使うわけではないので使うもののみを記述します。

structures.txtに追加

Switch_08_1-0-FL,structures\x_output\sw08_FL.x
Switch_08_1-0-FR,structures\x_output\sw08_FR.x
Switch_08_1-0-ML,structures\x_output\sw08_ML.x
Switch_08_1-0-MR,structures\x_output\sw08_MR.x
Switch_10_1-0-FL,structures\x_output\sw10_FL.x
Switch_10_1-0-FR,structures\x_output\sw10_FR.x
Switch_10_1-0-ML,structures\x_output\sw10_ML.x
Switch_10_1-0-MR,structures\x_output\sw10_MR.x
Switch_10_9-1-FL,structures\x_output\sw10_9-1_FL.x
Switch_10_7-3-ML,structures\x_output\sw10_7-3_ML.x
Switch_10_3-2-FR,structures\x_output\sw10_3-2_FR.x
Switch_10_3-2-ML,structures\x_output\sw10_3-2_ML.x
Switch_10_3-1-MR,structures\x_output\sw10_3-1_MR.x
Switch_12_1-0-FR,structures\x_output\sw12_FR.x
Switch_12_1-0-ML,structures\x_output\sw12_ML.x
Switch_12_9-1-FL,structures\x_output\sw12_9-1_FL.x
Switch_12_9-1-ML,structures\x_output\sw12_9-1_ML.x
Switch_12_4-1-FR,structures\x_output\sw12_4-1_FR.x
Switch_12_3-2-FL,structures\x_output\sw12_3-2_FL.x
Switch_12_DSS,structures\x_output\sw12_DSS.x


本丸の分岐器ストラクチャの配置ですが、今回アップしたストラクチャは分岐器のどちらに(から)進む場合も同じ物を使います。
またストラクチャの設置は分岐半径の大きい側の線路に対して設置します。

(例1)
74948; Repeater[Rail-005].Begin0( 5, 3, 25, 25, Switch_10_3-1-MR);
74973; Repeater[Rail-005].Begin0( 5, 3, 5, 5, Rail-100);

たまたまsw10_3-1_MR.xは長さ25mのストラクチャになりましたので、そのまま前後をRail-100の普通軌道ストラクチャで挟み込めば分岐器一丁上がり!となりそうですが、そうは問屋が卸さないわけで、
普通軌道ストラクチャの開始距離が****3mか****8mでないと分岐器ストラクチャと重なってしまいます。


幸いこの例の分岐器の手前には分岐器が全くないので開始距離を****3mか****8mにすることが可能ですが、
手前に分岐器がある場合はその間隔が5mの倍数とは限りませんので端数調整用のストラクチャが必要になります。
ここでは単純に1~4m長のレールのみストラクチャで仮置きすることにして以下のファイルを読み込みます。

structures.txtに追加
Rail-1m,structures\x_output\rail-1m.x
Rail-2m,structures\x_output\rail-2m.x
Rail-3m,structures\x_output\rail-3m.x
Rail-4m,structures\x_output\rail-4m.x

これにより先の例は下記のように書き換えられます。

(例2)
74945; Repeater[Rail-005].Begin0( 5, 3, 3, 3, Rail-3m);
74948; Repeater[Rail-005].Begin0( 5, 3,25,25, Switch_10_3-1-MR);
74973; Repeater[Rail-005].Begin0( 5, 3, 2, 2, Rail-2m);
74975; Repeater[Rail-005].Begin0( 5, 3, 5, 5, Rail-100);

これをBvets5で見てみるとこうなります。
9013b.jpg

ここまでは他線が分岐していく(くる)場合の単純な例でしたが、こちらの場合ではどうでしょう。
9013c.jpg
自線が他線から分岐していく場合です。

先にこの部分の構文を書きだしてみましょう。
75140; Curve.BeginTransition();
Repeater[Rail-000].Begin0( 0, 3, 4, 4, Rail-4m);
75144; Repeater[Rail-000].End(); //分岐器始端
Track[ 1].Position( 0.0000, 0.0000);
Repeater[Rail-001].Begin(1, 0, 0, -0.055, 0, 0, 0, 3, 26, 26, Switch_10_1-0-FL);
75146; Curve.BeginCircular(-1092.69006122405, 0.000);
75147; Curve.BeginCircular(-182.272057846637, 0.000);
75150; Track[ 1].Position( 0.0279, 0.0000);
75155; Track[ 1].Position( 0.1835, 0.0000);
75160; Track[ 1].Position( 0.4770, 0.0000);
75165; Curve.End();
Track[ 1].Position( 0.9095, 0.0000);
75170; Repeater[Rail-000].Begin0( 0, 3, 5, 5, Rail-100);
Track[ 1].Position( 1.4064, 0.0000);
Repeater[Rail-001].Begin0( 1, 3, 5, 5, Rail-100);

赤字が当該の分岐器ですが、自線ではなく分岐される1番の他線に設置しています。
中でも注目なのが太字部分のRepeater.Begin構文(Repeater.Begin0構文ではない)と-0.055です。
Repeater.Begin構文は初出ですが、Repeater.Begin0構文の内容に加え、三次元の移動と回転ができるものです。
(軌道名,Δx,Δy,Δz,θx,θy,θz,以下Repeater.Begin0と同じの順)
また-0.055は下図の55mmの部分ですので分岐器によってこの値は変わってきます。
9013d.gif

このようにして設定することで分岐器を設置することができました。
9013e.jpg


さて、要所要所で1mごとの設定を行ってきたので、
現時点で高崎駅構内の1km弱の間でmapファイルは1000行近く書くことになりました。
当然のことながら25m縛りがあったBVE2/4時代ではこれほど多く書くこともありません。

じゃあここは面倒だから25mごとで書いてしまえばいいじゃないか、というのも1つの意見ですが、
1mごとの設定で配線に無理がなくなったお陰で実際の配線と比べてもそれほど違和感のない配線になってくれました。
無理をしないというのは非常に大切で場合によっては2/4時代より簡単に配線できるかと思います。

労力と見た目のバランスを見極めて作ってみて下さい。

13回までのマップファイル等です。

## ファイル使用条件 ##

この記事で配布している9773M-map(13).zipに含まれるいずれのファイルも連絡なしに自由にお使いいただけます。
著作財産権は放棄しますが、著作者人格権は放棄していませんのでご使用の際はご注意下さい。
これらのファイルを使用したことに起因する不具合等は当方では一切の責を負いません。
今後の更新によりファイルの改廃がありますでの予めご承知おき下さい。
使用条件は今後変更する場合があります。変更した場合は最新の使用条件を適用するものとします。


9773M-map.txtおよびストラクチャ
 →9773M-map(13).zip

structures.txt(Rail-100のパス変更)
bvets structure list 0.02
Rail-100,structures\x_output\rail-5m.x
Rail-1m,structures\x_output\rail-1m.x
Rail-2m,structures\x_output\rail-2m.x
Rail-3m,structures\x_output\rail-3m.x
Rail-4m,structures\x_output\rail-4m.x

Switch_08_1-0-FL,structures\x_output\sw08_FL.x
Switch_08_1-0-FR,structures\x_output\sw08_FR.x
Switch_08_1-0-ML,structures\x_output\sw08_ML.x
Switch_08_1-0-MR,structures\x_output\sw08_MR.x
Switch_10_1-0-FL,structures\x_output\sw10_FL.x
Switch_10_1-0-FR,structures\x_output\sw10_FR.x
Switch_10_1-0-ML,structures\x_output\sw10_ML.x
Switch_10_1-0-MR,structures\x_output\sw10_MR.x
Switch_10_9-1-FL,structures\x_output\sw10_9-1_FL.x
Switch_10_7-3-ML,structures\x_output\sw10_7-3_ML.x
Switch_10_3-2-FR,structures\x_output\sw10_3-2_FR.x
Switch_10_3-2-ML,structures\x_output\sw10_3-2_ML.x
Switch_10_3-1-MR,structures\x_output\sw10_3-1_MR.x
Switch_12_1-0-FR,structures\x_output\sw12_FR.x
Switch_12_1-0-ML,structures\x_output\sw12_ML.x
Switch_12_9-1-FL,structures\x_output\sw12_9-1_FL.x
Switch_12_9-1-ML,structures\x_output\sw12_9-1_ML.x
Switch_12_4-1-FR,structures\x_output\sw12_4-1_FR.x
Switch_12_3-2-FL,structures\x_output\sw12_3-2_FL.x
Switch_12_DSS,structures\x_output\sw12_DSS.x

stations.txt
bvets station list 1.01
sta701,高  崎,,,,,0,,0,,,0,0
sta702,高崎問屋,,,,,0,,0,,,0,0
sta703,井  野,,,,,0,,0,,,0,0
sta704,新 前 橋,,,,,0,,0,,,0,0
sta705,群馬総社,,,,,0,,0,,,0,0
sta706,八 木 原,,,,,0,,0,,,0,0
sta707,渋  川,,,,,0,,0,,,0,0

ファイル構成
9013f.gif

今回は線路を敷こうかと思ったのですが、前回の配線図作成において
片開き分岐器以外の分岐器について扱い忘れたのでこれを扱います。
さすがにこれを忘れると配線図すら作れませんね。失礼致しました。

配線が簡素な駅や最近できた駅は片開き分岐器のみで構成されている場合も多いのですが、
簡素な国鉄型配線でも中線がある場合は両開きか振分け分岐器が入っていることも多いので、片開きだけとはいきません。

両開き分岐器は吾妻線で連続してますし、
振分け分岐器は数は少ないものの高崎駅を別とすれば八木原駅の中線に使われています。
画像フォルダを漁ってみたのですが振分け分岐器の丁度いい角度のものがなかったので
代わりの場所を探してみたら常磐線の相馬駅の振分け分岐器の画像が出てきました。
9012a.jpg
一見すると両開き部分岐器ですが55km/h制限の狭軌での両開き分岐器は一般にありませんので
12番の3:2の振分け分岐器と判断できます。
特急停車駅とはいえ、この程度の規模の駅でも使われているのでごく普通に使われていることがお分かり頂けるでしょうか。

今回の題目は片開き以外の分岐器と付けてはいますが、
高崎駅以北でシーサスクロッシング(両渡り)を除いた両開き分岐器か振分け分岐器以外の分岐器は
水上駅南側の内方分岐器と石打駅南方のダイヤモンドクロッシングの計2ヶ所しか確認していませんので
ここでは両開き分岐器か振分け分岐器をメインに扱いますが、若干の差異はあるものの
両開き分岐器=振分け率1:1の振分け分岐器、片開き分岐器=振分け率1:0の振分け分岐器と
捉えても差し支えないかと思いますので深く考える必要はありません。

ただ1点、Bvetsの距離方向の長さが最小1m単位という制限の元、
片開き分岐器は番数そのままで複線間隔3.8mの片渡り線が組めるように半径や曲線長を求めたのですが、
両開き分岐器や振分け分岐器では複線間隔3.8mに縛られるシーンも少ないのでこの制限を外し、
距離方向の長さが最小1m単位かつ番数そのままの2条件のみで半径や曲線長を求めました。

9012b.jpg
(クリックで拡大・pdf・軌間1067mmの場合)


さて、一般の分岐器は何対何の振分け分岐器か、もしくは両開き分岐器なのか、といったことは書かれていないのが普通ですから、これらがどれに該当するのか判断しないといけません。
中にはご丁寧に7:3と振分け率を書いていてくれるところもありましたが、このような例はあまりないです。
9012c.jpg

一番簡単に見分けられるのが制限速度で、軌間1067mmで簡易線区以外では次のようになっています。
9012d.gif
(参考:『線路―軌道の設計・管理: 宮本俊光, 渡辺偕年』216~217頁)
(片開き分岐器の*:設備や列車により異なる)

番数に関してはクロッシングに書いてあるものもあります。
9012f.jpg
この場合は50Nレール用の8番ということですね。

一方でこの表示がないものもありますが、これはクロッシングが載る枕木の数=犬釘の数を数えれば分かります。
9012e.jpg
40レール、50Nレールでは8番が7本、10番が8本、12番が9本、
60レールでは8番が8本、10番が9本、12番が10本です。
(参考:『分岐器ハンドブック』 社団法人 日本鉄道施設協会)

以上のことを元にして配線図を作っていきます。
また次回以降はこの規格を基にした分岐器の設置をしていきます。

なお内方分岐器と外方分岐器は詳細図面がないので把握しきれていないこともあるので、
詳細が分かり次第、書いていこうかと考えています。

今回は他線が緩和曲線を含むS字曲線の場合の他線の敷き方です。
サンプルは高崎駅からまたも離れて八木原駅の少し南方です。
こちらも橋梁があるために複線間隔が広がっています。
9009ga.jpg

9009gb.gif
実はこちらも途中で勾配変化点がありますがここでは割愛します。

他線の緩和曲線の座標計算はExcel使用の場合とJw_cad使用の場合で考えてみます。
CADの場合は計算も何もいらないので楽なのですが、CADは慣れてないと難しいですよね。
そんな訳でまずはExcelを使った場合から。

この段階でお断りなのですが、自線が曲がる場合はサイン半波長逓減曲線で計算していますが、
他線の場合は直線の自線を基準に計算すると簡単な3次放物線で計算しています。
仮に自他線を交換する場合がある場合には線形が変わってしまう場合もありますのでご注意下さい。


それではまずは3次放物線緩和曲線のBVEでの考え方から。
9009gc.gif
原点をBTC、x軸を青線y軸を橙線とし、黄色の緩和曲線上の点の赤●の座標を(x,y)とするとx,yは次式で表せます。

  y=x3/6RX

さっそく3次放物線が出てきました。Rは円曲線の半径、XはBCCでのx座標です。
緩和曲線は文字通り曲線で、BTCから赤●を経てBCCに到る行程(実際のTCL)はXよりも明らかに長いのですが、
実際のTCLとXの長さの差はきわめて小さく、実際の軌道敷設でも実際のTCL=Xと近似していることが多いので
BVEでもこれに従うこととします(以後TCL=Xとして記述します)。

緩和曲線に繋がる円曲線は青線からFだけ離れた平行線とBCCからXbの距離の点で接します。
つまりこの円の中心座標はCx=X-Xb=Xa,Cy=R+Fとなります。
F,Xbは下の式で表されますが、簡易的にはF=X2/24R,Xb=X/2で計算する場合があります。
9009gf.gif

円曲線部分を挟んで出口側の緩和曲線はBCCとECCの垂直二等分線(下図赤線)を軸に線対称させます。
9009gd.gif
図中CCLは実際のCCLのx成分を示しています(以下同様)。
角度のある線で線対照したことでETCのx座標は整数ではなくなりますが、その先の接線で座標をとれば問題ないです。

以上の考え方で計算した結果をExcelでまとめました。
◆ 計算ファイルDL ◆ (transition_curve_2 Ver.1.00 2012.10.8)

9009ge.gif
使い方は簡単で、赤枠内のR,TCL,CCL,距離を入力し、橙枠内の距離に対応するXの値を軌道間隔の値として使用します。
(ややこしいですがファイル中のXは先に出てきた計算でのy(=x3/6RX)に該当します)


mapファイルの書き方はCAD使用の後に書きますので、ここで一旦CADで求める場合を挟みます。


CADで書く際の位置関係はExcelの考え方と同一です。
問題はBTC-BCC間を結ぶ3次放物線の緩和曲線部ですが、Jw_cadには3次放物線を描く機能がありません。
そこでJw_cadで描ける曲線で近似することになるのですが、色々試した結果スプライン曲線(分割数=TCL*10)描いた場合が
3次放物線の線形に極めて近い(特定条件で誤差1mm未満)のでこれで代用します。

中間点をBTC、BCCにし、始点と終点はBTCとBCCそれぞれの外方1mmの点にします。
9009gg.gif
これで入り口側は製図終了ですので、出口側を線対照すればオッケーです。


ExcelもCADもS字の片方だけしか求めていないので、(8)~他線の設定 2(自線がS字)~と同様にもう片方を求めます。
mapファイルに記述する構文はBvets5.3より登場した新構文を入れてみました。

Track[1].Position( 3.9090, 0.0000, 2000, 0);
Track[1].Position( 3.9628, 0.0000, 0, 0);

5.2までパラメータが2つだった.Position構文に他線の平面曲線半径(上の第3項)と
縦曲線半径(上の第4項)を設定できるようになりました。(従来どおり2パラメータの構文も残存)
試してみた限りでは自線が直線の場合、もしくは自線が円曲線で他線が直線の場合に使えそうな構文です。
この構文と先に求めた軌道間隔で構文を書いてみました。

91600;Track[1].Position( 3.8000, 0.0000);
Repeater[Rail-001].Begin0(1, 3, 5, 5, Rail-100); //仮設
91875;Track[1].Position( 3.8000, 0.0000);
91876;//上りBTC
91880;Track[1].Position( 3.8002, 0.0000);
91885;Track[1].Position( 3.8020, 0.0000);
91890;Track[1].Position( 3.8076, 0.0000);
91895;Track[1].Position( 3.8191, 0.0000);
91900;Track[1].Position( 3.8384, 0.0000);
91905;Track[1].Position( 3.8677, 0.0000);
91906;//上りBCC R2000
91910;Track[1].Position( 3.9090, 0.0000, 2000, 0);
91915;Track[1].Position( 3.9628, 0.0000, 0, 0);
91919;//上りECC
91920;Track[1].Position( 4.0290, 0.0000);
91925;Track[1].Position( 4.1072, 0.0000);
91930;Track[1].Position( 4.1953, 0.0000);
91935;Track[1].Position( 4.2914, 0.0000);
91940;Track[1].Position( 4.3933, 0.0000);
91945;Track[1].Position( 4.4990, 0.0000);
94949;//上りETC
91950;Track[1].Position( 4.6063, 0.0000);

//ここから一定の割合で軌道間隔広がる

91975;Track[1].Position( 5.1439, 0.0000);
91977;//上りBTC 5.1869
91980;Track[1].Position( 5.2513, 0.0000);
91985;Track[1].Position( 5.3575, 0.0000);
91990;Track[1].Position( 5.4603, 0.0000);
91995;Track[1].Position( 5.5577, 0.0000);
92000;Track[1].Position( 5.6476, 0.0000);
92005;Track[1].Position( 5.7280, 0.0000);
92007;//上りBCC R-2000
92010;Track[1].Position( 5.7967, 0.0000,-2000, 0);

//この間R2000

92020;//上りECC
Track[1].Position( 5.8967, 0.0000, 0, 0);
92025;Track[1].Position( 5.9283, 0.0000);
92030;Track[1].Position( 5.9465, 0.0000);
92035;Track[1].Position( 5.9623, 0.0000);
92040;Track[1].Position( 5.9689, 0.0000);
92045;Track[1].Position( 5.9714, 0.0000);
92050;//上りETC
Track[1].Position( 5.9717, 0.0000);
92450;Track[1].Position( 5.9717, 0.0000);
Repeater[Rail-001].End(); //仮設

9009gh.jpg

9回までのマップファイル全文です。

9773M-map.txt
 →9773M-map(9).txt

structures.txt

bvets structure list 0.02
Rail-100,structures\ballast-5.x

stations.txt

bvets station list 1.01
sta701,高  崎,,,,,0,,0,,,0,0
sta702,高崎問屋,,,,,0,,0,,,0,0
sta703,井  野,,,,,0,,0,,,0,0
sta704,新 前 橋,,,,,0,,0,,,0,0
sta705,群馬総社,,,,,0,,0,,,0,0
sta706,八 木 原,,,,,0,,0,,,0,0
sta707,渋  川,,,,,0,,0,,,0,0

ファイル構成
9003b.gif

やっと上越線基点の高崎駅に辿り着きました。
どこもそうだとは思いますが、ターミナル駅は線路を敷くのは大変です。
高崎駅は北側には留置線こそないものの、最も西側の北部入換線からは最も東側の9番線まで、
直に本線を横断できるなど、ご存知のとおり複雑な配線になっています。
9011a.jpg


BVE2/4では25m長の直線上(曲線では弦)に基準線が存在していたため、
曲線の周辺ではXZ平面(地面)で座標が存在しない箇所もありましたが、
BVE5では設定した線形どおりに基準線も設定されるようになり、他線設定も随分楽になりました。

1m毎に他線の設定ができるのも利点に一つですが、
逆に言い換えれば1m毎に細かく設定しなければならない箇所もあるということで、
従来の「※数値設定→上書き保存→F5→※へ戻る」の繰り返しではキリがなく、効率も落ちると考えられます。


そこでBVE5の利点を最大限利用すべく、フリーの2次元汎用CADソフトである「Jw_cad」を使ってみました。

  Jw_cadのダウンロード → http://www.jwcad.net/(Jw_cadのページ)

たまたまJw_cadを使う機会があったついでではありますが、全くの初めての状態から2週間程度弄くれば
高崎駅北側の配線図が書ける程度の操作は身に付きます。

ただ業務用としても使えるほどのソフトなのでテキスト等がない状態からはじめるのは少々難しいでしょうか。
実際に自分自身もネット上の情報見ながらの操作では全く進歩しなかったので、
少なくとも図書館から解説本を借りてきたほうが良いかと思います。
私は日経BPから出ている『ドリルで学ぶJw_cad―高校生からのCAD入門書』を参考にしましたが、
高校生からの~と謳っているだけあって分かりやすい本でした。

当然ながらCADソフトは他にも沢山ありますので、ご自身にあったものをお使いになるのが良いかと思います。
実際にJw_cadは市販のものにないクロックメニューが使いづらいという声も聞かれました。


製図に関してですが、以下の制限で描かなければいけません。
・自線の線形設定は線上で1m単位のみ(小数不可・BVE側の都合)
・自線の緩和曲線はBVE本体に表示される半径の弧の集合体(サイン半波長曲線非対応・Jw_cad側の都合)
  →小数点以下非表示なので(6)~緩和曲線 2~で作ったExcelファイルを使用
・他線の緩和曲線はスプライン曲線による近似曲線(サイン半波長曲線及び3次放物線非対応・Jw_cad側の都合)→後述
・分岐器は実物の規格に近しいものを使用 →(2)~レイアウト~参照
......とこんな具合でしょうか。

これらを念頭に製図していきます。


(1)自線の線形
前述のように基準軸になるので特に丁寧に作る必要があります。
高崎駅6番線からの進路では大小7つの曲線を通って真っ直ぐな下り本線へ繋がります。(下図白柱の立つ線)
9011b.jpg
緩和曲線が存在するので自線だけは先にmapファイルに書いてしまいました

この際に意識したのは停車場外の本線を真っ直ぐ延伸すると停車場内のどこに位置するかということです。
一番最初に出した画像は上越上り線の旧伊勢崎街道踏切あたりから撮ったものですが、
上り線のほぼ延長線上には2番線に停車中の115系の姿が見えます。
つまり2番線と上越上り線がほぼ一直線になるのが最終目標となります。
2番線と6番線の線路間隔は連絡通路の40cm四方のタイルを数えて求めました。

これを念頭に曲線標を参考にデータを入力します。しかし......
9011c.jpg

上の曲線など、標がない曲線も存在します。
また標のとおりに値を入れても、実際のところ線形は完全に再現されるわけではない
(サイン半波長曲線⇔3次放物線の問題を別にして)ので、調整する必要性が出てきます。
高崎駅でも数値どおりに値を入れたら進行方向左側へと逸れていきました。

このあたりはBVE5の機能を生かして1m毎にBCCやTCCの位置やRを変え試行錯誤です。
結果はご覧のとおり。
9011d.jpg


この線形を製図します。(Jw_cadの操作に関しての詳細は今回書きませんので疑問点があればコメントを)
9011e.jpg
距離は上図中、横方向の線で10mごとに実線で描いてあります。
これは自線に対して垂直(曲線では接線に対して垂直)な線です。
複線コマンド、距離コマンド、延伸コマンド、鉛直コマンドあたりを使用して引いていきます。

●間の細かい破線は緩和曲線に該当するところですが、半径指定の接円コマンドで接円を書いた後、
距離コマンドで1mを指定、余分な箇所を削除、の流れで描いていきます。
出口側では接円コマンドで外接円が描けないので、一旦接線を引いた後に接円を描いていきます。

●区間より上の荒い破線は円曲線で、半径指定の接円コマンドのみで描けます。

(2)他線の線形
こちらはある程度融通が利くので、分岐器の終始端、分岐器の番数、大よその線形を意識しながら描くことになります。
曲線の終始端が距離軸とずれて小数になっても問題はないです。
特に気をつけるべきところはといえば自線が自線と他線の傾きが異なる箇所と分岐器末端の調整でしょうか。
9011f.jpg
上図は自線(赤)が転線する箇所ですが、自線と一緒に灰色の距離の線も傾いているのが分かります。
このため例えば黄線の75.160KPに点を打ちたい場合、自線(赤)上での75.159KPの灰色線との交点に打たなければなりません。

9011g.jpg
上図は分岐器末端の角度調整に挟んだ短い曲線の箇所です。上から2番目の○はBVEでは
9011h.jpg
このようになります。
実は結構な場所で小曲線を挟んで再現しているのですが、実際の線路を見てみると
9011i.jpg
実際も曲がっていて、こんな箇所は実は多いのです。
飯田保線区さんでも緩和曲線がデタラメだ、という記事がありましたが、
円曲線長は車体長以上という規則なんてどこ吹く風な例は幹線の上越線ですらありますので、
おそらくは日本中あちこちで見られることでしょう。

ちなみに高崎駅、ほかにもデタラメな所がありまして、
9011j.jpg
ECCもETCもR720も全て合ってないような曲線に見えるのですが、皆さんにはどう見えますか?
個人的には昔はこのとおりで線路があったんだろうな、と推測しています。

というのも過去の配線図を掲載している「懐かしい駅の風景~線路配線図とともに」さんに
1958年当時の図面があるのですが、このときは4番線の北側に上り列車が4番線に入るための渡り線がなかったことが読み取れます。
故に現在のこの渡り線は1958年以降に挿入されたもので、内外方分岐器の設置を避けたと考えると
曲線標はそのままに線形だけ変わった、とも考えられるわけです。

当時の写真とかも見当たりませんので真実は分かりませんが、こういったことを考えるのも楽しいものです。

↓できた配線図  Jw_cadデータはこちら→ takasaki.jww
9011n.gif

他線の曲線に緩和曲線のあるものもありますが、これに関しては次回に。
これも計算で出そうとすると大変ですが、CADだと簡単です。

9011m.jpg

9011k.jpg
                          ↓
9011l.jpg
こうして見ても印象が随分と違いますね

番号が飛びます(この前に他線がS字の場合の他線設定をやりたかったのですが、計算が複雑なので行き詰っています)。
緩和曲線は在来線では主に3次放物線緩和曲線が、新幹線ではサイン半波長逓減緩和曲線が使われていますが、
BVE5はサイン半波長逓減緩和曲線のみに対応しているので、在来線の曲線標の値を入れると線形が異なってしまいます。

以前の記事のコメント欄にも書きましたが、3次放物線緩和曲線とサイン半波長逓減緩和曲線は
円曲線の大部分と、円曲線に接続する直線の位置を変更せずに互いに付け替えることができます。

細かい計算式はデータを打ち込む時には要らないはずですので、ここでは省略します。
詳細が気になる方は『線路―軌道の設計・管理: 宮本俊光, 渡辺偕年』349~351頁をご覧ください。
この記事も該当箇所を参考に書いています。(少なくとも20都道府県での所蔵を確認しています)

該当箇所をまとめると円曲線と直線の位置関係が同じ場合、
サイン半波長逓減緩和曲線長は3次放物線緩和曲線長の1.326522倍の長さになり、位置関係は下図のようになります。
9010a.gif

ゼロから始めるBVE5(4)~曲線勾配の設定 1~ で出てきた曲線を例にして
3次放物線緩和曲線からサイン半波長逓減緩和曲線に変換すると以下のようになります。

距離  (曲線)       距離  (曲線)
90195 緩和曲線開始     90183 緩和曲線開始
90270 円曲線開始   →  90282 円曲線開始
90334 円曲線終了      90322 円曲線終了
90409 緩和曲線終了     90421 緩和曲線終了

これで円曲線と直線の位置関係をより実際の位置関係に近づけることができます。

なおサイン半波長逓減緩和曲線に変換せずに3次放物線緩和曲線の曲率半径を1m毎に設定するのも当然アリかと思います。
計算は複雑ですけど。

※CCL<20m、及び全緩和曲線(CCL=0)は在来線でもサイン半波長逓減緩和曲線で敷設してある模様です

他軌道の曲線補間機能の付いたBve trainsim 5.3がリリースされましたので、曲線補間機能を検証してみました。

(1)自線直進・他線分岐
追加された構文を見る限りでは緩和曲線には非対応なようなので、R=400の円曲線が分岐する場合で検証。
自線上での距離200mを隔てた他線2点のx座標は3.8及び57.34に設定。
 円曲線の式:(x-403.8)^2+z^2=R^2 (原点は自線上で他線の円曲線開始距離)
9009a.jpg
これはきれいですね。
停車場内など僅かな緩和曲線を無視しても大差ない箇所では使えそうです。

(2)自線分岐・他線直進
こちらも(1)同様に緩和曲線なしでR=400の円曲線で分岐する場合で検証。
自線上での距離200mを隔てた他線2点のx座標は3.8及び60.13に設定。
 60.13はL=Rθよりθを求め、計算した結果。radiusHは他線直線なので0に設定。
9009b.jpg
あらら......
線形補間されてしまいました。

それじゃあ......、と画像を見るとradiusHの値が400ならいけそうなので試行。
9009c.jpg
良くはなったけど、まだ曲がっているので微調整。
radiusH=380を入れてみると
9009d.jpg
S字になっってしまいました。
よって自線分岐・他線直進の条件では曲線補間機能は使えないようです。

一応実物のS字カーブを再現する場合を見てみます。

(3)自線S字曲線・他線直線
自線の緩和曲線部分の他線は手入力なので、円曲線の部分のみradiusH設定。
9009e.jpg
円曲線の距離が短いからなのか、特に問題はない模様。

(4)自線直線・他線S字曲線
9009f.jpg
詳細未計算。緩和曲線を考えなければ使えそう。


まとめ

曲線補間機能が使える場合は以下のとおり

(1)緩和曲線を考慮しない場合(緩和曲線は要手計算)
(2)自線が直線の場合
(3)自線が曲線の場合で.Position構文の間隔が短い場合


結局のところ円曲線前後の緩和曲線は計算しないとどうにもならないので、
円曲線区間の.Position構文が減らせるくらいの利点しかないのかなー、というのが率直な感想です。

****************************************

2013.12.4追記
radiusHの設定について、Caminoさんより分かりやすい計算法が解説されているので是非ご覧ください。

今回は自線が緩和曲線を含むS字曲線の場合の他線の敷き方です。
サンプルとなる場所は新前橋-群馬総社間の群馬総社変電所付近です。
この少し北側に橋梁があるため、複線間隔が広がっています。
9008a.jpg
9008b.gif

S字カーブ途中の直線区間に勾配変化点がありますが、変化後の10‰は1km以上続きます。
駅間で1km隔てた2点間の最急勾配を標準勾配と呼びますが、八木原-渋川間を除けば
水上まで標準勾配10‰が連続するので、山岳路線の序章とでも呼べるような場所です。

この設定はシリーズ6回目で計算表を作っておいてので線形自体の計算はしなくても済みます。
(今回の計算用に前回の計算表に修正を加えました)

S字カーブの1つ目のカーブから2つ目のカーブ手前までは
計算表にTCL1=35、TCL2=35、CCL=21、R=1600、BTC=85391の値を入れれば計算されます。

S字カーブの2つ目のカーブは水上方から考えれば考えやすくなります。
9008c.gif
点対称な線形なので当然ですが、高崎方から見る1つ目のカーブと
水上方から見る2つ目のカーブは全く同じ線形であることが分かります。
違うのは青線(上り線)の位置。高崎方から見ると右に3.8mですが、
水上方から見ると左に位置しています。

この「左にどれだけ?」が分かれば良いので、以下のように計算します。
高崎方から見た1つ目のカーブのBTCからx[m]のd[m]は計算表から容易に求められます。
この値が水上方から見た1つ目のカーブの「ETC」から(L-x)[m]のd[m]と
なるような値を求めれば、それが「左にどれだけ?」の値となります。
数字入れて計算結果を見る、でもできますが、ソルバーを使ったほうが早いでしょう。

というわけでこうして求めた軌道間隔を設定した構文と仕上がり具合です。


85200;Gradient.BeginConst(0);//仮設
85220;Gradient.BeginConst(6.7);//仮設

85300;Track[1].Position(3.8, 0);
Repeater[Rail-01].Begin0(1, 3, 5, 5, Rail-100);

85391;Curve.BeginTransition();
85395;Track[1].Position(3.8, 0);
85400;Track[1].Position(3.8007, 0);
85405;Track[1].Position(3.8038, 0);
85410;Track[1].Position(3.8124, 0);
85415;Track[1].Position(3.8299, 0);
85420;Track[1].Position(3.8594, 0);
85425;Track[1].Position(3.9034, 0);
85426;Curve.BeginCircular(-1600, -0.025);
85430;Track[1].Position(3.9630, 0);
85435;Track[1].Position(4.0382, 0);
85440;Track[1].Position(4.1290, 0);
85445;Track[1].Position(4.2356, 0);
85447;Curve.BeginTransition();
85450;Track[1].Position(4.3578, 0);
85455;Track[1].Position(4.4953, 0);
85460;Track[1].Position(4.6463, 0);
85465;Track[1].Position(4.8082, 0);
85470;Track[1].Position(4.9774, 0);
85475;Track[1].Position(5.1507, 0);
85480;Track[1].Position(5.3256, 0);
85482;Curve.End();
85485;Track[1].Position(5.5006, 0);
//ここから一定の割合で軌道間隔広がる

85500;Gradient.BeginTransition();
85505;//勾配標+6.7→+10.0
85510;Gradient.BeginConst(10.0);
Track[1].Position(6.3756, 0);
85511;Curve.BeginTransition();
85515;Track[1].Position(6.5507, 0);
85520;Track[1].Position(6.7250, 0);
85525;Track[1].Position(6.8968, 0);
85530;Track[1].Position(7.0629, 0);
85535;Track[1].Position(7.2200, 0);
85540;Track[1].Position(7.3650, 0);
85545;Track[1].Position(7.4956, 0);
85546;Curve.BeginCircular(1600, 0.015);
85550;Track[1].Position(7.6107, 0);
85555;Track[1].Position(7.7102, 0);
85560;Track[1].Position(7.7942, 0);
85565;Track[1].Position(7.8626, 0);
85567;Curve.BeginTransition();
85570;Track[1].Position(7.9155, 0);
85575;Track[1].Position(7.9532, 0);
85580;Track[1].Position(7.9774, 0);
85585;Track[1].Position(7.9909, 0);
85590;Track[1].Position(7.9969, 0);
85595;Track[1].Position(7.9987, 0);
85600;Track[1].Position(7.9990, 0);
85602;Curve.End();
85605;Track[1].Position(7.9990, 0);
85800;Track[1].Position(7.9990, 0);
Repeater[Rail-01].End();//仮設

85820;Gradient.BeginConst(10.0);//仮設
85840;Gradient.BeginConst(0);//仮設

9008d.jpg
美しいですね~

次回は今回と逆で他線にS字ある場合を考えます。



8回までのマップファイル全文です。

9773M-map.txt
 →9773M-map(8).txt

structures.txt

bvets structure list 0.02
Rail-100,structures\ballast-5.x

stations.txt

bvets station list 1.01
sta701,高  崎,,,,,0,,0,,,0,0
sta702,高崎問屋,,,,,0,,0,,,0,0
sta703,井  野,,,,,0,,0,,,0,0
sta704,新 前 橋,,,,,0,,0,,,0,0
sta705,群馬総社,,,,,0,,0,,,0,0
sta706,八 木 原,,,,,0,,0,,,0,0
sta707,渋  川,,,,,0,,0,,,0,0

ファイル構成
9003b.gif

今回は他線の敷き方です。
サンプルとなる場所は高崎駅構内のココ。
9007a.jpg
上越線をお楽しみ頂いている皆様にはおなじみの場所かと思います。
右端の新幹線を除けば5本の線路が並んでいます。

まずは手始めに上越上り線を敷いてみたいのですが、その前に縦断面図を見てみましょう。
9007c.gif
図より信越上り線と他線の勾配変化点が同じではないこと、信越上り線が
一定勾配のところ、途中の75548m地点で他線は勾配が変化していることがわかります。

自線の勾配設定はこのシリーズの4回目でやりましたので、先に設定します。

75000;Gradient.BeginConst(0);//仮設
75010;Gradient.BeginConst( 1.8);//仮設

75387;Gradient.BeginTransition();
75389;//勾配標+1.8→+3.0;
75391;Gradient.BeginConst( 3.0);

75545;Gradient.BeginTransition();
75548;//勾配標+3.0→+4.5;
75551;Gradient.BeginConst(4.5);


続いて上越上り線を設定してみます。新たな構文が出てきます。

75335;Track[1].Position( 3.8000, 0.0000);
Repeater[Rail-01].Begin0(1, 3, 5, 5, Rail-100);//距離は仮設
75530;Track[1].Position( 3.8000, 0.0000);
Repeater[Rail-01].End();//距離は仮設

BVE4までのRail構文は線路の位置とストラクチャを一緒に決めていましたが、
BVE5では両者が分離され、別の構文でそれぞれを設定しています。

構文の説明です。
・Track[1].Position( 3.8000, 0.0000);
旧Rail構文のストラクチャ番号を抜いた.Rail 1; 3.8000; 0.0000部分と同意です。
つまり3.80000の個所が自線から見たx座標、0.0000の個所が自線から見たy座標です。
小数点以下4桁を書いていますが、単に見栄えの問題からですので、
( 3.8, 0)で問題ありません。単位はいずれも[m]です。
[ ]内の文字列が軌道名となりますが、数字に限らずひらがな等でも大丈夫みたいです。

・Repeater[Rail-01].Begin0(1, 3, 5, 5, Rail-100);
シリーズ最初の回でも出てきた構文ですが、
同じストラクチャを繰り返し配置する場合に使います。
ただし設置する線路に対してストラクチャを平行移動や回転しない場合に限ります
 [Rail-01]:繰り返しを定義する名前 名前がダブらないように注意
      (Track[1]に対してのレールストラクチャの繰り返し、の意味で定義)
 1つ目の1:ストラクチャを繰り返す軌道の定義名(Track[1]の[ ]内の文字)
 2つ目の1:ストラクチャの傾斜設定で、0~3の値を入れられます。
      0は常に垂直(用途例:架線柱)
      1は勾配に連動して前後方向に傾斜(用途例:架線)
      2はカントに連動して左右方向に傾斜(用途例:何かありました......?)
      3は勾配・カントの両方に連動して前後左右に傾斜(用途例:軌道)
 1つ目の5:5m先の地点に弦の一端を置き、その弦上にストラクチャを配置
 2つ目の5:5mごとに繰り返してストラクチャを配置
 Rail-100:繰り返すストラクチャの定義名

これで上越上り線の設定は終わりです。信越下り線や北部入換線も同様に設定できます。


次に自線と勾配が異なる他線の設定です。
まずは簡単な自線:一定勾配、他線:一定勾配の場合を見てみましょう。

75450;Track[3].Position(13.2000, 0.4995);
75545;Track[3].Position(13.2000, 2.1145);

前後が縦曲線ではさまれている区間だけを抜粋してみました。
当然ながらストラクチャの設定をする必要がありますが、
これは縦曲線が始まるより手前で行うことなので、この場所ではしません。

両構文間の距離は95m、高低差は1.615mありますが、両線の勾配は共に一定なので
上越線からみた信越上り線の勾配も一定になります。
このように他線の高さや距離が直線的に変化する場合は
両端にTrack[trackKey].Position(x, y)構文を置くだけですみます。
逆に言えば(x, y)が異なる2点間は高さや距離が直線的に変化するので、
高さや距離が曲線的に変化する縦曲線や分岐器等では設定に注意が必要です

というわけで、注意が必要な縦曲線区間を見てみましょう。
9007d.gif
上の図で信越上り線の高さは(2)-(1)で表せます。

BVE5側での縦曲線区間の計算法は、縦曲線開始点をBVC、縦曲線長をVCL、
縦曲線手前側の勾配をP1、向こう側の勾配をP2とすれば
BVCからx[m]地点での勾配はP=P1+x/VCL*(P2-P1)で求められるようです。
この勾配Pでは1mの間に高さはP[mm]変化するので、(1)、(2)共に容易に求められます。

この計算を5mごとにした結果、この区間は以下の構文で表すことができます。

75000;Gradient.BeginConst(0);//仮設
75010;Gradient.BeginConst( 1.8);//仮設

75335;Track[1].Position( 3.8000, 0.0000);
Repeater[Rail-01].Begin0(1, 3, 5, 5, Rail-100);
Track[3].Position(13.2000, 0.0000);
Repeater[Rail-03].Begin0(3, 3, 5, 5, Rail-100);
75385;Track[3].Position(13.2000, 0.0000);
75387;Gradient.BeginTransition();
75390;Track[3].Position(13.2000,-0.0018);
75391;Gradient.BeginConst( 3.0);
75395;Track[3].Position(13.2000,-0.0046);
75400;Track[3].Position(13.2000, 0.0008);
75405;Track[3].Position(13.2000, 0.0143);
75410;Track[3].Position(13.2000, 0.0360);
75415;Track[3].Position(13.2000, 0.0657);
75420;Track[3].Position(13.2000, 0.1036);
75425;Track[3].Position(13.2000, 0.1496);
75430;Track[3].Position(13.2000, 0.2037);
75435;Track[3].Position(13.2000, 0.2660);
75440;Track[3].Position(13.2000, 0.3363);
75445;Track[3].Position(13.2000, 0.4148);
75447;//縦曲線終了
75450;Track[3].Position(13.2000, 0.4995);

75545;Gradient.BeginTransition();
Track[3].Position(13.2000, 2.1145);
75550;Track[3].Position(13.2000, 2.1958);
75551;Gradient.BeginConst(4.5);
75555;Track[3].Position(13.2000, 2.2733);

75630;Track[1].Position( 3.8000, 0.0000);
Repeater[Rail-01].End();
Track[3].Position(13.2000, 3.4357);
Repeater[Rail-03].End();

9007e.jpg
綺麗に設定できました。


縦曲線は緩和曲線に比べれば計算は簡単ですが、
やはり面倒だろうと思いますので、緩和曲線に続き計算ファイルを作りました。
◆ 計算ファイルDL ◆ (Ver.0.2 2012.7.29)
(上の計算もこれで行っています)

簡単に使い方ですが、縦曲線計算表、というワークシートを開きます。
数字を入れるのは下図赤枠の箇所です。
勾配1は縦曲線の手前側の勾配、勾配2は縦曲線の向こう側の勾配で、
円曲線半径は直線ならば0を入れて下さい。
計算された高さはHeightの列に出ます。
9007b.gif
検証が不十分ですので、不都合ありましたらお知らせ下さい。

次回は自線:緩和曲線を含むS字曲線、他線:直線の場合を考えたいと思います。



7回までのマップファイル全文です。

9773M-map.txt

bvets map 1.00
Structure.Load(structures.txt);
Station.Load(stations.txt);

0;Gauge.Set(1.067);
Repeater[Rail0].Begin0(0, 3, 5, 5, Rail-100);


74740;Station[sta701].Put(-1, -5, 5);
77460;Station[sta702].Put(-1, -5, 5);
78720;Station[sta703].Put(-1, -5, 5);
82100;Station[sta704].Put(1, -5, 5);
86950;Station[sta705].Put(1, -5, 5);
92470;Station[sta706].Put(-1, -5, 5);
95910;Station[sta707].Put(-1, -5, 5);


75000;Gradient.BeginConst(0);//仮設
75010;Gradient.BeginConst( 1.8);//仮設

75335;Track[1].Position( 3.8000, 0.0000);
Repeater[Rail-01].Begin0(1, 3, 5, 5, Rail-100);
Track[3].Position(13.2000, 0.0000);
Repeater[Rail-03].Begin0(3, 3, 5, 5, Rail-100);
75385;Track[3].Position(13.2000, 0.0000);
75387;Gradient.BeginTransition();
75390;Track[3].Position(13.2000,-0.0018);
75391;Gradient.BeginConst( 3.0);
75395;Track[3].Position(13.2000,-0.0046);
75400;Track[3].Position(13.2000, 0.0008);
75405;Track[3].Position(13.2000, 0.0143);
75410;Track[3].Position(13.2000, 0.0360);
75415;Track[3].Position(13.2000, 0.0657);
75420;Track[3].Position(13.2000, 0.1036);
75425;Track[3].Position(13.2000, 0.1496);
75430;Track[3].Position(13.2000, 0.2037);
75435;Track[3].Position(13.2000, 0.2660);
75440;Track[3].Position(13.2000, 0.3363);
75445;Track[3].Position(13.2000, 0.4148);
75447;//縦曲線終了
75450;Track[3].Position(13.2000, 0.4995);

75545;Gradient.BeginTransition();
Track[3].Position(13.2000, 2.1145);
75550;Track[3].Position(13.2000, 2.1958);
75551;Gradient.BeginConst(4.5);
75555;Track[3].Position(13.2000, 2.2733);

75630;Track[1].Position( 3.8000, 0.0000);
Repeater[Rail-01].End();
Track[3].Position(13.2000, 3.4357);
Repeater[Rail-03].End();


89809;Curve.BeginTransition();
89858;Curve.BeginCircular(-600, -0.070);
90092;Curve.BeginTransition();
90167;Curve.End();

90195;Curve.BeginTransition();
90270;Curve.BeginCircular(600, 0.070);
90334;Curve.BeginTransition();
90409;Curve.End();

89700;Gradient.BeginTransition();//仮設
89710;Gradient.BeginConst(10);//仮設

89792;Gradient.BeginTransition();
89801;//勾配標+10.0→+4.5;
89809;Gradient.BeginConst(4.5);

90066;Gradient.BeginTransition();
90081;//勾配標+4.5→-3.0;
90096;Gradient.BeginConst(-3.0);

90495;Gradient.BeginTransition();
90515;//勾配標-3.0→+10.0;
90534;Gradient.BeginConst(+10);

structures.txt

bvets structure list 0.02
Rail-100,structures\ballast-5.x

stations.txt

bvets station list 1.01
sta701,高  崎,,,,,0,,0,,,0,0
sta702,高崎問屋,,,,,0,,0,,,0,0
sta703,井  野,,,,,0,,0,,,0,0
sta704,新 前 橋,,,,,0,,0,,,0,0
sta705,群馬総社,,,,,0,,0,,,0,0
sta706,八 木 原,,,,,0,,0,,,0,0
sta707,渋  川,,,,,0,,0,,,0,0

ファイル構成
9003b.gif

カテゴリ

  • 公開•更新
  • 製作中
  • 取材
  • 雑記
  • BVE5 (14)

アーカイブ

Twitter

連絡先

  • E-mail

    • 迷惑メール振分け防止のため、件名に「BVE」を入れてください

最近のコメント