として私は線形補間について十分に理解していますが、スプライン数学の複雑さを把握することは困難でした。そのため、難しい数学を隠すための抽象化を提供するライブラリを探していました。次の機能は、私のニーズに十分であることが判明しました。これはhttp://www.mvps.org/directx/articles/catmull/の式に基づいていますが、うまくいけばそれがどのように動作するのかを理解する必要はありません。 Catmull-Romスプライン補間は、どちらかの端に余分な点を使用します。したがって、10点を通過するスプラインが必要な場合は、12が必要です。
この関数は、Catmull-Romスプライン補間を1次元で実演します。 (2次元または3次元の場合は、YまたはZ値を使用して単純に繰り返します。)この関数は、p1とp2の間のスプライン上の点を与えます。ここで、tは2つの間の距離の割合です。
public class SplineTest {
// Catmull-Rom spline interpolation function
public static double q(double t, double p0, double p1, double p2, double p3) {
return 0.5 * ((2 * p1) + (-p0 + p2) * t
+ (2 * p0 - 5 * p1 + 4 * p2 - p3) * (t * t) + (-p0 + 3 * p1 - 3
* p2 + p3)
* (t * t * t));
}
public static void main(String[] args) {
double t = 0.0;
while (t <= 1.0) {
System.out.println(q(t, 5, 10, 20, 10));
t += 0.1;
}
}
}
このプログラムの出力は:
10.0
10.887500000000001
12.0
13.2625
14.6
15.9375
17.2
18.3125
19.2
19.7875
20.000000000000004
物事は変化しています。 – Martin