tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: Spline Chart で補完部分の値を得たい【自己解決】
投稿日: 2019/08/16(Fri) 09:53
投稿者食器

hhttps://t-pot.com/program/2_3rdcurve/index.html

こちらのサイトを参考にして
Catmull-Romスプライン曲線を描写したところ、
VBでのSplineChartと一致しました。(目視の範囲でですが)

ただし端の扱いは上記のサイトと異なっていました。


        'Chartのsetは省略

        '宣言
        Dim t As Double = 0
        Dim x, y As Double
        Dim x0, x1, x2, x3 As Double
        Dim y0, y1, y2, y3 As Double

    '任意の4点の場合
        x0 = 2 : y0 = 6
        x1 = 7 : y1 = 11
        x2 = 11 : y2 = 7
        x3 = 15 : y3 = 13

        '中
        Do
            x = (-0.5 * x0 + 1.5 * x1 - 1.5 * x2 + 0.5 * x3) * (t ^ 3) + (x0 - 2.5 * x1 + 2 * x2 - 0.5 * x3) * (t ^ 2) + (-0.5 * x0 + 0.5 * x2) * t + x1
            y = (-0.5 * y0 + 1.5 * y1 - 1.5 * y2 + 0.5 * y3) * (t ^ 3) + (y0 - 2.5 * y1 + 2 * y2 - 0.5 * y3) * (t ^ 2) + (-0.5 * y0 + 0.5 * y2) * t + y1
            Chart1.Series("DotSpline").Points.AddXY(x, y)
            t = t + 0.01
        Loop Until t > 1

        t = 0

        '始端
        Do
            x = (-0.5 * x0 + 1.5 * x0 - 1.5 * x1 + 0.5 * x2) * (t ^ 3) + (x0 - 2.5 * x0 + 2 * x1 - 0.5 * x2) * (t ^ 2) + (-0.5 * x0 + 0.5 * x1) * t + x0
            y = (-0.5 * y0 + 1.5 * y0 - 1.5 * y1 + 0.5 * y2) * (t ^ 3) + (y0 - 2.5 * y0 + 2 * y1 - 0.5 * y2) * (t ^ 2) + (-0.5 * y0 + 0.5 * y1) * t + y0
            Chart1.Series("DotSpline").Points.AddXY(x, y)
            t = t + 0.01
        Loop Until t > 1

        t = 0

        '終端
        Do
            x = (-0.5 * x1 + 1.5 * x2 - 1.5 * x3 + 0.5 * x3) * (t ^ 3) + (x1 - 2.5 * x2 + 2 * x3 - 0.5 * x3) * (t ^ 2) + (-0.5 * x1 + 0.5 * x3) * t + x2
            y = (-0.5 * y1 + 1.5 * y2 - 1.5 * y3 + 0.5 * y3) * (t ^ 3) + (y1 - 2.5 * y2 + 2 * y3 - 0.5 * y3) * (t ^ 2) + (-0.5 * y1 + 0.5 * y3) * t + y2
            Chart1.Series("DotSpline").Points.AddXY(x, y)
            t = t + 0.01
        Loop Until t > 1



要するに端の扱いは、
係数は中の部分と同じで、点がない部分はその近くの点の値を使用する
というものでした。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。