在matlab中绘制天线辐射的特征

时间:2013-01-05 13:26:18

标签: matlab plot polar-coordinates bessel-functions

我需要绘制此函数enter image description here

theta = (-pi:0.01:pi);
f = 3*10^9;
c = 299792458;
da = 2;

这是我的代码,但我不确定它是否正确。我不知道究竟应该在哪里。如何将X轴设置为degress?

beta = (2*pi*f)/c;
const= (da*beta)/2; 
j= (cos(theta)+1).*(besselj(1,const*sin(theta))./(const*sin(theta)));

我的另一个问题是如何在极坐标中绘制此函数。

我做了这样的事。

polar(theta,j);

是否可以旋转该功能(通过y轴)来获得3D绘图?

1 个答案:

答案 0 :(得分:2)

对我而言,事情是对的,虽然我不会将符号j用作变量,因为(如i所做的那样)它是虚构单位的符号(sqrt(-1) )。这样做是为了覆盖它,因此在你不需要复杂的数字之前,事情就会奏效。

当你想要逐个元素地组合数组条目时,你应该使用元素方式的操作,例如(.*),正如你正确地获得F(\theta)一样。实际上,cos(theta)theta中包含的角度的余弦数组,依此类推。

最后,您可以使用绘图窗口中的Rotate 3D命令旋转绘图。尽管如此,你有一条2D曲线(F(\theta))因此,你将继续旋转2D图形,获得它的某种透视图,仅此而已。要获得真实的信息,您需要一个额外的因变量(或者我误解了您的问题?)。 enter image description here

编辑:现在我看到了你的观点,你希望Surface of revolution围绕某个轴,我认为凭借其中的对称性theta=0。那么,旋转表面可以通过一些解析几何来获得并且例如绘制。使用mesh。看看这个:

  % // 2D polar coordinate radius (your j)
  Rad= (cos(theta)+1).*(besselj(1,const*sin(theta))./(const*sin(theta)));
  Rad = abs(Rad);  % // We need its absolute value for sake of clarity


  xv = Rad .* cos(theta);  % // 2D Cartesian coordinates
  yv = Rad .* sin(theta);  % // 2D Cartesian coordinates

  phi = -pi:.01:pi;        % // 3D revolution angle around theta = 0

  % // 3D points of the surface
  xf = repmat(xv',size(phi)); 
  yf = yv' * cos(phi);
  zf = yv' * sin(phi);

  mesh(xf,yf,zf)

enter image description here

您还可以添加图形效果

enter image description here

这是通过

完成的
mesh(xf,yf,zf,'FaceColor','interp','FaceLighting','phong')
camlight right

和更精细的角度离散(1e-3)