【问题标题】:Fit surface through curves通过曲线拟合曲面
【发布时间】:2014-08-07 13:35:57
【问题描述】:

我有 10 组 3D 点。每组代表平滑曲线上的点。我可以轻松地将曲线拟合到 Matlab 中的每组并获得 10 条曲线。现在如何在 Matlab 中通过这些曲线拟合曲面?

【问题讨论】:

  • 什么样的表面?您是否有一个想要拟合的方程式,或者您只是想要一个贯穿所有的方程式?如果是第二个,你应该看看双三次样条曲面。您可以制作曲面补丁。这就是图像在计算机中调整大小的方式(尽管通常使用双曲面代替)
  • 我只需要它来进行可视化。我不需要等式。任何类型的平滑表面插值都可以。
  • 如果您只是为了可视化需要它,只需 surf(X,Y,Z)
  • surf 只能在您拥有均匀分布的 x 和 y 数据时使用。它说 Z 需要是一个矩阵。
  • 好吧,快速谷歌搜索会给你答案和代码。blogs.mathworks.com/videos/2007/11/02/…

标签: matlab curve-fitting surface


【解决方案1】:

如果您有曲线拟合工具箱,则可以使用fit 函数轻松地将曲面拟合到 3 个 x、y、z 向量。这是一些将多项式曲面拟合到随机点的示例代码。如果您愿意,您可以定义自己的拟合函数,或者查看他们为曲面提供的其他 fitType。这是fitdocumentation

x = rand(10,1);
y = rand(10,1);
z = rand(10,1);
f = fit([x,y],z,'poly23');
figure;
scatter3(x,y,z,'r','fill'); hold on;
plot(f);

这是结果的样子(你的可能会有所不同,因为随机点):

【讨论】:

    【解决方案2】:

    如果你没有曲线拟合工具箱,你可以这样做:

    x=rand(100,1)*16-8;                     % Use your data instead
    y=rand(100,1)*16-8;
    r=sqrt(x.^2+y.^2)+eps;
    z=sin(r)./r;
    %
    xlin=linspace(min(x),max(x),33);        % Create x,y linear space
    ylin=linspace(min(y),max(y),33);
    [X,Y]=meshgrid(xlin,ylin);              % Create mesh [x y]
    Z=griddata(x,y,z,X,Y,'cubic');          % Interpolate with bicubic functions            
    %
    mesh(X,Y,Z); % interpolated             % Fancy plots for demosntration
     hold on
    plot3(x,y,z,'.','MarkerSize',15)
    % surf(X,Y,Z)                           % use this one to get the standard surf
    

    获得:

    【讨论】:

      猜你喜欢
      • 2019-10-10
      • 2016-01-13
      • 2021-01-19
      • 2015-03-02
      • 2018-07-27
      • 1970-01-01
      • 2013-09-04
      • 2013-11-08
      • 2017-04-21
      相关资源
      最近更新 更多