matlab模拟单光线被三棱镜多次折射反射
时间: 2025-03-01 16:50:34 浏览: 21
使用 Matlab 进行三棱镜中的光线折射和反射仿真
创建三棱镜模型
为了实现这一目标,首先需要定义三棱镜的几何形状以及材料属性。通常情况下,可以假设一个等边三角形作为三棱镜的基本结构。
% 定义三棱镜参数
n_prism = 1.5; % 假设三棱镜材质为玻璃, 折射率为1.5 [^3]
angle_A = deg2rad(60); % 等边三角形顶角角度转换成弧度制
设置入射光线条件
接下来设置入射光线的方向向量和平面法线方向之间的夹角θi(即入射角),并考虑白光中不同颜色对应的波长范围。
lambda_min = 400e-9; lambda_max = 700e-9; N_lambda = 10;
wavelengths = linspace(lambda_min, lambda_max, N_lambda);
theta_i = deg2rad([30]); % 设定初始入射角为30°
计算折射角与反射角
利用斯涅尔定律计算每种波长下的折射角θt,并判断是否存在全内反射情况。对于每次折射事件都更新新的传播方向。
for i=1:N_lambda
n_air = 1; % 空气的折射率近似等于1
sin_theta_t(i) = (n_air / n_prism)*sin(theta_i);
theta_t(i)=asin(sin_theta_t(i));
if isnan(theta_t(i)) || isinf(theta_t(i))
disp(['Warning: Total internal reflection occurs at wavelength ', num2str(wavelengths(i)*1e9), ' nm']);
continue;
end
end
绘图展示结果
最后一步是将上述过程可视化,显示原始入射光线、内部多次反射/折射路径及最终出射光线的位置分布。
figure();
hold on;
plot([0 cosd(theta_i)], [0 sind(theta_i)], '-o', 'LineWidth', 2,...
'MarkerFaceColor','r'); % 入射光线
for i=1:length(theta_t)
plot([cosd(theta_i) cosd(rad2deg(theta_t(i)))], ...
[sind(theta_i) sind(rad2deg(theta_t(i)))], '--*',...
'Color',[linspace(0,1,N_lambda)(i) 0 1-linspace(0,1,N_lambda)(i)]);
text(cosd(rad2deg(theta_t(i))), sind(rad2deg(theta_t(i))),...
sprintf('%.0fnm', wavelengths(i)*1e9));
end
axis equal;
xlabel('X-axis');
ylabel('Y-axis');
title('Light Ray Tracing Through Prism');
legend({'Incident ray'},'Location','BestOutside');
grid minor;
hold off;
此段代码实现了基于给定输入条件下对单束或多束平行白色光源穿过标准直角三棱镜时发生的一系列光学现象进行了较为真实的重现[^1]。
相关推荐

















