Matlab 如何实现矩阵形式的B样条?
我只是尝试使用本文给出的矩阵表示法绘制三次B样条曲线: 具体来说,我正试图准确地复制PDF第3节(使用放置矩阵G)中的公式。但我不确定我错在哪里。它不断产生直线。有人能告诉我下面的代码有什么问题吗(它应该在任何版本的matlab上运行;它非常简单) 辅助函数Matlab 如何实现矩阵形式的B样条?,matlab,graphics,curve,spline,bspline,Matlab,Graphics,Curve,Spline,Bspline,我只是尝试使用本文给出的矩阵表示法绘制三次B样条曲线: 具体来说,我正试图准确地复制PDF第3节(使用放置矩阵G)中的公式。但我不确定我错在哪里。它不断产生直线。有人能告诉我下面的代码有什么问题吗(它应该在任何版本的matlab上运行;它非常简单) 辅助函数 % Bi.m % The 'B' matrix function [B] = Bi(i) B = [[ -(1./6.)*i^3, (1./6.)*(3*i^3 + 3*i^2 - 3*i + 1), -(1./2.)*(i^3)-(i^2
% Bi.m
% The 'B' matrix
function [B] = Bi(i)
B = [[ -(1./6.)*i^3, (1./6.)*(3*i^3 + 3*i^2 - 3*i + 1), -(1./2.)*(i^3)-(i^2)+2./3., (1./2.)*(i+1)^3 ];
[ +(1./2.)*i^2, -(1./2.)*(3*i-1)*(i+1), (1./2.)*(3*i^2 + 4*i), -(1./2.)*(i+1)^2 ];
[ (1./2.)*i, (1./2.)*(3*i+1), -(1./2.)*(3*i+2), (1./2.)*(i+1) ];
[ (1./6.), -(1./2.), (1./2.), -(1./6.) ]];
end
我的输出如下所示:
我的第一个问题是,你的最终目标是什么?你是否愿意使用矩阵表示法?我的第二个问题是,你能发布一个输出的屏幕截图吗?我的目标只是复制那个矩阵表示。我需要那个特定的矩阵表示法来进行进一步的研究。嗯,那么我可能帮不了忙,我对matlab和样条曲线的矩阵表示法都不熟悉,因为这种表示法效率很低,而且伸缩性很差。我打算建议使用DeBoor的算法,这是B样条曲线在野外的实际使用方式。作为一个关于再现某人数学的问题,这可能更好地继续问下去,因为这有很多与matlab相关的问题。因为作为一个编程问题,答案实际上是“只使用已经可用的许多预构建BSpline包中的一个”。我的第一个问题是,您的最终目标是什么,您是否愿意使用矩阵表示?我的第二个问题是,你能发布一个输出的屏幕截图吗?我的目标只是复制那个矩阵表示。我需要那个特定的矩阵表示法来进行进一步的研究。嗯,那么我可能帮不了忙,我对matlab和样条曲线的矩阵表示法都不熟悉,因为这种表示法效率很低,而且伸缩性很差。我打算建议使用DeBoor的算法,这是B样条曲线在野外的实际使用方式。作为一个关于再现某人数学的问题,这可能更好地继续问下去,因为这有很多与matlab相关的问题。因为作为一个编程问题,答案实际上是“只需使用已经可用的许多预构建BSpline包中的一个”。
% Bi.m
% The 'B' matrix
function [B] = Bi(i)
B = [[ -(1./6.)*i^3, (1./6.)*(3*i^3 + 3*i^2 - 3*i + 1), -(1./2.)*(i^3)-(i^2)+2./3., (1./2.)*(i+1)^3 ];
[ +(1./2.)*i^2, -(1./2.)*(3*i-1)*(i+1), (1./2.)*(3*i^2 + 4*i), -(1./2.)*(i+1)^2 ];
[ (1./2.)*i, (1./2.)*(3*i+1), -(1./2.)*(3*i+2), (1./2.)*(i+1) ];
[ (1./6.), -(1./2.), (1./2.), -(1./6.) ]];
end
% Gi.m
% The 'G' matrix
function [G] = Gi(i, L)
G = zeros(4, L);
for m = 1:4
for n = 1:L
if n == i+m-3
G(m,n) = 1;
end
end
end
end