⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 object_drawing_functions.m

📁 this a 3d fdtd code using matlab and it can be used as a reference for other structures. Dear sir,
💻 M
📖 第 1 页 / 共 3 页
字号:
    vx = 0.5*(ix+ax); vy = iy; vz = 0.5*(iz+az);
    ir = len/20;
    [v1, f1] = a_line([vx vx], [iy iy+0.4*len], [vz vz], ir);
    [v2, f2] = a_line([vx vx], [iy+0.6*len ay], [vz vz], ir);
    [v3, f3] = a_line([vx vx], [iy+0.4*len iy+0.42*len], [vz vz], 4*ir);
    [v4, f4] = a_line([vx vx], [iy+0.58*len iy+0.6*len], [vz vz], 4*ir);
case ('z')
    len = az - iz;
    vy = 0.5*(iy+ay); vx = 0.5*(ix+ax); vz = iz;
    ir = len/20;
    [v1, f1] = a_line([vx vx], [vy vy], [iz iz+0.4*len], ir);
    [v2, f2] = a_line([vx vx], [vy vy], [iz+0.6*len az], ir);
    [v3, f3] = a_line([vx vx], [vy vy], [iz+0.4*len iz+0.42*len], 4*ir);
    [v4, f4] = a_line([vx vx], [vy vy], [iz+0.58*len iz+0.6*len], 4*ir);
end
v = [v1; v2; v3; v4];
f = f1;
f = [f; max(max(f)) + f2];
f = [f; max(max(f)) + f3];
f = [f; max(max(f)) + f4];
patch('Vertices',v,'Faces',f,'facecolor','r', ...
    'facealpha',1,'edgecolor','none');

% draw boundaries
v = [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 0 1; 1 0 1; 1 1 1; 0 1 1];
vx = v(:,1) * (ax - ix) + ix;
vy = v(:,2) * (ay - iy) + iy;
vz = v(:,3) * (az - iz) + iz;
f = [1 2 6 5; 2 3 7 6; 3 4 8 7; 4 1 5 8; 1 2 3 4; 5 6 7 8];
patch('Vertices',[vx vy vz],'Faces',f,'facecolor','none','LineWidth',1, ...
    'facealpha',0.3,'edgecolor','r','linestyle','-');

% show label
text(ix,iy,iz,obj.obj_id,'VerticalAlignment','bottom', ...
    'BackgroundColor','w','edgecolor','r','fontsize',12);

%===================================================================
function draw_an_inductor(obj)

ix = obj.min_x; iy = obj.min_y; iz = obj.min_z; 
ax = obj.max_x; ay = obj.max_y; az = obj.max_z;

t = 0.05 * ones(1,41);
[X,Y,Z] = cylinder(t,18);
t = 0.2*abs(sin(2*pi*[0:22]/22));
for mi = 1:23 
    X(mi+8,:) = X(mi+8,:) + t(mi);
end

switch (obj.direction)
case ('x')
    len = ax - ix;
    vx = ix; vy = 0.5*(iy+ay); vz = 0.5*(iz+az);
    X = X*len; Y = Y*len; Z = Z*len;    
    if ((az-iz)<(ay-iy)) 
        [f,v] = surf2patch(Z+vx,X+vy,Y+vz,Z);       
    else
        [f,v] = surf2patch(Z+vx,Y+vy,X+vz,Z);       
    end
case ('y')
    len = ay - iy;
    vx = 0.5*(ix+ax); vy = iy; vz = 0.5*(iz+az);
    X = X*len; Y = Y*len; Z = Z*len;    
    if ((ax-ix)<(az-iz))
        [f,v] = surf2patch(Y+vx,Z+vy,X+vz,Z);       
    else
        [f,v] = surf2patch(X+vx,Z+vy,Y+vz,Z);       
    end
case ('z')
    len = az - iz;
    vy = 0.5*(iy+ay); vx = 0.5*(ix+ax); vz = iz;
    X = X*len; Y = Y*len; Z = Z*len;    
    if ((ax-ix)<(ay-iy)) 
        [f,v] = surf2patch(Y+vx,X+vy,Z+vz,Z);       
    else
        [f,v] = surf2patch(X+vx,Y+vy,Z+vz,Z);       
    end
end
patch('Vertices',v,'Faces',f,'facecolor','b', ...
    'facealpha',1,'edgecolor','none');

% draw boundaries
v = [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 0 1; 1 0 1; 1 1 1; 0 1 1];
vx = v(:,1) * (ax - ix) + ix;
vy = v(:,2) * (ay - iy) + iy;
vz = v(:,3) * (az - iz) + iz;
f = [1 2 6 5; 2 3 7 6; 3 4 8 7; 4 1 5 8; 1 2 3 4; 5 6 7 8];
patch('Vertices',[vx vy vz],'Faces',f,'facecolor','none','LineWidth',1, ...
    'facealpha',0.3,'edgecolor','b','linestyle','-');

