BVE 緩和曲線の正体を探る
BVE5では緩和曲線が使えますが、他軌道で使う場合や、自軌道が緩和曲線で曲がる際に他軌道を直線や任意の曲線にしたいことがしばしばあります。そこで緩和曲線の正体がなんなのかを理解し、使いこなせるようになりたいのです。
緩和曲線とは
緩和曲線はカントのある曲線に差し掛かるとき、いきなりカントが変化すると乗り心地が悪く大変なことになってしまうので、曲線の前後でカントと曲線半径を徐々に変化させて乗り心地をよくしてくれる曲線です。
カントを徐々に変化させますが、カントの値によって最適な曲線半径が変わってくるので曲線半径も徐々に変化していきます。この「曲線半径が徐々に変化する」ということが非常に厄介なのです。
サイン半波長逓減
サイン半波長というとサインカーブの波長の半分、こんな感じでしょう。
この割合で曲率が変化していると仮定して話を進めていきます。すると半径を求める式は が緩和曲線開始地点からの距離、 が曲線の半径(今回は500)、 は緩和曲線長とすると以下のようになるはずです。
これはグラフにすると から下がってきて のとき になるような曲線が描かれます。
直線逓減
直線は言うまでもありませんね。先程と同じように半径を求める式を立てると
とでもなるのでしょうか。これも から下がってきて のとき になるような反比例の曲線です。
BVEの緩和曲線
BVE5ではMapに Curve.BeginTransition();
という構文があります。
これは「ここから緩和曲線を開始します」という意味を持ちます。Curve.Begin()
や Curve.End()
が来ると緩和曲線は終了します。
では実際の動作を見てみましょう。Mapは以下のようになっています。
50; Curve.BeginTransition(); 100; Curve.Begin(500);
※説明用にストラクチャを配置しています。また、カントはありません。
この白い板に挟まれた部分が緩和曲線です。曲線半径が一定ではないことがお分かりいただけると思います。
ここからは「曲率」を使っていきます。 曲率 = 1/半径
です。要は半径の逆数です。
さて、BVE公式を見ると Curve.SetFunction()
という構文もあるようです。これには0か1を渡すようですが、0ならサイン半波長逓減、1だと直線逓減になるようです。直線逓減の方も見てみましょう。
なんか違う気がする。程度の差ですね。GIFにしてみましょう。
まあ違うことは違うのでそれぞれ見ていきましょう。
曲線半径から緩和曲線を作り出す
こうして曲率・曲線半径が出たわけですが当方中学生、本当は三角関数もまだ習っていないのでここから微分やら積分やらして座標を求める気もありません。スクリプト書いてゴリ押しします。
サイン半波長逓減
計算した半径の扇形を、弧がつながるように重ねて緩和曲線を円曲線の集合体とみなします。
まずは曲線半径を0.5mから1mごとに求めていきます。 この1mというのは適当に決めた「小さい数字」です。もっと小さくすれば精度も上がります。0.5mは1mの半分です。
Node.jsを適当に書いて以下の表が得られました。
2026590.348 |
225324.927 |
81223.819 |
41522.656 |
25184.911 |
16914.97 |
12158.739 |
9174.861 |
7180.917 |
5783.04 |
4765.422 |
4001.778 |
3414.214 |
2952.569 |
2583.359 |
2283.54 |
2036.832 |
1831.47 |
1658.782 |
1512.26 |
1386.945 |
1279.007 |
1185.444 |
1103.885 |
1032.429 |
969.546 |
913.986 |
864.727 |
820.922 |
781.866 |
746.972 |
715.744 |
687.762 |
662.672 |
640.171 |
619.999 |
601.934 |
585.786 |
571.392 |
558.611 |
547.321 |
537.42 |
528.819 |
521.443 |
515.23 |
510.128 |
506.094 |
503.097 |
501.112 |
500.123 |
500.123 |
さて、この半径の円弧を重ねて座標を計算します。幅0.1mの帯を緩和曲線の形に合うストラクチャを緩和曲線の開始位置に設置します。
ストラクチャを生成するスクリプトはこのようになりました。
"use strict"; //ファイル書き込みのためfsモジュールをロード const fs = require("fs"); const step = 1; //緩和曲線を細かく分けるときの単位 const radius = 500, //円曲線半径 length = 50; //緩和曲線長 const width = 0.1; //出力するストラクチャの帯の幅 let angle = 0, //線路の向いている角度 まっすぐ前方が0 cx, cz, //緩和曲線を細かく分けた扇の中心 br = Infinity; //前の扇の半径 const points = [[[0, 0], [0, 0]]]; //出力する座標 for(let d = 0; d < length; d += step){ //曲率 const curvature = (Math.sin(((d + 0.5) / length - 0.5) * Math.PI) + 1) / (2 * radius); //現在の半径 const cr = 1 / curvature; if(!cx){ //中心座標の初期値 cx = cr; cz = 0; }else{ //前の半径との差 const dr = br - cr; //中心座標 cx -= Math.cos(angle) * dr; cz += Math.sin(angle) * dr; } //軌道座標 points.push([ [ cx - Math.cos(angle) * (cr + width / 2), //左X cz + Math.sin(angle) * (cr + width / 2) //左Z ], [ cx - Math.cos(angle) * (cr - width / 2), //右X cz + Math.sin(angle) * (cr - width / 2) //右Z ] ]); br = cr; angle += curvature * step; } //CSVストラクチャを出力 let csv = "CreateMeshBuilder\n"; points.forEach(p => csv += `AddVertex,${p[0][0]},0,${p[0][1]}\n`+ `AddVertex,${p[1][0]},0,${p[1][1]}\n`); for(let i = 0, len = points.length - 1; i < len; i++){ csv += "AddFace," + [0, 2, 3, 1].map(n => i * 2 + n).join(",") + "\n"; } csv += "GenerateNormals\nSetColor,255,255,255"; fs.writeFile("Structures/TransitionCurve.csv", csv);
さて、これで得られたCSVストラクチャをX形式に変換してBVEに読み込ませてみます。緩和曲線の開始地点にこのストラクチャを置くと…
いい感じですね。ピッタリです。(直線逓減モードのままストラクチャ置いて「ずれてるー!」ってなったのは内緒)
直線逓減
先程のスクリプトの曲率を求める21行目を
const curvature = (d + 0.5) / (radius * length);
として同様にストラクチャにすればOKです。こちらも問題なくできました。
まとめ
緩和曲線は難しい。
両国駅のB.B.BASE展示会に行ってきました
本日12/09に両国駅の3番線で行われたB.B.BASEの展示会に行ってきました。
今年2月に南武線から引退したナハ53編成を改造して2018年にデビューするJR東日本ではおそらく初のサイクルトレイン専用列車です。
BBBASE見てきた pic.twitter.com/GaXS1hgGsT
— ていにし (@TR_246) 2017年12月9日
まずは両国駅西口側の両国ステーションギャラリーへ行き、私が行ったときは列に10分程度並んで3番線へ入りました。
少し前へ進みます。
すごく人が多いです。中には黄色い線を出る人もいてなかなか大変でした。
前面帯の右側には「B.B.BASE」のロゴがあります。行先表示器にはすべてオレンジでロゴが表示されていました。
一方、側面の方は右側の文字が緑でした。この違いは一体どこから…
とりあえず再現してきました。前面と側面それぞれ。
この画像は自由に使って結構ですが使用は自己責任で。
では先に進みましょう。
側面には自転車の絵がででーん! ドア枠や窓枠などのあたりはステンレスですがそれ以外は白地ですね。
そういえばYouTubeにあるJRの公式動画ではステンレス地だったような…
ありましたありました。0:45のあたりですね。ヘアライン風に描いてあるのでこの動画を作成した段階ではまだステンレス地の予定だったんでしょうか。
まあ細かい所にウダウダ言っても仕方ないですね。先へ進みます。
車番は変わってないみたいですね。クハ208-2202は南武線時代は立川側で6号車でした。
車端部には号車番号がデデーン!
ん?この「1」は… まさかメイリオ?
ちょっとサクッと作ってきました。
…
やっぱりメイリオでは? もうちょっといいフォント使ってほしかったなぁ~ Frutigerとかだったらもっとかっこよかったと思うのに…
これでメイリオじゃなかったらすごく恥ずかしい…
まあこれも余計なお世話ですね。さっさと次へ行きましょう。
車内は2-1のクロスシートですね。枕は可動式でした。これが209系だとは信じられませんね。
これは209系ですね。広告スペースにはロゴと座席配置と号車番号が書いてあります。LED表示機は使うことがあるのでしょうか。
座席はこうなってます。結構座り心地はいいですよ。あの209系とは思えない…
窓際にはコンセントもあります。最近の特急車両などには標準装備ですね。B.B.BASEは快速扱いらしいですが。
ドリンクホルダー(?)もありますね。うっすらと。この程度のくぼみだと気休め程度にしかならなさそうです。実際置いてないのでわかりませんが。
そんな中でちょっと気になったのがドア。これは他の209系やE231系とはまた違う質感ですね。梨地仕上げとでも言うのでしょうか。詳しくないので知りませんが。
床はなにやら工事現場のような凸凹がありますね。配布されていたチラシには「ビンディングシューズでも滑りにくい床」とありました。ビンディングシューズってなんですか?
そんなこんなでフリースペースの4号車につきました。
洗面台です。至ってシンプルな構成ですね。真ん中が水、左が石鹸、右が温風のようです。上には鏡があります。ちなみに2つありました。
フリースペースは片側がロングシート、もう片方が金属パイプのイス(?)です。房総の路線上海側山側って言い方ができない… 両国駅での北側がロングシートでした。ちなみにこの4号車、もともと4ドアだったのを1ドアに魔改造してます。マジやばくね?
もともとドアだった部分1箇所は洗面台、2箇所はモニターを設置してあります。トイレは2号車と4号車にあります。
車端部はこうなってます。両国駅での北側が座席、反対側がゴミ箱でした。
下車しました。5, 6号車は行かせてくれないみたいです。まあ2~4号車まで見れたので満足です。しかし見てください。この4号車の魔改造っぷり。マジやばくね?
なんか車体の模様と実物の自転車を並べてありました。うーんシュール…
2号車の号車番号と1号車の先頭部をあらためて。なかなかすごいデザインですね。
では3番線を出て2番線へ。実は3番線出るときにアンケートに回答してクリアファイルもらいました。
この構図、5月にサイクルトレインやったときも撮りましたね。朝だったので思いっきり逆光ですが。
では4号車の魔改造っぷりを逆側からどうぞ。ドアや窓も潰して検測車みたいになってますね。カウンターのところは窓も潰してあるみたいです。
では最後に南武線時代との比較をTwitterに上げましたのでどうぞ。
ナハ53 → B.B.BASE pic.twitter.com/iSt2fQ6mp7
— ていにし (@TR_246) 2017年12月9日
— ていにし (@TR_246) 2017年12月9日
さらに続き pic.twitter.com/jO6sjRnxws
— ていにし (@TR_246) 2017年12月9日
BVE架空路線制作①
そろそろ記事を書かないとブログを開設した意味がないのでちょっとだけ。
設定
- 路線名: 未公開
- 総営業キロ: 25.99km
- 駅数: 20駅
配線略図
始発駅を作る
この駅が路線の起点となります。一応上から順に1, 2, 3, 4番線という扱いにしています。また、複々線区間は外側が緩行線、内側が急行線ということにしています。
配線する
この配線略図を配線図(略してない)にしなくてはなりません。そこで、配線略図には書いていない情報が必要です。この場合必要なのは以下の通りです。
- 走るルート: 1番線から下り緩行線
- 複線間隔: 軌道中心から軌道中心まで3.8m
- ホーム幅: 軌道中心から軌道中心まで12m
- 分岐器: すべて12番
- 分岐器同士の間隔: 5m
だいたいこんなところでしょう。では早速配線図を書いていきましょう。
分岐器番数から半径と曲線長を求めることもできます。鉄道片開き分岐器計算
配線図を描くには「Jw_cad」という平面CADソフトを使うやり方もあるようですが、僕はそんな高度なものを使える能力はないので、他のやり方で配線図を書きます。そのためにDesmosを使います。これはざっくりいうとウェブブラウザ上で数式を入力し、グラフを表示してくれるサービスです。便利です。
これの細かい使い方は一旦置いておいて、これで作った配線図を見てください。
きれいですね。ここに曲線の直径となる直線などを足していきます。そして、交点の座標を自動で計算してくれるこれまた便利な機能があるので、ここででた座標を三平方の定理にぶち込んで距離を出したりして、最終的にMapファイルに入力した結果が以下のようになります。
ストラクチャは「Nagoya_Common」を使っています。
拡大してみると少しズレやゆがみがあるのですが許容範囲内ということで…
ストラクチャ設置
Nagoya_Commonの豊富なストラクチャを使って、ホームなどを設置していきます。
イイ感じですね。とりあえず始発駅はこんなものでよいでしょう。
この記事が実質初めての記事になります。かなり駆け足な感じでしたが、これからもBVE制作をしていきますのでよろしくお願いいたします。
ブログをはじめました
TR246というものです。ブログを始めようかと思いました。あまり人に見せることをガチガチに意識せず、自分用に書き残していこうと思います。BVEや鉄道などの話題で記事を書いていきます。Twitterではブログより頻繁にさまざまな話題を取り上げていきます。Youtubeでは鉄道の動画などを低頻度でアップしていきます。趣味にはプログラミングもありますが、基本的にその話題はQiitaに書いていきます。更新は気まぐれです。
TwitterとYoutubeとQiitaをやっています。 twitter.com www.youtube.com qiita.com