[MATLAB]matlab自定义母线画旋转面

一、 问题描述

绘制以z=f(y)为母线绕z或y轴的旋转曲面,要求:
用户自行决定曲面网格的疏密;
用户输入旋转轴;
用图像给生成的曲面贴上纹理,图像预载入或用户输入

二、 求解思路

利用cylinder函数,输入母线和范围,即可使用surf函数画出旋转图
绕y轴时,直接使用原函数,利用linspace函数将区间分割为等间距的点后,带入母线函数中。
绕z轴时,使用原函数的反函数,先将用户输入的字符串解读,定义符号变量,产生符号函数,再利用finverse输出反函数的内含函数,后面的操作如图。
本程序可以解决单调或者半侧单调的函数绕y轴或者绕z轴或者不单调函数绕y轴的情况,对于不单调的函数绕z轴的情况,由于无法求得正确的反函数,在画绕z轴时将失效
此外,本程序在输入时也考虑了用户输入含变量x的情况,对于可以操作的情况,本程序以允以支持,对于无法操作的情况(输入函数的自变量,变量和绕的轴都不相同),本程序将允以拒绝

三、 程序代码

clear;
clc;
close all
qidian=pi/2;
zhongdian=2*pi+pi/4;
jiange=10;
s=input("输入函数表达式:如('z=y.^2')");
[xall,p]=strsplit(s,'=');
x1=cell2mat(xall(1));
x2=cell2mat(xall(2));
pat=['x','y','z'];
for i=1:3
    k1=contains(x1,pat(i));
    if k1==1
        judge1=pat(i);
    end
    k2=contains(x2,pat(i));
    if k2==1
        judge2=pat(i);
    end
end    
qidian=input("请输入(自变量)起点:");
zhongdian=input("请输入(自变量)终点:");
jiange=input("请输入间隔:");
zhou=input("请输入中心轴( 'y' or 'z')");
tupian=input("请输入要贴入的图片('图片名')");
if ~isequal(judge1,judge2,zhou)
    f=inline(x2);
    if ~(judge2==zhou)
        lin=linspace(qidian,zhongdian,1000);
        zhongdian=max(f(lin));
        qidian=min(f(lin));
        syms x
        tempf(x)=f(x);
        f=inline(finverse(tempf));  
    end
    [X,Y,Z]=fun(f,qidian,zhongdian,jiange,zhou,tupian);
else
    disp('无法画图')
end


function [X,Y,Z]=fun(f,qidian,zhongdian,jiange,zhou,tupian)

lin=linspace(qidian,zhongdian,jiange);
x=f(lin);
if zhou=='z'
  [X,Y,Z]=cylinder(x);
else
   [X,Z,Y]=cylinder(x); 
end

h=surf(X,Y,Z);
axis square
[mx,mp]=imread(tupian);
set(h,'CData',flipdim(mx,1),'FaceColor','texturemap','EdgeColor','none')
end

四、 实验结果

在这里插入图片描述
在这里插入图片描述

五、 实验心得

Matlab本身自带许多功能强大的函数,合理运用这些函数时,将取得事半功倍的效果,然而一旦盲目使用这些函数,将会使得实验走向死胡同或者一些无法解决的结果

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值