1.题目
设计一个线性菲涅尔反射器,焦距f=2m,反射器宽度W=4m,计算各反射条带的位置和倾斜角度。
2.代码
% 清理工作空间和命令窗口
clear all; % 清除工作空间中的所有变量
close all; % 关闭所有图形窗口
clc; % 清空命令窗口显示内容
% 恢复默认路径(解决linspace函数问题)
restoredefaultpath; % 重置MATLAB搜索路径为默认设置,解决函数冲突问题
% 参数设置
f = 2; % 焦距,从反射器平面到焦点的垂直距离 (单位:米)
W = 4; % 反射器的总宽度 (单位:米)
N = 20; % 将反射器分割成的条带数量
h = 0.5; % 接收器相对于反射器平面的高度 (单位:米)
% 手动创建线性间隔数组(避免linspace问题)
x_start = -W/2; % 反射器左边界位置:-2米
x_end = W/2; % 反射器右边界位置:+2米
dx = (x_end - x_start) / N; % 计算每个条带的宽度:4米/20 = 0.2米
x = x_start:dx:x_end; % 生成条带边界位置数组:[-2, -1.8, -1.6, ..., 1.8, 2]
x_center = (x(1:end-1) + x(2:end)) / 2; % 计算每个条带的中心位置
% 计算反射角度(相对于水平面的倾斜角)
theta = atan((h - x_center .* tan(atan(x_center/f))) ./ ... % 复杂的几何光学公式
(f - x_center .* (1 - tan(atan(x_center/f)) .* x_center/f))); % 确保反射光线汇聚到接收器
theta_deg = theta * 180/pi; % 将弧度角度转换为度数显示
% 绘制反射器几何结构
figure(1); % 创建第1个图形窗口
subplot(2,1,1); % 创建2行1列的子图,选择第1个位置
for i = 1:N % 循环绘制每个反射条带
% 绘制每个反射条带
x_strip = [x(i), x(i+1), x(i+1), x(i), x(i)]; % 定义条带的4个角点x坐标(闭合矩形)
y_strip = [0, 0, 0.1, 0.1, 0]; % 定义条带的4个角点y坐标(厚度0.1米)
patch(x_strip, y_strip, 'b', 'FaceAlpha', 0.7); % 绘制蓝色半透明的条带矩形
hold on; % 保持当前图形,允许在同一图上绘制多个对象
% 绘制反射条带的法线方向
normal_length = 0.3; % 法线箭头的长度
nx = normal_length * sin(theta(i)); % 法线箭头在x方向的分量
ny = normal_length * cos(theta(i)); % 法线箭头在y方向的分量
quiver(x_center(i), 0.05, nx, ny, 'r', 'LineWidth', 2); % 在条带中心绘制红色法线箭头
end
% 绘制焦点和接收器
plot(0, f, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'r'); % 在(0,2)位置绘制红色实心圆点表示焦点
plot([-0.2, 0.2], [h, h], 'k-', 'LineWidth', 3); % 绘制黑色粗线表示接收器
text(0.1, f, '焦点', 'FontSize', 10); % 在焦点旁边添加文字标签
text(0.1, h, '接收器', 'FontSize', 10); % 在接收器旁边添加文字标签
xlabel('水平位置 (m)'); % 设置x轴标签
ylabel('高度 (m)'); % 设置y轴标签
title('线性菲涅尔反射器几何结构'); % 设置图标题
grid on; % 显示网格线
axis equal; % 设置x、y轴比例相等,保持几何形状不变形
xlim([-W/2-0.5, W/2+0.5]); % 设置x轴显示范围:[-2.5, 2.5]
ylim([-0.2, f+0.5]); % 设置y轴显示范围:[-0.2, 2.5]
% 绘制反射角度分布
subplot(2,1,2); % 选择2行1列子图的第2个位置
plot(x_center, theta_deg, 'bo-', 'LineWidth', 2, 'MarkerFaceColor', 'b'); % 绘制角度分布曲线,蓝色圆点连线
xlabel('反射条带中心位置 (m)'); % 设置x轴标签
ylabel('倾斜角度 (度)'); % 设置y轴标签
title('反射条带倾斜角度分布'); % 设置图标题
grid on; % 显示网格线