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

来源:互联网 发布:matlab 稀疏矩阵求逆 编辑:程序博客网 时间:2024/04/26 17:03

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 equalview([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);

这里写图片描述

0 0
原创粉丝点击