C#
Unity
線路
路線

ファーガソン曲線に沿って列車が走る

ファーガンソン曲線に沿って列車が走る

train.gif

これは、Unity1DayChangeJamで作ったものを3Dにしたものです。

Unity1DayChangeJamはTwitter上で行われたイベント的なものです。
https://twitter.com/PonixNews/status/1006100406437437441

僕はこの2日目を担当しました。列車っぽいものを作りました。
https://twitter.com/Romast38/status/1009750209130184704

ファーガソン曲線というCGで時々使われる自由曲線を使って路線を生成しています。
マーカー(赤い円柱)を適当な順番で配置すると、その間を補完してくれます。

ファーガソン曲線に必要な引数は、曲線の始点と端点それぞれの位置ベクトルと速度ベクトルです。
2つのファーガンソン曲線を接続するときは、速度ベクトルをいい感じにそろえるときれいに(連続的に)接続されます。

    // ファーガソン曲線
    // 2つの位置ベクトルと、2つ速度ベクトル、パラーメタ0<t<1を引数に指定すると、2つの位置ベクトルを補完する曲線上の点を返す。
    Vector3 Ferguson(Vector3 p0, Vector3 p1, Vector3 v0, Vector3 v1, float t)
    {
        float a = (1 - t);
        float aa = a * a;
        float tt = t * t;

        // エルミート関数の計算
        float h0 = (2 * t + 1) * aa;
        float h1 = t * aa;
        float h2 = -tt * a;
        float h3 = tt * (3 - 2 * t);

        return p0 * h0 + v0 * h1 + v1 * h2 + p1 * h3;
    }

githubに置いUnityプロジェクトデータ。
https://github.com/Romast38/unity1day_RomaTrain