我需要绘制此函数
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绘图?
答案 0 :(得分:2)
对我而言,事情是对的,虽然我不会将符号j
用作变量,因为(如i
所做的那样)它是虚构单位的符号(sqrt(-1)
)。这样做是为了覆盖它,因此在你不需要复杂的数字之前,事情就会奏效。
当你想要逐个元素地组合数组条目时,你应该使用元素方式的操作,例如(.*
),正如你正确地获得F(\theta)
一样。实际上,cos(theta)
是theta
中包含的角度的余弦数组,依此类推。
最后,您可以使用绘图窗口中的Rotate 3D
命令旋转绘图。尽管如此,你有一条2D曲线(F(\theta)
)因此,你将继续旋转2D图形,获得它的某种透视图,仅此而已。要获得真实的信息,您需要一个额外的因变量(或者我误解了您的问题?)。
编辑:现在我看到了你的观点,你希望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)
您还可以添加图形效果
这是通过
完成的mesh(xf,yf,zf,'FaceColor','interp','FaceLighting','phong')
camlight right
和更精细的角度离散(1e-3)
。