矩阵只是编码为矩阵的方程组,因此可以通过逆矩阵轻松计算。
例如,矩阵的第二行(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
现在对于
t=3
,我们得到:
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
如果您有一个8x8
矩阵M
,以及两个向量A=(a3,a2,a1,a0,b3,b2,b1,b0)
和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,具有定义好的属性,如连续性、线性等(无需进行逆矩阵运算)。但如果你需要像这个例子中那样的自定义属性,那么你就没有太多选择。
更多信息请参见
如何生成多点线性插值?
M.X = V
,其中M是一个维度为n
的方阵,X和V是维度为n
的向量? - yaitloutou