首先,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
测试结果如下:
有现成的函数啊:
[theta,r] = cart2pol(x,y);
如果一定要自己写:
theta = atan2(y,x);
r = sqrt(x.^2+y.^2);
atan返回值属于-pi/2到pi/2之间,所以这个答案的程序是有bug的,建议采用自带的函数,当然已采纳答案的思路还是很不错的