楼主是光学专业,经常在MATLAB中做光学的仿真,而光栅是我们经常用到的光学元件,所以要经常绘制,在这里分享一下一维光栅的四种画法,适用于初学者,画法纯属原创,仅作参考。编译环境MATLAB2014a
下面是光栅参数,图像大小500*500,a为缝宽,d为光栅常数
r = 500 ;c = r ;
d = 10;
a = 6;复制代码
下面是第一种画法:
U1(1,:) = 1
U1(1 + 1*d,:) = 1
U1(1 + 2*d,:) = 1
..............
U1(1 + (c/d - 1)*d,:) = 1
U1(2,:) = 1
U1(2 + 1*d,:) = 1
U1(2 + 2*d,:) = 1
............
U1(2 + (c/d - 1)*d,:) = 1
U1(a,:) = 1
U1(a + 1*d,:) = 1
U1(a + 2*d,:) = 1
依次类推..........
U1(a + (c/d - 1)*d , :) = 1
可写出一下程序
%% 第一种画法
U1 = zeros( c , r );
for i = 1 : 1 : a
for j = 0 : 1 : ( c / d -1)
U1(i + j * d , : ) = 1;
end
end
figure , imshow (U1);复制代码
1.jpg (68 KB, 下载次数: 34)
第一种方法
2017-12-21 13:09 上传
显然方法有点复杂,需要两个for
下面介绍第二种:
光栅中每条缝一块画出,如下所示
U2(1:a ,:) = 1
U2(1+d:a+d ,:) = 1
U2(1+2*d:a+2*d ,:) = 1
U2(1+(c / d - 1 )*d:a+(c / d - 1)d ,:) = 1,程序如下
%% 第二种画法
U2 = zeros( c , r );
for m = 0 : 1 : ( c / d -1)
U2( 1 + m * d : a + m *d , : ) = 1;
end
figure , imshow(U2);复制代码
2.jpg (68 KB, 下载次数: 19)
第二种方法
2017-12-21 13:09 上传
第三种方法,再次更新,把光栅常数d放到for中,这样更直观(因从0开始,所以为c-1)
%% 第三种画法
U3 = zeros( c , r );
for n = 0 : d : c-1
U3( 1 + n : a + n , : ) = 1;
end
figure , imshow(U3);复制代码
3.jpg (68 KB, 下载次数: 21)
第三种方法
2017-12-21 13:09 上传
第四种方法,使遍历的参量从1开始,也是为了更直观,但这就要求循环中a-1
%% 第四种画法
U4 = zeros( c , r );
a = a -1 ;
for n = 1:d:c
U4(n:n+a,:) = 1;
end
figure , imshow(U4);
4.jpg (68 KB, 下载次数: 22)
第四种方法
2017-12-21 13:10 上传