首先,matlab 本身提供了把直角坐标转化为极坐标的函数 cart2pol。调用方法为:
[TH,R] = cart2pol(X,Y) TH 是极坐标的角度坐标,R 是距离坐标。
[TH,R,Z] = cart2pol(X,Y,Z) 这个函数同时支持3维直角坐标到柱坐标的转换。
如果因为是轿升作业或者练习,一定要自己写一个橘尘的话,请继续往下看。
考虑到这个程序的性质,编成一个函数比较适合。编写这个函数需要用到直角坐标与极坐标的数学关系。考虑到输入参数可能是一个向量或矩阵,关系式里面的运算符应该用加点圆帆禅运算符。
函数代码如下:
function [ TH,R ] = mycart2pol(X,Y)
%this function transforms corresponding elements of data
%stored in Cartesian coordinates X,Y to polar coordinates
%angle TH and radius R.
R=(X.^2+Y.^2).^0.5
TH=atan(Y./X)
end
测试结果如下:
function test
N = 100
a =- 3b =-2
x 蚂汪= 4
thetaA = angle(a+b*1i)
thetaB = angle(a+x+b*1i)
thetaC 纤庆= angle(a+x+(b+x)*1i)
thetaD = angle(a+(b+x)*1i)
jAB = b
jBC = a+x
jCD = b+x
jDA = a
[r0,theta0] = rc(thetaA,thetaB,jAB,N)
[r1,theta1] = rr(thetaB,thetaC,jBC,N)
[r2,theta2] = rc(thetaC,thetaD,jCD,N)
if thetaA*thetaD<毁物握0 &&abs(thetaA)>pi/2
thetaA = thetaA+2*pi
end
[r3,theta3] = rr(thetaD,thetaA,jDA,N)
r = abs([r0,r1,r2,r3])
theta = [theta0,theta1,theta2,theta3]
polar(theta,r)
function [r,theta] = rc(theta1,theta2,rj,N)
dtheta = (theta2-theta1)/N
theta = theta1:dtheta:theta2
r = rj*csc(theta)
function [r,theta] = rr(theta1,theta2,rj,N)
dtheta = (theta2-theta1)/N
theta = theta1:dtheta:theta2
r = rj*sec(theta)
matlab里面有直角坐标转成极坐标的函数cart2pol
函数功能:在MATLAB中, 该函数用于把笛卡携如尔坐标转换为极坐标(柱坐标)。
语法格式:
[THETA,RHO,Z] = cart2pol(X,Y,Z)
把三维笛卡尔坐标(X,Y,Z)转换为对应的柱坐标(THETA,RHO,Z)。THETA是沿逆时搏凳针方向与X轴正方向的夹角,RHO是点(X,Y,Z)在OXY平面上的投影与原点的距离,Z是(X,Y,Z)坐标距OXY平面的高度。
[THETA,RHO] = cart2pol(X,Y)
把基隐旅二维笛卡尔坐标(X,Y)转换为对应的极坐标(THETA,RHO)。
相关函数:cart2sph,pol2cart, sph2cart
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)