使用Matlab进行3D绘图

时间:2015-04-06 06:55:33

标签: matlab 3d drawing mesh

我想用MATLAB制作3D画家。

首先,我想展示3个面板 - XYXZYZ次观看。

用户将在每个面板中绘制他想要的内容。

之后,他将点击一个按钮组合3个视图,并从这些面板中获取一个3d模型。他也可以自由地渲染这个模型。

我该怎么做?

这些图片说明了我想要的东西:

2D观看次数
2D views

合并3个视图后,

3D对象
3D object

2 个答案:

答案 0 :(得分:0)

我假设您只想指定3D线条而不是实体块(如链接示例中所示)。在那里我看到一个小问题:在指定XY和XZ投影之后,曲线上的每个点都有一个x,y和z值,因此YZ投影已经定义。因此,仅指定XY和XZ尺寸就足够了。以下是如何做到这一点:

要获得用户的图形输入,您可以使用ginput功能,该功能可创建图形并允许用户选择点:

[x,y,btn] = ginput(k);

其中xy是所选点的坐标,btn任意点击按钮的ASCII码,k是要获得的点数。您可以让用户绘制一些东西,并通过按空格键来结束绘图:

figure; axis([0 1 0 1]);              % create empty figure
button=0; k=1;                        % set start values
while button~=' '                     % repeat until space is pressed
    [x(k) y(k), button] = ginput(1);  % get one point
    k=k+1;                            % set k for next iteration
    plot(x,y);axis([0 1 0 1]);        % plot the curve
end

您可以重复两次以获取XY和XZ视图。我们假设您将坐标保存到变量

(x1, y1)    % the XY view
(x2, z2)    % the XZ view

现在,您可以通过创建x向量并插入所有yz值来创建生成的3D曲线。对于漂亮的平滑曲线,我建议使用样条插值:

x = 0:0.01:1;
y = interp1(x1,y1,x,'spline','extrap');    % Spline interpolation + extrapolation
z = interp1(x2,z2,x,'spline','extrap');    % Spline interpolation + extrapolation

现在只需使用plot3函数将其绘制成3D:

plot3(x,y,z);

您可以轻松扩展此最小示例以执行您需要的任何操作,这只是为了显示MATLAB中的基本步骤和可能性。

答案 1 :(得分:0)

这可能不是一个完整的答案,但可以使用hbaderts answer

添加

在绘制时生成平滑的Spline ,而不是直线(如他所建议的那样)

figure; axis([0 1 0 1]);                    % create empty figure
button=0; k=1;
while button~=' '                           % repeat until space is pressed
    [x(k) y(k), button] = ginput(1);        % get one point                            
    plot(x(k),y(k),'r.');axis([0 1 0 1]);   % plot the points
    hold on
    fnplt(cscvn(vertcat(x,y)),'b',2);       % Generate smooth spline
    hold off
    k=k+1;                                  % set k for next iteration
end

平滑前

hbaderts image

平滑后:

smoothed curve