欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matlab中的三维坐标变换,从直角坐标系转换到球坐标系

程序员文章站 2022-07-12 23:31:21
...

使用Matlab画图时,有时三维的球坐标图更直观,需要把直角坐标转换球坐标。
代码如下:

function 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 = -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 %坐标系对称

结果如下:
matlab中的三维坐标变换,从直角坐标系转换到球坐标系

matlab中的三维坐标变换,从直角坐标系转换到球坐标系