MATLAB代码实现射线追踪的快速方法
if zFS(i1)==zJS(i2)
if mod(zFS(i1),dz) == 0
if zFS(i1) == ymax
dr(n,nx*floor(abs(zFS(i1)-1e-6)/dz)+1:nx*(ceil(abs(zFS(i1)-1e-6)/dz)))=delta/nx;
else
dr(n,nx*floor(abs(zFS(i1)+1e-6)/dz)+1:nx*(ceil(abs(zFS(i1)+1e-6)/dz)))=delta/nx;
end
else
dr(n,nx*floor(abs(zFS(i1))/dz)+1:nx*(ceil(abs(zFS(i1))/dz))) = delta/nx;
end
else
clear fx fy fyh fyv dr0 fxm fym fymz fxmz fiexy
fyh = ceil(min(zFS(i1),zJS(i2))/dz)*dz:dz:floor(max(zFS(i1),zJS(i2))/dz)*dz;
fyv = min(zFS(i1),zJS(i2)):abs(zFS(i1)-zJS(i2))/nx:max(zFS(i1),zJS(i2));
fy = [fyh,fyv];
fy = unique(fy);
fx = (fy-b)/k;
dr0 = sqrt( (fy(1:end-1)-fy(2:end)).^2 +...
(fx(1:end-1)-fx(2:end)).^2 );
fxm = 0.5*( fx(1:end-1) + fx(2:end) );
fym = 0.5*( fy(1:end-1) + fy(2:end) );
fymz = ceil(abs(fym)/dz);
fxmz = floor(abs(fxm)/dx);
fiexy = nz*fxmz + fymz;
dr(n,fiexy) = dr0;