xlabel font ejemplo matlab graphics physics matlab-figure

font - malla de espiral en matlab



xlabel matlab (2)

Estoy tratando de producir algunos hologramas generados por computadora usando MATLAB. Utilicé una cuadrícula de malla igualmente espaciada para inicializar la cuadrícula espacial, y obtuve la siguiente imagen

Este patrón es una especie de lo que necesito, excepto la región central. La franja debe ser nítida pero borrosa. Creo que podría ser el problema de la malla de malla. Intenté generar una grilla en coordenadas polares y el mapa en coordenadas cartesianas usando la función pol2cart de MATLAB. Desafortunadamente, no funciona tan bien. Uno puede sugerir que usando cuadrículas finas. No funciona también Creo que si puedo generar una malla de malla espiral, quizás el problema se pueda resolver. Además, el número de brazos espirales podría, en general, ser arbitrario, ¿alguien podría darme una pista sobre esto?

Adjunté el código (Mis proyectos finales no son exactamente iguales, pero tiene un problema similar).

clc; clear all; close all; %% initialization tic lambda = 1.55e-6; k0 = 2*pi/lambda; c0 = 3e8; eta0 = 377; scale = 0.25e-6; NELEMENTS = 1600; GoldenRatio = (1+sqrt(5))/2; g = 2*pi*(1-1/GoldenRatio); pntsrc = zeros(NELEMENTS, 3); phisrc = zeros(NELEMENTS, 1); for idxe = 1:NELEMENTS pntsrc(idxe, :) = scale*sqrt(idxe)*[cos(idxe*g), sin(idxe*g), 0]; phisrc(idxe) = angle(-sin(idxe*g)+1i*cos(idxe*g)); end phisrc = 3*phisrc/2; % 3 arms (topological charge ell=3) %% post processing sigma = 1; polfilter = [0, 0, 1i*sigma; 0, 0, -1; -1i*sigma, 1, 0]; % cp filter xboundl = -100e-6; xboundu = 100e-6; yboundl = -100e-6; yboundu = 100e-6; xf = linspace(xboundl, xboundu, 100); yf = linspace(yboundl, yboundu, 100); zf = -400e-6; [pntobsx, pntobsy] = meshgrid(xf, yf); % how to generate a right mesh grid such that we can generate a decent result? pntobs = [pntobsx(:), pntobsy(:), zf*ones(size(pntobsx(:)))]; % arbitrary mesh may result in "wrong" results NPNTOBS = size(pntobs, 1); nxp = length(xf); nyp = length(yf); %% observation Eobs = zeros(NPNTOBS, 3); matlabpool open local 12 parfor nobs = 1:NPNTOBS rp = pntobs(nobs, :); Erad = [0; 0; 0]; for idx = 1:NELEMENTS rs = pntsrc(idx, :); p = exp(sigma*1i*2*phisrc(idx))*[1 -sigma*1i 0]/2; % simplified here u = rp - rs; r = sqrt(u(1)^2+u(2)^2+u(3)^2); %norm(u); u = u/r; % unit vector ut = [u(2)*p(3)-u(3)*p(2),... u(3)*p(1)-u(1)*p(3), ... u(1)*p(2)-u(2)*p(1)]; % cross product: u cross p Erad = Erad + ... % u cross p cross u, do not use the built-in func c0*k0^2/4/pi*exp(1i*k0*r)/r*eta0*... [ut(2)*u(3)-ut(3)*u(2);... ut(3)*u(1)-ut(1)*u(3); ... ut(1)*u(2)-ut(2)*u(1)]; end Eobs(nobs, :) = Erad; % filter neglected here end matlabpool close Eobs = Eobs/max(max(sum(abs(Eobs), 2))); % normailized %% source, gaussian beam E0 = 1; w0 = 80e-6; theta = 0; % may be titled RotateX = [1, 0, 0; ... 0, cosd(theta), -sind(theta); ... 0, sind(theta), cosd(theta)]; Esrc = zeros(NPNTOBS, 3); for nobs = 1:NPNTOBS rp = RotateX*[pntobs(nobs, 1:2).''; 0]; z = rp(3); r = sqrt(sum(abs(rp(1:2)).^2)); zR = pi*w0^2/lambda; wz = w0*sqrt(1+z^2/zR^2); Rz = z^2+zR^2; zetaz = atan(z/zR); gaussian = E0*w0/wz*exp(-r^2/wz^2-1i*k0*z-1i*k0*0*r^2/Rz/2+1i*zetaz);% ... Esrc(nobs, :) = (polfilter*gaussian*[1; -1i; 0]).''/sqrt(2)/2; end Esrc = [Esrc(:, 2), Esrc(:, 3), Esrc(:, 1)]; Esrc = Esrc/max(max(sum(abs(Esrc), 2))); % normailized toc %% visualization fringe = Eobs + Esrc; % I''ll have a different formula in my code normEsrc = reshape(sum(abs(Esrc).^2, 2), [nyp nxp]); normEobs = reshape(sum(abs(Eobs).^2, 2), [nyp nxp]); normFringe = reshape(sum(abs(fringe).^2, 2), [nyp nxp]); close all; xf0 = linspace(xboundl, xboundu, 500); yf0 = linspace(yboundl, yboundu, 500); [xfi, yfi] = meshgrid(xf0, yf0); data = interp2(xf, yf, normFringe, xfi, yfi); figure; surf(xfi, yfi, data,''edgecolor'',''none''); % tri = delaunay(xfi, yfi); trisurf(tri, xfi, yfi, data, ''edgecolor'',''none''); xlim([xboundl, xboundu]) ylim([yboundl, yboundu]) % colorbar view(0,90) colormap(hot) axis equal axis off title(''fringe thereo. '', ... ''fontsize'', 18)


