查看: 220|回复: 14|关注: 0

[已答复] 利用内外径画圆环

[复制链接]

新手

12 麦片

财富积分


050


2

主题

14

帖子

0

最佳答案
发表于 2020-5-17 18:54:42 | 显示全部楼层 |阅读模式
各位大神,如何在MATLAB中利用内外径画圆环,然后加上长度变成三维的,形状类似于管道,长度随意,我将内外径数据贴出,谢谢。若能将画好的三维图上的点坐标输出更好,再次感谢。

内外井壁厚.xlsx

9.16 KB, 下载次数: 3

回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2239

帖子

668

最佳答案
  • 关注者: 186
发表于 2020-5-17 20:26:08 | 显示全部楼层
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


2

主题

14

帖子

0

最佳答案
 楼主| 发表于 2020-5-17 22:23:57 | 显示全部楼层
TouAkira 发表于 2020-5-17 20:26
https://www.mathworks.com/help/matlab/ref/cylinder.html

您好,我看了一下这个画出来是一个圆柱体,我需要的是有壁厚的圆筒,请问您知道应该怎么做吗?
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

5

主题

2239

帖子

668

最佳答案
  • 关注者: 186
发表于 2020-5-17 22:45:35 | 显示全部楼层
LastPlaceHero 发表于 2020-5-17 10:23
您好,我看了一下这个画出来是一个圆柱体,我需要的是有壁厚的圆筒,请问您知道应该怎么做吗? ...

画两个嵌套的圆柱面呀,一内一外;然后自己再用surf在顶和底画两个环就是了。
提问请:①准确描述问题②提出你的思考(等着抄作业的一律锁帖)③提供代码文本而非截图④及时反馈
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


2

主题

14

帖子

0

最佳答案
 楼主| 发表于 2020-5-18 13:55:38 | 显示全部楼层
TouAkira 发表于 2020-5-17 22:45
画两个嵌套的圆柱面呀,一内一外;然后自己再用surf在顶和底画两个环就是了。 ...

谢谢提醒,我试试
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

176 麦片

财富积分


50500


4

主题

107

帖子

24

最佳答案
  • 关注者: 2
发表于 2020-5-18 14:26:58 | 显示全部楼层
LastPlaceHero 发表于 2020-5-17 22:23
您好,我看了一下这个画出来是一个圆柱体,我需要的是有壁厚的圆筒,请问您知道应该怎么做吗? ...

%仔细看下2#大神的回复,然后好好看下help中的示例,可以帮助到你的。
clear;
clc;
data=xlsread('C:\Users\LENOVO\Desktop\temp.xlsx');
figure
[X,Y,Z] = cylinder(data(:,1));
[X1,Y1,Z1] = cylinder(data(:,2));
surf(X,Y,Z ,'FaceAlpha',0.7,'FaceColor','r')
hold on
surf(X1,Y1,Z1,'FaceAlpha',0.4,'FaceColor','b')
axis square
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


2

主题

14

帖子

0

最佳答案
 楼主| 发表于 2020-5-18 23:38:39 | 显示全部楼层
15631202458 发表于 2020-5-18 14:26
%仔细看下2#大神的回复,然后好好看下help中的示例,可以帮助到你的。
clear;
clc;

您好,我刚刚运行了程序,是我想要的形式,万分感谢。我还有个问题,如果我想更改z的长度,除了在z前乘系数,还有其他办法吗?如果想让z轴每隔一定距离画该怎么办呢?
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

176 麦片

财富积分


50500


4

主题

107

帖子

24

最佳答案
  • 关注者: 2
发表于 2020-5-19 08:08:40 | 显示全部楼层
LastPlaceHero 发表于 2020-5-18 23:38
您好,我刚刚运行了程序,是我想要的形式,万分感谢。我还有个问题,如果我想更改z的长度,除了在z前乘系 ...

重新按自己需求生成z啊,可以按函数生成等等,你可以看下Z的规律,一个切面Z都相等,你也可以生成不相等的,螺旋线之类的,太多了,包括x,y都可以做平移等等。
回复此楼 已获打赏: 0 积分

举报

新手

12 麦片

财富积分


050


2

主题

14

帖子

0

最佳答案
 楼主| 发表于 2020-5-19 21:21:34 | 显示全部楼层
本帖最后由 LastPlaceHero 于 2020-5-19 21:54 编辑
15631202458 发表于 2020-5-19 08:08
重新按自己需求生成z啊,可以按函数生成等等,你可以看下Z的规律,一个切面Z都相等,你也可以生成不相等 ...

您好,我现在已知条件变成了已知壁厚和内径,内径是每一个深度情况下把当前截面平分成了40份测得了20个内径(类似于我上传的这张图片一样),这样的话我应该怎么画呢?麻烦你了,盼回复
CI0~0EYNHYLSQX~)XP(A280.png

数据.xlsx

9.96 KB, 下载次数: 1

回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

176 麦片

财富积分


50500


4

主题

107

帖子

24

最佳答案
  • 关注者: 2
发表于 2020-5-20 08:42:27 | 显示全部楼层
LastPlaceHero 发表于 2020-5-19 21:21
您好,我现在已知条件变成了已知壁厚和内径,内径是每一个深度情况下把当前截面平分成了40份测得了20个内 ...

clear;
clc;
data=xlsread('D:\Code\Matlab\matlabweb\data.xlsx');
z=data(:,1);
dr=data(:,2);
r=data(:,3:end);
%%
% 首先缺省圆心位置,初始化圆心位置为(0,0);
% 缺少等分圆的初始方向,初始化为azi=0度;
%有个疑问,你等分40份,怎么会只有20个半径呢?另外20个呢,是对称还是只有20个,分两种来说吧
c=[0,0];
azi=0;
N=size(r,2);

%%
% 第一种情况,40等分,两外20个半径为对称的
N1=2*N;
daziN1 = linspace(azi,2*pi+azi,N1);
r1_in=[r,r];
r1_out=r1_in+dr;
% 第二种情况,只有20个半径,认为是20等分
N2=N;
daziN2 = linspace(azi,2*pi+azi,N2);
r2_in=r;
r2_out=r2_in+dr;

%% 调用函数,将圆心,半径数据转换成xyz
%第一种情况
[x1_in,y1_in,z1_in]=getxyzByRadius(z,c,daziN1,r1_in);
[x1_out,y1_out,z1_out]=getxyzByRadius(z,c,daziN1,r1_out);
%第二种情况
[x2_in,y2_in,z2_in]=getxyzByRadius(z,c,daziN2,r2_in);
[x2_out,y2_out,z2_out]=getxyzByRadius(z,c,daziN2,r2_out);

%% 绘图
%第一种情况
figure
surf(x1_in,y1_in,z1_in,'FaceAlpha',0.7,'FaceColor','r')
hold on
surf(x1_out,y1_out,z1_out,'FaceAlpha',0.4,'FaceColor','b')
axis square
%第二种情况
figure
surf(x2_in,y2_in,z2_in ,'FaceAlpha',0.7,'FaceColor','r')
hold on
surf(x2_out,y2_out,z2_out,'FaceAlpha',0.4,'FaceColor','b')
axis square

%% 函数
function [x,y,z]=getxyzByRadius(z0,c0,dazi,r);
for i=1:length(z0)
    for j=1:length(dazi)
        x(i,j)=c0(1)+sin(dazi(j))*r(i,j);
        y(i,j)=c0(1)+cos(dazi(j))*r(i,j);
        z(i,j)=z0(i);
    end
end
end
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表