% show label
text(ix,iy,iz,obj.obj_id,'VerticalAlignment','bottom', ...
    'BackgroundColor','w','edgecolor','b','fontsize',12);

%===================================================================
function draw_a_thin_wire(obj)

ix = obj.min_x; iy = obj.min_y; iz = obj.min_z; 
ax = obj.max_x; ay = obj.max_y; az = obj.max_z;

ir = obj.radius;
switch (obj.direction)
    case 'x'
        [v, f] = a_line([ix ax],[iy iy],[iz iz],ir);
    case 'y'
        [v, f] = a_line([ix ix],[iy ay],[iz iz],ir);
    case 'z'
        [v, f] = a_line([ix ix],[iy iy],[iz az],ir);
end
patch('Vertices',v,'Faces',f,'facecolor','r', ...
    'facealpha',1,'edgecolor','none');

% show label
text(ix,iy,iz,obj.obj_id,'VerticalAlignment','bottom', ...
    'BackgroundColor','w','edgecolor','r','fontsize',12);

%===================================================================
function draw_a_sampled_electric_field(obj)

ix = obj.x; iy = obj.y; iz = obj.z; 
dx = obj.dx; dy = obj.dy; dz = obj.dz;

ir = max([dx dy dz])/5;

[v1, f1] = a_line([ix ix],[iy iy],[iz-2*ir iz+2*ir],ir/2);
[v2, f2] = a_line([ix ix+2*ir],[iy iy],[iz-2*ir iz-2*ir],ir/2);
[v3, f3] = a_line([ix ix+2*ir],[iy iy],[iz iz],ir/2);
[v4, f4] = a_line([ix ix+2*ir],[iy iy],[iz+2*ir iz+2*ir],ir/2);

v = [v1; v2; v3; v4];
f = f1;
f = [f; max(max(f)) + f2];
f = [f; max(max(f)) + f3];
f = [f; max(max(f)) + f4];

patch('Vertices',v,'Faces',f,'facecolor','r', ...
    'facealpha',1,'edgecolor','none');

% show label
text(ix,iy,iz,obj.obj_id,'VerticalAlignment','bottom', ...
    'BackgroundColor','w','edgecolor','r','fontsize',12);

%===================================================================
function draw_a_sampled_magnetic_field(obj)

ix = obj.x; iy = obj.y; iz = obj.z; 
dx = obj.dx; dy = obj.dy; dz = obj.dz;

ir = max([dx dy dz])/5;

[v1, f1] = a_line([ix ix],[iy iy],[iz-2*ir iz+2*ir],ir/2);
[v2, f2] = a_line([ix+2*ir ix+2*ir],[iy iy],[iz-2*ir iz+2*ir],ir/2);
[v3, f3] = a_line([ix ix+2*ir],[iy iy],[iz iz],ir/2);

v = [v1; v2; v3];
f = f1;
f = [f; max(max(f)) + f2];
f = [f; max(max(f)) + f3];

patch('Vertices',v,'Faces',f,'facecolor','b', ...
    'facealpha',1,'edgecolor','none');

% show label
text(ix,iy,iz,obj.obj_id,'VerticalAlignment','bottom', ...
    'BackgroundColor','w','edgecolor','b','fontsize',12);

%===================================================================
function draw_a_diode(obj)

ix = obj.min_x; iy = obj.min_y; iz = obj.min_z; 
ax = obj.max_x; ay = obj.max_y; az = obj.max_z;

t = 0.1 * ones(1,11);
[X,Y,Z] = cylinder(t,18);
X(5,:) = X(5,:) + 0.2;
X(7,:) = X(7,:) - 0.2;

switch (obj.direction)
case ('xn')
    len = ax - ix;
    vx = ix; vy = 0.5*(iy+ay); vz = 0.5*(iz+az);
    ir = len/20;
    [v1, f1] = a_line([ix ax], [vy vy], [vz vz], ir);
    [v2, f2] = a_vector([ax ix+len*0.25], [vy vy], [vz vz], ir, 4*ir, 0.5);
    [v3, f3] = a_line([ix+0.34*len ix+0.36*len], [vy vy], [vz vz], 4*ir);
case ('xp')
    len = ax - ix;
    vx = ix; vy = 0.5*(iy+ay); vz = 0.5*(iz+az);
    ir = len/20;
    [v1, f1] = a_line([ix ax], [vy vy], [vz vz], ir);
    [v2, f2] = a_vector([ix ax-len*0.25], [vy vy], [vz vz], ir, 4*ir, 0.5);
    [v3, f3] = a_line([ix+0.64*len ix+0.66*len], [vy vy], [vz vz], 4*ir);
