MATLAB-二维曲线绕轴旋转成三维曲面

MATLAB-二维曲线绕轴旋转成三维曲面



前言

目前搜索到的很多都是关于已知函数表达式做变换进行三维旋转,或者使用cylinder函数进行旋转。但是,对于由离散点构成的曲线,我们未知其表达式,使用cylinder函数总是不能达到自己想要的效果。以下记录我的相关学习过程。


一、代码如下

1.matlab代码

代码如下:其中备注见注释和后续文字。

clear;
file1 = load('C:\XXX.txt');  %选择路径读取txt文件
% txt文件有两列数据,一列为横坐标数据,一列为纵坐标数据
x = file1(:,1);
y = file1(:,2);
plot(x,y);
% 目标为绕纵轴旋转二维曲线形成三维曲面
n = 500; % 饶轴一圈的采样点数,!注意点1!
theta = (0:n)/n*2*pi;  % i/n * 2π
XsinX = sin(theta); %因为存在小数点,最后一项应该是0,但其实只是接近零,e-16
XsinX(n+1) = 0;  %这一项其实不太影响,因为最后结果是非常接近0的

% !注意点2!XX、YY每一列的元素都是原本的横坐标乘递增的sin(theta),所以ZZ的每一行也应是原本的纵坐标
XX = x .* cos(theta); % 对于这个新矩阵,某行某列的元素其实对应了一个x*cos
YY = x .* XsinX;   % 同理,YY矩阵对应元素为x*sin,那么这个元素对应的三维z就是原本横坐标x对应的纵坐标y
ZZ = y .* ones(1,n+1);
% !注意点3!
boqian = mesh(XX,YY,ZZ,'FaceAlpha',1);
boqian.FaceColor = 'flat';
hidden on
colorbar;

2.结果

(1)二维曲线

曲线

(2)旋转形成的三维曲面

三维曲面

3.相关解释

  • 注意点1:

n为绕轴一圈的采样点数。这里的曲线绕轴一周并不真的指旋转一周形成光滑曲面,实际上,这个三维曲面是由线面连接而成的,当采样点n越多,显示的三维曲面越光滑。
下图是n=5时的结果(我将透明度改为0.5,方便查看):
三维
可以很明显发现,这个三维面由折线连接起来。

  • 注意点2:

可以注意到,我的二维曲线所用到的离散点坐标均为列矩阵(m行),当横坐标x与theta(行矩阵,n列)相乘时,会产生一个m行n列的矩阵,其中每一行都对应着原本的横坐标,只是随着sin或cos的值递增或递减。也即,三维坐标的XX和YY的元素所在的行数就决定了它对应的三维ZZ坐标,所以ZZ才会是二维纵坐标y乘ones矩阵。
所以,你需要注意你自己的矩阵是何种形式。

  • 注意点3:

这里主要是如何让画出的曲面更加美观:

  • facealpha决定了透明度
  • facecolor = ‘flat’ 可以让平面上色
  • hidden决定是否显示隐藏线

以上这些都可以用help函数搜索查看其详细信息。


  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值