24小时热门版块排行榜    

查看: 3774  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

adder8810

银虫 (小有名气)

[交流] 【求助】matlab生成旋转体? 已有5人参与

请教一个问题,谢谢:

已知一个二维数据,y=f(x), 想使得这个数据绕y轴旋转而成为一个旋转对称的三维数据,该如何处理!

我用了cylinder,但它好像只能是绕x轴旋转,并不是所希望的形状?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiegangmai

版主 (职业作家)

我没头衔

优秀版主优秀版主优秀版主

★
小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by adder8810 at 2011-04-11 15:15:04:
因为我这个相当于由一个二维函数经过旋转变成一个三维旋转对称的形状。那么在变换前,这个二维函数绕什么轴旋转就是关键,轴不同,旋转的曲面就完全不同。
按楼主的方法,只是将已经生成的旋转曲面,调整成不同轴 ...

不好意思,误解了!

要画出你所想要的图形,只需对原始二维曲线进行一下变换就可以了的,即沿 y = x 直线对称一下,这应该可以吧。

也可以根据图形变换方法,自己写个函数来画图。
简单试了试,mycylinder.m文件:
CODE:
function [ sx, sy, sz ] = mycylinder( x, y, ax )
% 将x, y转成列向量
x = x(:);
y = y(:);
z = zeros( size( x ) );
dtheta = pi / 100;
sx = zeros( length( x ), 201 );
sy = zeros( length( x ), 201 );
sz = zeros( length( x ), 201 );
switch ax
    case 'x'
        for i = 1 : 200
            theta = i * dtheta;
            M = [ 1, 0, 0; 0, cos( theta ), sin( theta ); 0, -sin( theta ), cos( theta ) ];
            S = [ x, y, z ] * M;
            sx( :, i ) = S( :, 1 );
            sy( :, i ) = S( :, 2 );
            sz( :, i ) = S( :, 3 );
            
        end
        sx( :, end ) = sx( :, 1 );
        sy( :, end ) = sy( :, 1 );
        sz( :, end ) = sz( :, 1 );
    case 'y'
        for i = 1 : 200
            theta = i * dtheta;
            M = [ cos( theta ), 0, -sin( theta ); 0, 1, 0; sin( theta ), 0, cos( theta ) ];
            S = [ x, y, z ] * M;
            sx( :, i ) = S( :, 1 );
            sy( :, i ) = S( :, 2 );
            sz( :, i ) = S( :, 3 );
            
        end
        sx( :, end ) = sx( :, 1 );
        sy( :, end ) = sy( :, 1 );
        sz( :, end ) = sz( :, 1 );
end

测试例1:
CODE:
clear
clc
x = 0 : pi / 100 : 2 * pi;   % x范围
y = 2 + cos( x );   % y = f( x );
subplot( 1, 3, 1 )
plot( x, y );
xlabel( 'x' )
ylabel( 'y' )

[ sx1, sy1, sz1 ] = mycylinder( x, y, 'x' );
subplot( 1, 3, 2)
surf( sx1, sy1, sz1 );
xlabel( 'x' )
ylabel( 'y' )
zlabel( 'z' )

[ sx2, sy2, sz2 ] = mycylinder( x, y, 'y' );
subplot( 1, 3, 3 )
surf( sx2, sy2, sz2 );
xlabel( 'x' )
ylabel( 'y' )
zlabel( 'z' )

结果:

测试例2:
CODE:
clear
clc
x = 0 : pi / 100 : 2 * pi;   % x范围
y = 2 + x .^ 2;   % y = f( x );
subplot( 1, 3, 1 )
plot( x, y );
xlabel( 'x' )
ylabel( 'y' )

[ sx1, sy1, sz1 ] = mycylinder( x, y, 'x' );
subplot( 1, 3, 2)
surf( sx1, sy1, sz1 );
xlabel( 'x' )
ylabel( 'y' )
zlabel( 'z' )

[ sx2, sy2, sz2 ] = mycylinder( x, y, 'y' );
subplot( 1, 3, 3 )
surf( sx2, sy2, sz2 );
xlabel( 'x' )
ylabel( 'y' )
zlabel( 'z' )

结果:


你看看是不是需要的结果。mycylinder函数还需完善。

按第一种方式,将曲线沿y = x对称一下,用cylinder做更方便。

[ Last edited by xiegangmai on 2011-4-11 at 20:57 ]

» 本帖已获得的红花(最新10朵)

明德厚学、求是创新
7楼2011-04-11 20:56:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

xiegangmai

版主 (职业作家)

我没头衔