case ('yn')
    len = ay - iy;
    vx = 0.5*(ix+ax); vy = iy; vz = 0.5*(iz+az);
    ir = len/20;
    [v1, f1] = a_line([vx vx], [iy ay], [vz vz], ir);
    [v2, f2] = a_vector([vx vx], [ay iy+len*0.25], [vz vz], ir, 4*ir, 0.5);
    [v3, f3] = a_line([vx vx], [iy+0.34*len iy+0.36*len], [vz vz], 4*ir);
case ('yp')
    len = ay - iy;
    vx = 0.5*(ix+ax); vy = iy; vz = 0.5*(iz+az);
    ir = len/20;
    [v1, f1] = a_line([vx vx], [iy ay], [vz vz], ir);
    [v2, f2] = a_vector([vx vx], [iy ay-len*0.25], [vz vz], ir, 4*ir, 0.5);
    [v3, f3] = a_line([vx vx], [iy+0.64*len iy+0.66*len], [vz vz], 4*ir);
case ('zn')
    len = az - iz;
    vy = 0.5*(iy+ay); vx = 0.5*(ix+ax); vz = iz;
    ir = len/20;
    [v1, f1] = a_line([vx vx], [vy vy], [iz az], ir);
    [v2, f2] = a_vector([vx vx], [vy vy], [az iz+len*0.25], ir, 4*ir, 0.5);
    [v3, f3] = a_line([vx vx], [vy vy], [iz+0.34*len iz+0.36*len], 4*ir);
case ('zp')
    len = az - iz;
    vy = 0.5*(iy+ay); vx = 0.5*(ix+ax); vz = iz;
    ir = len/20;
    [v1, f1] = a_line([vx vx], [vy vy], [iz az], ir);
    [v2, f2] = a_vector([vx vx], [vy vy], [iz az-len*0.25], ir, 4*ir, 0.5);
    [v3, f3] = a_line([vx vx], [vy vy], [iz+0.64*len iz+0.66*len], 4*ir);
end
v = [v1; v2; v3];
f = f1;
f = [f; max(max(f)) + f2];
f = [f; max(max(f)) + f3];
col = [0.5 0.5 0.5];
patch('Vertices',v,'Faces',f,'facecolor',col, ...
    'facealpha',1,'edgecolor','none');

% draw boundaries
v = [0 0 0; 1 0 0; 1 1 0; 0 1 0; 0 0 1; 1 0 1; 1 1 1; 0 1 1];
vx = v(:,1) * (ax - ix) + ix;
vy = v(:,2) * (ay - iy) + iy;
vz = v(:,3) * (az - iz) + iz;
f = [1 2 6 5; 2 3 7 6; 3 4 8 7; 4 1 5 8; 1 2 3 4; 5 6 7 8];
patch('Vertices',[vx vy vz],'Faces',f,'facecolor','none','LineWidth',1, ...
    'facealpha',0.3,'edgecolor',col,'linestyle','-');

% show label
text(ix,iy,iz,obj.obj_id,'VerticalAlignment','bottom', ...
    'BackgroundColor','w','edgecolor',col,'fontsize',12);

%===================================================================
function draw_a_sampled_voltage(obj)

ix = obj.min_x; iy = obj.min_y; iz = obj.min_z; 
ax = obj.max_x; ay = obj.max_y; az = obj.max_z;

switch (obj.direction)
case ('xn')
    len = ax - ix;
    ir = len/20;
    if ((az-iz)<(ay-iy)) dn = 'z'; else dn = 'y'; end
    cx = (ix+ax)/2; cy = (iy+ay)/2; cz = (iz+az)/2;
    [v1, f1] = a_plus(ix, iy, iz, len/5, dn, ir);
    [v2, f2] = a_plus(ix, iy, az, len/5, dn, ir);
    [v3, f3] = a_plus(ix, ay, iz, len/5, dn, ir);
    [v4, f4] = a_plus(ix, ay, az, len/5, dn, ir);
    [v6, f6] = a_minus(ax, iy, iz, len/5, dn, ir, 'x');
    [v7, f7] = a_minus(ax, iy, az, len/5, dn, ir, 'x');
    [v8, f8] = a_minus(ax, ay, iz, len/5, dn, ir, 'x');
    [v9, f9] = a_minus(ax, ay, az, len/5, dn, ir, 'x');
case ('xp')
    len = ax - ix;
    ir = len/20;
    if ((az-iz)<(ay-iy)) dn = 'z'; else dn = 'y'; end
    cx = (ix+ax)/2; cy = (iy+ay)/2; cz = (iz+az)/2;
    [v1, f1] = a_plus(ax, iy, iz, len/5, dn, ir);
    [v2, f2] = a_plus(ax, iy, az, len/5, dn, ir);
    [v3, f3] = a_plus(ax, ay, iz, len/5, dn, ir);
    [v4, f4] = a_plus(ax, ay, az, len/5, dn, ir);
    [v6, f6] = a_minus(ix, iy, iz, len/5, dn, ir, 'x');
    [v7, f7] = a_minus(ix, iy, az, len/5, dn, ir, 'x');
    [v8, f8] = a_minus(ix, ay, iz, len/5, dn, ir, 'x');
    [v9, f9] = a_minus(ix, ay, az, len/5, dn, ir, 'x');
