用Matlab绘制三维图形

用Matlab绘制三维图形,matlab,3d,drawing,mesh,Matlab,3d,Drawing,Mesh,我想用MATLAB做一个3D画师 首先,我想显示3个面板-XY、XZ和YZ视图 用户将在每个面板中绘制他想要的内容 之后,他将点击一个按钮来组合3个视图,并从这些面板中获得一个三维模型。他还可以自由渲染此模型 我该怎么做 这些图片说明了我想要的: 二维视图: 3D对象组合3个视图后: 我假设您只希望指定三维线,而不希望指定实体块(如链接示例中所示)。这里我看到了一个小问题:在指定XY和XZ投影后,曲线上的每个点都有一个x、y和z值,因此YZ投影已经定义。因此,仅指定XY和XZ尺寸就足够了。以下

我想用MATLAB做一个3D画师

首先,我想显示3个面板-
XY
XZ
YZ
视图

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

之后,他将点击一个按钮来组合3个视图,并从这些面板中获得一个三维模型。他还可以自由渲染此模型

我该怎么做

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

二维视图:

3D对象组合3个视图后:

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

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

[x,y,btn] = ginput(k);
其中,
x
y
是所选点的坐标,
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
向量并插值所有
y
z
值来创建生成的三维曲线。对于平滑曲线,我建议使用样条插值:

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
功能以三维方式打印即可:

plot3(x,y,z);

你可以很容易地扩展这个最小的例子来做任何你需要的事情,这只是为了在MATLAB中显示基本的步骤和可能性。

这可能不是一个完整的答案,但这可以与答案一起添加

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

平滑前

平滑后:

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