タイトル : 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 要するに端の扱いは、 係数は中の部分と同じで、点がない部分はその近くの点の値を使用する というものでした。 |