case ('yn')
    len = ay - iy;
    ir = len/20;
    if ((ax-ix)<(az-iz)) dn = 'x'; else dn = 'z'; end
    cx = (ix+ax)/2; cy = (iy+ay)/2; cz = (iz+az)/2;
    [v1, f1] = a_plus(ix, iy, iz, len/5, dn, ir);
    [v2, f2] = a_plus(ix, iy, az, len/5, dn, ir);
    [v3, f3] = a_plus(ax, iy, iz, len/5, dn, ir);
    [v4, f4] = a_plus(ax, iy, az, len/5, dn, ir);
    [v6, f6] = a_minus(ix, ay, iz, len/5, dn, ir, 'y');
    [v7, f7] = a_minus(ix, ay, az, len/5, dn, ir, 'y');
    [v8, f8] = a_minus(ax, ay, iz, len/5, dn, ir, 'y');
    [v9, f9] = a_minus(ax, ay, az, len/5, dn, ir, 'y');
case ('yp')
    len = ay - iy;
    ir = len/20;
    if ((ax-ix)<(az-iz)) dn = 'x'; else dn = 'z'; end
    cx = (ix+ax)/2; cy = (iy+ay)/2; cz = (iz+az)/2;
    [v1, f1] = a_plus(ix, ay, iz, len/5, dn, ir);
    [v2, f2] = a_plus(ix, ay, az, len/5, dn, ir);
    [v3, f3] = a_plus(ax, ay, iz, len/5, dn, ir);
    [v4, f4] = a_plus(ax, ay, az, len/5, dn, ir);
    [v6, f6] = a_minus(ix, iy, iz, len/5, dn, ir, 'y');
    [v7, f7] = a_minus(ix, iy, az, len/5, dn, ir, 'y');
    [v8, f8] = a_minus(ax, iy, iz, len/5, dn, ir, 'y');
    [v9, f9] = a_minus(ax, iy, az, len/5, dn, ir, 'y');
case ('zn')
    len = az - iz;
    ir = len/20;
    if ((ax-ix)<(ay-iy)) dn = 'x'; else dn = 'y'; end
    cx = (ix+ax)/2; cy = (iy+ay)/2; cz = (iz+az)/2;
    [v1, f1] = a_plus(ix, iy, iz, len/5, dn, ir);
    [v2, f2] = a_plus(ix, ay, iz, len/5, dn, ir);
    [v3, f3] = a_plus(ax, iy, iz, len/5, dn, ir);
    [v4, f4] = a_plus(ax, ay, iz, len/5, dn, ir);
    [v6, f6] = a_minus(ix, iy, az, len/5, dn, ir, 'z');
    [v7, f7] = a_minus(ix, ay, az, len/5, dn, ir, 'z');
    [v8, f8] = a_minus(ax, iy, az, len/5, dn, ir, 'z');
    [v9, f9] = a_minus(ax, ay, az, len/5, dn, ir, 'z');
case ('zp')
    len = az - iz;
    ir = len/20;
    if ((ax-ix)<(ay-iy)) dn = 'x'; else dn = 'y'; end
    cx = (ix+ax)/2; cy = (iy+ay)/2; cz = (iz+az)/2;
    [v1, f1] = a_plus(ix, iy, az, len/5, dn, ir);
    [v2, f2] = a_plus(ix, ay, az, len/5, dn, ir);
    [v3, f3] = a_plus(ax, iy, az, len/5, dn, ir);
    [v4, f4] = a_plus(ax, ay, az, len/5, dn, ir);
    [v6, f6] = a_minus(ix, iy, iz, len/5, dn, ir, 'z');
    [v7, f7] = a_minus(ix, ay, iz, len/5, dn, ir, 'z');
    [v8, f8] = a_minus(ax, iy, iz, len/5, dn, ir, 'z');
    [v9, f9] = a_minus(ax, ay, iz, len/5, dn, ir, 'z');
end
v = [v1; v2; v3; v4; v6; v7; v8; v9];
f = f1;
f = [f; max(max(f)) + f2];
f = [f; max(max(f)) + f3];
f = [f; max(max(f)) + f4];
f = [f; max(max(f)) + f6];
f = [f; max(max(f)) + f7];
f = [f; max(max(f)) + f8];
f = [f; max(max(f)) + f9];
patch('Vertices',v,'Faces',f,'facecolor','c', ...
    'facealpha',1,'edgecolor','none');

% draw boundaries

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -