该矩阵只是编码为矩阵的方程组,因此可以通过逆矩阵轻松计算。
例如矩阵的第二行(8,4,2,1,0,0,0,0)
矩阵乘法之后的意思是:
a3.2^3+a2.1^2+a1.2^1+a0=5
这是你的p1(2)=5
这些行是:
p1(1)=1
p1(2)=5
p2(2)=5
p2(3)=4
p1'(2)-p2'(2)=0
p1''(2)-p2''(2)=0
p1''(1)=0
p2''(3)=0
例如最后一个矩阵行( 0,0,0,0,18,2,0,0 )
这是:
b3.18 + b2.2 = 0
如果我们推导出p2(t)
最多二阶导数
p2(t) = b3.t^3 + b2.t^2 + b1.t + b0
p2'(t) = 3.b3.t^2 + 2.b2.t + b1
p2''(t) = 2.3.b3.t + 1.2.b2 = 6.b3.t + 2.b2
Now for t=3
we get:
p2''(3) = 6.b3.3 + 2.b2 = 18.b3 + 2.b2
并编码成矩阵(最后一行)
(0,0,0,0,18,2,0,0) * ( a3,a2,a1,a0,b3,b2,b1,b0) = 0
这符合你的例子。希望现在已经清楚了...
请注意,你的这个例子只是为了y
轴当你得到二维曲线时你需要这样做x
再次以同样的方式轴...
现在让我们再次重写矩阵方程:
M*A=B
Where M
是你的8x8
矩阵,A=(a3,a2,a1,a0,b3,b2,b1,b0)
and B=(1,5,5,4,0,0,0,0)
你可以这样解决这个问题:
inverse(M)*M*A = inverse(M)*B
A = inverse(M)*B
这样你就得到了A
其中包含你的p1,p2
多项式系数B
它保持你的位置(y
一次传递中的坐标和下一次中的 x 坐标),所以你得到p1x,p1y,p2x,p2y
多项式。这就是插值所需的。
然而这种方法有点落后,通常使用预定义的多项式形式,如 SPLINE、BEZIER,具有连续性、线性等定义的属性(不需要逆矩阵运算)。但是,如果您需要像本示例中那样的自定义属性,那么您就没有太多选择。
欲了解更多信息,请参阅如何产生多点线性插补? https://stackoverflow.com/a/30438865/2521214