💭

C# 8 で ベジェ線の計算

2022/10/18に公開

Qiitaより転載
2019/12/11 初投稿


2つ以上の点からベジェ線を計算するコード。

    public static class Bezier
    {
        public static Vector3 Get(float t, params Vector3[] points)
            => Get(t, points.AsSpan());

        public static Vector3 Get(float t, ReadOnlySpan<Vector3> points)
            => (points.Length, t) switch
            {
                _ when t < 0 || t > 1 => throw new Exception(""),
                var (i, _) when i < 2 => throw new Exception("Points must be >= 2"),

                var (i, _) when i == 2 => points[0] + t * (points[1] - points[0]),
                var (i, _) => Get(t, points.Slice(0, i - 1)) 
                              + t * (Get(t, points.Slice(1, i - 1)) - Get(t, points.Slice(0, i - 1))),
            };
    }

だいぶ関数型っぽいコードになってきた気がする。

Discussion