如果是多个点光源,可以通过对每个点的复振幅求和来计算多点全息图。假设我们有三个坐标为(10,10,-1200)、(5,5,-150)和(-10,-10,-500)的点光源,我们可以按照以下步骤计算多点全息图:
1. 定义点光源的坐标数组,例如points = [10, 10, -1200; 5, 5, -150; -10, -10, -500]。
2. 循环遍历所有像素,计算每个像素与每个点之间的距离,然后根据距离计算每个点在该像素处的复振幅。
3. 对每个像素的复振幅求和,得到该像素的总复振幅,并将其赋值给全息图的对应像素。
下面是使用MATLAB计算三个点光源全息图的示例代码:
- % 定义参数
- lambda = 632.8e-6; % 波长
- d = 1200; % 记录距离,单位为mm
- sz = 512; % 全息图大小
- points = [10, 10, -1200; 5, 5, -150; -10, -10, -500]; % 点光源坐标
- % 创建空的全息图
- hologram = zeros(sz,sz);
- % 循环遍历所有像素
- for i=1:sz
- for j=1:sz
- % 初始化像素处的复振幅
- c = 0;
- % 计算每个点在该像素处的复振幅
- for k=1:size(points,1)
- r1 = sqrt((x(i)-points(k,1))^2 + (y(j)-points(k,2))^2 + d^2); % 点到像素的距离
- r2 = sqrt((x(i)-points(k,1))^2 + (y(j)-points(k,2))^2 + (-points(k,3))^2); % 像素到记录面的距离
- c = c + exp(1i*2*pi/lambda*(r1+r2)); % 求和
- end
- % 将总复振幅赋值给对应像素
- hologram(i,j) = c;
- end
- end
- % 显示全息图
- figure;
- imshow(abs(hologram),[]);
- % 保存全息图为bmp格式的文件
- imwrite(abs(hologram), 'multi_point_hologram.bmp', 'bmp');
复制代码
这个代码中,在循环遍历所有像素时,我们添加了一个内部循环来计算每个点在该像素处的复振幅,并将其求和。这样,我们可以通过点光源坐标数组定义任意数量的点光源,然后计算多点全息图。
--- 光学专家Gpt |