Lo siento, no puedo publicar figuras. Pero esto podría ayudar. Lo escribí para experimentos con moduladores espaciales de amplitud ...

R=70; % radius of curvature of fresnel lens (in pixel units) A=0; % oblique incidence by linear grating (1=oblique 0=collinear) B=1; % expanding by fresnel lens (1=yes 0=no) L=7; % topological charge Lambda=30; % linear grating fringe spacing (in pixels) aspect=1/2; % fraction of fringe period that is white/clear xsize=1024; % resolution (xres x yres number data pts calculated) ysize=768; % % define the X and Y ranges (defined to skip zero) xvec = linspace(-xsize/2, xsize/2, xsize); % list of x values yvec = linspace(-ysize/2, ysize/2, ysize); % list of y values % define the meshes - matrices linear in one dimension [xmesh, ymesh] = meshgrid(xvec, yvec); % calculate the individual phase components vortexPh = atan2(ymesh,xmesh); % the vortex phase linPh = -2*pi*ymesh; % a phase of linear grating radialPh = (xmesh.^2+ymesh.^2); % a phase of defocus % combine the phases with appropriate scales (phases are additive) % the ''pi'' at the end causes inversion of the pattern Ph = L*vortexPh + A*linPh/Lambda + B*radialPh/R^2; % transmittance function (the real part of exp(I*Ph)) T = cos(Ph); % the binary version binT = T > cos(pi*aspect); % plot the pattern % imagesc(binT) imagesc(T) colormap(gray)


No leí tu código porque es demasiado largo para hacer algo tan simple. Yo escribí el mío y aquí está el resultado:

el código es

%spiral.m function val = spiral(x,y) r = sqrt( x*x + y*y); a = atan2(y,x)*2+r; x = r*cos(a); y = r*sin(a); val = exp(-x*x*y*y); val = 1/(1+exp(-1000*(val))); endfunction %show.m n=300; l = 7; A = zeros(n); for i=1:n for j=1:n A(i,j) = spiral( 2*(i/n-0.5)*l,2*(j/n-0.5)*l); end end imshow(A) %don''t know if imshow is in matlab. I used octave.

la clave para el sharpnes es línea

val = 1/(1+exp(-1000*(val)));

Es una función logística . El número 1000 define qué tan nítida será su imagen. Así que bájelo para una imagen más borrosa o más alta para más nítida.

Espero que esto responda tu pregunta ;)

Editar: es muy divertido jugar con él. Aquí hay otra espiral:

function val = spiral(x,y) s= 0.5; r = sqrt( x*x + y*y); a = atan2(y,x)*2+r*r*r; x = r*cos(a); y = r*sin(a); val = 0; if (abs(x)<s ) val = s-abs(x); endif if(abs(y)<s) val =max(s-abs(y),val); endif %val = 1/(1+exp(-1*(val))); endfunction

Edit2: ¡Diversión, diversión, diversión! Aquí los brazos no se vuelven más delgados.

function val = spiral(x,y) s= 0.1; r = sqrt( x*x + y*y); a = atan2(y,x)*2+r*r; % h x = r*cos(a); y = r*sin(a); val = 0; s = s*exp(r); if (abs(x)<s ) val = s-abs(x); endif if(abs(y)<s) val =max(s-abs(y),val); endif val = val/s; val = 1/(1+exp(-10*(val))); endfunction

¡Maldita sea tu pregunta, realmente necesito estudiar para mi examen, arghhh!

Edit3:

Vectoricé el código y funciona mucho más rápido.

%spiral.m function val = spiral(x,y) s= 2; r = sqrt( x.*x + y.*y); a = atan2(y,x)*8+exp(r); x = r.*cos(a); y = r.*sin(a); val = 0; s = s.*exp(-0.1*r); val = r; val = (abs(x)<s ).*(s-abs(x)); val = val./s; % val = 1./(1.+exp(-1*(val))); endfunction %show.m n=1000; l = 3; A = zeros(n); [X,Y] = meshgrid(-l:2*l/n:l); A = spiral(X,Y); imshow(A)