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

📄 expand_quad_trans.m

📁 利用电磁场的源激发方法来计算光子晶体波导例如光子晶体光纤
💻 M
字号:
function out = expand_quad_trans(inX, inY, sComp, class)
[rows, cols] = size(inX);
[mR, mC] = ndgrid(1:rows, 1:cols);
mB_small = mR > ceil(tan(pi/3)*mC);
mB_big = mR > ceil(tan(pi/3)*1.3*mC);
mask = ones(size(inX));
inX(mB_big) = 0;
mask(mB_small) = 0;
inX = inX(end:-1:1,:);
mask = mask(end:-1:1,:);
inXFirst = zeros(2*size(inX));
inXFirst(1:rows, cols+1:end) = inX;
maskFirst = zeros(2*size(mask));
maskFirst(1:rows, cols+1:end) = mask;
inY(mB_big) = 0;
inY = inY(end:-1:1,:);
inYFirst = zeros(2*size(inX));
inYFirst(1:rows, cols+1:end) = inY;
bX = lower(sComp(2)) == 'x';
out = inXFirst*bX + inYFirst*(~bX);
out = out.*maskFirst;
vGreen = green_fun_vector(class);
maskPrev = maskFirst;
for ind = 1:5
    mask = imrotate(maskFirst, 60*ind, 'nearest', 'crop');
    mask = mask & ~maskPrev & ~maskFirst;
    maskPrev = mask;
    imRotX = imrotate(inXFirst, 60*ind, 'nearest', 'crop')*vGreen(ind+1);
    imRotY = imrotate(inYFirst, 60*ind, 'nearest', 'crop')*vGreen(ind+1);
    if bX
        imRot = imRotX*cos(ind*pi/3) - imRotY*sin(ind*pi/3);
    else
        imRot = imRotY*cos(ind*pi/3) + imRotX*sin(ind*pi/3);
    end
    %mAvg = (imRot ~= 0) & (out ~= 0);
    out = out + imRot.*mask;
    %out = out./(mAvg+1);
end
out = conv2(out, ones(3), 'same');
out = out(end:-1:1,:);
return

⌨️ 快捷键说明

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