matlab中应用surf函数画球形物体的三维坐标变换,从球坐标系转换到笛卡尔坐标系

在Matlab中采用surf函数画三维图时,该函数使用笛卡尔坐标系绘制图形,因此在某些球形图案的绘制中,直接使用(theta,phi,z)参数无法得到球形图案,需要将图案对应的点从球坐标转变为笛卡尔坐标,从而得到球形图案。
调用如下的子程序可以完成相应的坐标变换。
代码如下:

function [Spherical_x, Spherical_y, Spherical_z] = rectangular2spherical(theta, phi, z)
%因为画图时使用surf来画图,所以要保证theta,phi,z的矩阵大小相同
%相当于三维空间中,一个点的三个坐标。
R = abs(z);
%z = z - max(z); %如果z小于零,可以只取较大的数
%R=z(z + 20 > 0); 
Spherical_x = R .* sin(theta) .* cos(phi);
Spherical_y = R .* sin(theta) .* sin(phi);
Spherical_z = R .* cos(theta);
end

看起来很简单的,下面写个主程序调用一下。

clear
close all
clc
%用(theta,phi,z)坐标画一个平面,然后变换为(x,y,z)形成一个球。

theta = -90 : 1 : 90;
phi = 0 : 1 : 360;
z = ones(length(theta), length(phi));
[theta_xx, phi_yy] = meshgrid(phi, theta);
figure(1)
surf(theta_xx, phi_yy, z)
title('直角坐标系')
shading flat %去掉网格的边沿颜色
[theta_xx, phi_yy, z] = rectangular2spherical(theta_xx, phi_yy, z); %调用上面函数
figure(2)
surf(theta_xx, phi_yy, z)
title('球坐标系')
shading flat
axis equal %坐标系对称

结果如下:
在这里插入图片描述

图2
编者水平有限,殷切希望批评指正。有相关疑问也可以评论咨询,谢谢啦_

  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Matlab是一种矩阵计算和可视化工具,在绘图方面有很强的功能。针对三维坐标系的绘制,Matlab也提供了较为便捷的方式。 要绘制三维坐标系,首先需要在Matlab创建一个三维坐标系,方法是使用plot3或scatter3函数。这两个函数均可以绘制三维散点图,其plot3函数绘制连续线条,而scatter3函数绘制离散点。具体代码如下: 方法一: [x,y,z] = sphere; %生成球面坐标 h=surf(r*x,r*y,r*z); %绘制球面 set(h,'FaceColor','none','EdgeColor','g') %设置边界颜色 hold on plot3([0 r*1.2],[0 0],[0 0],'r','LineWidth',2) %x轴 plot3([0 0],[0 r*1.2],[0 0],'g','LineWidth',2) %y轴 plot3([0 0],[0 0],[0 r*1.2],'b','LineWidth',2) %z轴 hold off xlabel('X轴');ylabel('Y轴');zlabel('Z轴'); %设置坐标轴标签 方法二: scatter3(x,y,z,'.'); xlabel('X轴');ylabel('Y轴');zlabel('Z轴'); %设置坐标轴标签 上述代码,第一种方法使用了sphere函数生成球面坐标,然后利用surf函数三维坐标系上绘制出来。其他三个维度的坐标轴则是通过plot3函数绘制,其第一个参数表示x轴,第二个参数表示y轴,第三个参数表示z轴。最后通过set函数设置边界颜色。 第二种方法使用了scatter3函数,只需要提供x、y、z三个维度的坐标即可绘制散点图,最后通过xlabel、ylabel、zlabel函数设置坐标轴标签。需要注意的是,这里的x、y、z坐标需要提前定义或者由其他数据生成。 以上两种方法均能够绘制出漂亮的三维坐标系,具体方法根据实际需要选择即可。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值