优秀版主优秀版主优秀版主

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
zzuwangshilei(金币+1): 积极参与 2011-04-11 14:07:15
引用回帖:
Originally posted by adder8810 at 2011-04-11 01:04:46:
请教一个问题,谢谢:

已知一个二维数据,y=f(x), 想使得这个数据绕y轴旋转而成为一个旋转对称的三维数据,该如何处理!

我用了cylinder,但它好像只能是绕x轴旋转,并不是所希望的形状?

默认是绕z轴旋转的。

如果需要绕其他轴或任意直线旋转,需要进行变换,用计算机图形学中的图形平移和旋转相关知识,说白了就是乘以一个转换矩阵。

[ Last edited by xiegangmai on 2011-4-11 at 12:48 ]
明德厚学、求是创新
2楼2011-04-11 07:36:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

adder8810

银虫 (小有名气)

引用回帖:
Originally posted by xiegangmai at 2011-04-11 07:36:08:
默认是绕y轴旋转的。

如果需要绕其他轴或任意直线旋转,需要进行变换,用计算机图形学中的图形平移和旋转相关知识,说白了就是乘以一个转换矩阵。

Matlab中是否有现成的函数可以调用?
另外,我的问题其实不是很复杂,能绕x轴或者y轴旋转就行,只是想改变系统默认的轴到与之垂直的轴上?
3楼2011-04-11 10:18:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xianggui7895

银虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
xiegangmai(金币+1): 鼓励讨论交流! 2011-04-11 13:18:25
matlab好像没有提供更好的解决办法,你有函数f(x),先设定Y值,反函数求x,然后cylinder(x)??
4楼2011-04-11 11:04:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 龙 兔 虎 猫 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[教师之家] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +4 GDBe8tDZqE8z 2026-09-28 4/200 2026-09-29 09:49 by JzYBbHIXWSrW
[找工作] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +5 IDs3scOF0tjC 2026-09-28 5/250 2026-09-29 09:24 by JzYBbHIXWSrW
[博后之家] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 IDs3scOF0tjC 2026-09-28 6/300 2026-09-29 09:18 by JzYBbHIXWSrW
[考研] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 ZYXdhzDAy9ZX 2026-09-28 3/150 2026-09-29 06:42 by ZvyPK8n6Nfki
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 ZYXdhzDAy9ZX 2026-09-28 3/150 2026-09-29 06:34 by ZvyPK8n6Nfki
[找工作] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +3 ZYXdhzDAy9ZX 2026-09-28 3/150 2026-09-29 06:28 by ZvyPK8n6Nfki
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 ZYXdhzDAy9ZX 2026-09-28 3/150 2026-09-29 06:18 by ZvyPK8n6Nfki
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 tqUTOxClQUMF 2026-09-28 3/150 2026-09-28 23:46 by b8fCuTHqckEt
[考博] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +4 GDBe8tDZqE8z 2026-09-28 4/200 2026-09-28 23:19 by b8fCuTHqckEt
[考研] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 GDBe8tDZqE8z 2026-09-28 3/150 2026-09-28 23:12 by b8fCuTHqckEt
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +4 IDs3scOF0tjC 2026-09-28 4/200 2026-09-28 22:55 by ez6fGg9abYaj
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 CfXuS1rDhLYN 2026-09-28 4/200 2026-09-28 22:55 by ez6fGg9abYaj
[有机交流] 同一个分子,一条来自文献,一条来自AI——不告诉你答案,你会选哪条? +3 tianxiaoxian 2026-09-28 6/300 2026-09-28 22:44 by tianxiaoxian
[找工作] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 IDs3scOF0tjC 2026-09-28 5/250 2026-09-28 22:32 by ez6fGg9abYaj
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 IDs3scOF0tjC 2026-09-28 4/200 2026-09-28 22:28 by ez6fGg9abYaj
[博后之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 IDs3scOF0tjC 2026-09-28 3/150 2026-09-28 22:21 by ez6fGg9abYaj
[考博] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 IDs3scOF0tjC 2026-09-28 6/300 2026-09-28 22:15 by ez6fGg9abYaj
[论文投稿] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 CfXuS1rDhLYN 2026-09-28 3/150 2026-09-28 19:08 by 9lS3ad5oOymn
[考研] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +3 IDs3scOF0tjC 2026-09-28 4/200 2026-09-28 18:51 by 9lS3ad5oOymn
[教师之家] 某top大学教授说“能够在市场中兑现的能力才是真能力”无比同意! +7 zju2000 2026-09-26 8/400 2026-09-28 16:42 by beefly
信息提示
请填处理意见