我需要一个(rho,theta)
meshgrid
,然后首先在笛卡尔坐标中定义meshgrid
,然后将其转换为极坐标:
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2+Y.^2);
PHI = atan2(Y,X);
现在我得到的是极坐标网格,但是由于它是平方网格,所以我得到了这个东西
我说大于R
的值是错误的,因此我将它们设置为零。我是这样做的
for i = 1:1:length(R)
for j = 1:1:length(R)
if R(i,j) > a
R(i,j) = 0;
else
R(i,j);
end
end
end
我该如何减少复杂性?
答案 0 :(得分:3)
要直接将笛卡尔直角坐标转换为极坐标,请使用cart2pol
。
[theta,rho] = cart2pol(x,y)
然后将执行简单的逻辑检查:
tmp = rho>R;
rho(tmp)=0; %=[] to delete completely
theta(tmp)=0;
对于它的价值:您当然可以创建一个直接的极坐标网格:
[theta,rho] = meshgrid(0:dtheta:theta,0:dR:R)
最后:i
and j
denote the imaginary unit在MATLAB中,出于这篇文章中提到的原因,我反对将它们用作常规变量,但这是我的看法。
答案 1 :(得分:1)
如果我们说a
是您要使用的限制,则可以使用以下代码代替for循环:
R = (R<=a).*R
或者您也可以使用:
R(R>a) = 0