首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Matlab的三维图形绘制

基于Matlab的三维图形绘制
EN

Stack Overflow用户
提问于 2015-04-06 06:55:32
回答 2查看 325关注 0票数 1

我想用MATLAB做一个3D画家。

首先,我想显示3个面板- XYXZYZ视图。

用户将在每个面板上画出他想要的东西。

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

我怎么能这么做?

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

2D视图:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-06 07:21:58

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

要从用户获得图形输入,可以使用ginput函数,该函数创建图形并允许用户选择点:

代码语言:javascript
复制
[x,y,btn] = ginput(k);

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

代码语言:javascript
复制
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视图。假设您将坐标保存到变量中

代码语言:javascript
复制
(x1, y1)    % the XY view
(x2, z2)    % the XZ view

现在,您可以通过创建一个x向量并插值所有yz值来创建生成的3D曲线。为了获得一条光滑的曲线,我建议采用样条插值:

代码语言:javascript
复制
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:

代码语言:javascript
复制
plot3(x,y,z);

您可以轻松地扩展这个最小的示例来完成您需要的任何事情,这只是为了在MATLAB中展示基本步骤和可能性。

票数 0
EN

Stack Overflow用户

发布于 2015-04-06 08:28:36

这可能不是一个完整的答案,但可以添加到巴德尔答案中

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

代码语言:javascript
复制
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

平滑前的

平滑后的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29466771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档