如何在 Matlab 中生成倾斜的磁场流片图

计算科学 可视化 电磁学
2021-12-18 06:49:13

我目前正在写我的学士论文,我正在计算霍尔效应离子推进器中电子和离子的轨迹。但是,要确定我在计算什么,我需要知道电磁场的样子。

我已经有了使用流片可视化电磁场的工作代码,但是我想把它提升到一个新的水平。

我已经创建了坐标x, yz通过网格和计算磁场,这是一组不太漂亮的方程。电场只指向z方向。

这是生成下面图片的代码片段:

% Magnetic field
plot_field = streamslice(x,y,z,Bx,By,Bz,0.02,0.02,0);
set(plot_field,'Color','black','LineWidth',2);

% Electric field
hold on;
quiver3(x_el,y_el,z_el,Ex,Ey,Ez,1,'r');
hold off;

% Plot of discharge chamber
[x_ch, y_ch, z_ch] = cylinder(0.4,40);
z_ch(1,:) = -0.2;
z_ch(2,:) = 0.2;

hold on;
plot_ch = surf(x_ch,y_ch,z_ch);
hold off;
set(plot_ch,...
    'LineWidth',1,...
    'FaceAlpha',0.5,...
    'EdgeColor','black',...
    'EdgeAlpha',0.6,...
    'DiffuseStrength',1,...
    'AmbientStrength',1);

此代码生成以下内容,

磁力线切片图

问题

我想以不同程度的斜率创建磁场的流片(假设45),所以我不仅可以看到磁场在与磁偶极子相交时的样子,而且在其他位置也是如此。这对于研究粒子运动非常有用。

1个回答

streamslice可以使用非平面或任意角度绘制切片。您可以使用rotate命令来旋转切片平面。您的plot_field对象可以通过添加几行来修改

slicing = surf(linspace(-1,1,10),linspace(-1,1,10),zeros(10));
% third input: rotating angle
% second input: the vector to which you are rotating your data with respect
rotate(slicing,[0,0,0],45);
xs = get(slicing,'XData');
ys = get(slicing,'YData');
zs = get(slicing,'ZData');
plot_field = streamslice(x,y,z,Bx,By,Bz,xs,ys,zs);

也是contourslice我自己最喜欢的另一个可视化电磁场: http: //www.mathworks.com/help/matlab/ref/contourslice.html


如果您知道如何使用 VTK,则可以使用以下方法将 3D 矢量数据导出到 vtk 文件: http: //www.mathworks.com/matlabcentral/fileexchange/34310-matlab-3d-vectors-to-paraview-via-二进制 vtk 文件

然后你可以使用 Paraview 之类的软件来可视化你喜欢的矢量场,例如,在45像你说的盒子的度数(我使用了我自己的数据,来自带有腔麦克斯韦 pde 的电介质):

片