线性菲涅尔反射器几何设计

69 阅读3分钟

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;                         % 显示网格线

3.效果

image.png