Matlab 球坐标-直角坐标转换sph2cart

sph2cart函数及其解析

sph2cart函数是Matlab中从球坐标向直角坐标变换的函数。


先看一下matlab球坐标系的设定:
这里写图片描述

注: 图片引用自matlab帮助文件

注意到这个定义,Azimuth角和我们通常习惯的球坐标定义角是一样的,但Elevation却和我们平常定义的不同,我们平时习惯的球坐标定义的 θ=π/2Elevation
因此这也导致坐标变换公式和我们平时使用的不同。
x=r.sin(θ).cos(Azimuth)
y=r.sin(θ).sin(Azimuth)
z=r.cos(θ)

提到这个角度定义最主要的问题,是这个角度与卦限位置相关。Matlab使用的角度定义往往使我们陷入比较困惑的境地。当然解决这个问题也比较简单,我们可以在调用sph2cart时将角度做一次转换即可。

下面给一个例子。

clear;clc;clf;
r=450;

theta=linspace(pi/2,pi);
phi=linspace(0,pi/2); % 第五卦限
[tt,pp]=meshgrid(theta,phi);
[x1,y1,z1] = sph2cart(pp,pi/2-tt,r);
s1 = surf(x1,y1,z1);
shading interp;
axis equal
view([120 10]);
hold on;

theta=linspace(0,pi/2);
phi=linspace(0,pi/2); % 第一卦限
[tt,pp]=meshgrid(theta,phi);
[x2,y2,z2] = sph2cart(pp,pi/2-tt,r);
s2 = surf(x2,y2,z2);
shading interp;

theta=linspace(0,pi/2);
phi=linspace(pi*3/2,pi*2); % 第四卦限
[tt,pp]=meshgrid(theta,phi);
[x3,y3,z3] = sph2cart(pp,pi/2-tt,r);
s3 = surf(x3,y3,z3);
shading interp;

theta=linspace(pi/2,pi);
phi=linspace(pi*3/2,pi*2); %第八卦限
[tt,pp]=meshgrid(theta,phi);
[x4,y4,z4] = sph2cart(pp,pi/2-tt,r);
s4 = surf(x4,y4,z4);
shading interp;

xlabel('x');ylabel('y');zlabel('z');
axis([-500,500,-600,600,-600,600]);
set(s1,'FaceColor','r','FaceAlpha',0.3);
set(s2,'FaceColor','b','FaceAlpha',0.3);
set(s3,'FaceColor','y','FaceAlpha',0.3);
set(s4,'FaceColor','c','FaceAlpha',0.3);

这里写图片描述

  • 11
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值