您需要找到产生所需 x 值的“t”(张力参数)值。如果您使用 0 到 1 的范围,则参数“t”值将接近 0.5。一旦知道 t,就可以计算 y 的对应值。求解一个三次方程,该方程将为“t”生成 3 个值,这将导致相同的 x 值。检查下面的链接。
http://algorithmist.wordpress.com/2009/09/28/cardinal-splines-part-2/
基数样条基于从前一点到后一点的向量指定内部点的切线。每个切线都平行于这个向量,并且是它长度的某个倍数。例如,点 P1 的切线方向平行于向量 P2 – P0,或者我们可以简单地写成 T1 = s(P2 – P0),其中 s 是实数。
检查下面的这部分代码,其中 xtarget 是输入值 x。
代码:
for (Double t = 0; t<=1; t += 0.01)
{
s = (1 - t) / 2;
P(t)x = s(-t3 + 2t2 – t)P1X + s(-t3 + t2)P2X + (2t3 – 3t2 + 1)P2X + s(t3 – 2t2 + t)P3X + (-2t3 + 3t2)P3X + s(t3 – t2)P4X
P(t)y = s(-t3 + 2t2 – t)P1Y + s(-t3 + t2)P2Y + (2t3 – 3t2 + 1)P2Y + s(t3 – 2t2 + t)P3Y+ (-2t3 + 3t2)P3Y + s(t3 – t2)P4Y
if(P(t)x=>xtarget)
{
return P(t)y;
}
}
上述方法将给出曲线上的近似点 P(t)y。