function field_focus_plot(W, Qt, myaxes, lambda, ua, uc) h = linspace(myaxes(3),myaxes(4),200)/uc; hsq = h.*h; Qsq = (4/9)*W(1)^2 + hsq.*((2/3)*(W(2))^2 + hsq.*(1/2)*W(3)^2); A = (4/3)*W(1)+hsq*(W(4)+0.5*W(3)); eps = lambda/ua; Qtsq = (Qt/(eps))^2; radical = (Qtsq-Qsq)/2; idx = find(radical>=0); zeta = 2*lambda/ua^2; x = sqrt(radical(idx)); y = h(idx); m = length(x); Am = -A(idx); xp = Am-x; xp(m+(1:m)) = fliplr(Am + x); yp = y; yp(m+(1:m)) = fliplr(y); plot(xp*zeta,yp*uc,'--k'); hold on; plot(Am*zeta,y*uc,'k'); hold off; axis(myaxes); xlabel('focal shift (mm)'); ylabel('image height (deg)');
function rgb = field_focus(W, Qt, myaxes, lambda, ua, uc) N=256; h = linspace(myaxes(3),myaxes(4),N)/uc; zeta = 2*lambda/ua^2; A = linspace(myaxes(1),myaxes(2),N)/zeta; k = ones(N,1); hsq = h.*h; Qsq = (4/9)*W(1)^2 + hsq.*((2/3)*(W(2))^2 + hsq.*(1/2)*W(3)^2); Am = (4/3)*W(1)+hsq*(W(4)+0.5*W(3)); out = (k*Qsq)'+2.0*(k*A+(k*Am)').^2; eps = lambda/ua; Qtsq = (Qt/(eps))^2; out = flipud(out/Qtsq); m = out<1; b = zeros(size(out)); out = m-m.*out; rgb = cat(3,out,out,1-m); imshow(rgb);
>> W = [ 1 2 5 4 ]; >> ua = 0.05; >> uc = 10; >> lambda = 0.55e-3; >> et = 25e-3; >> myaxes = [ -2.5 0.5 0 8 ]; >> field_focus_plot(W, et, myaxes, lambda, ua, uc); >> out = field_focus(W, et, myaxes, lambda, ua, uc); >> imwrite(out,'field_focus.tif');
Maintained by John Loomis, last updated 28 Nov 2001