通过四种方法,在MATLAB中画一维光栅

来源:互联网 发布:安卓数据导入iphone6s 编辑:程序博客网 时间:2024/05/18 21:06

  博主是光学专业,经常在MATLAB中做光学的仿真,而光栅是我们经常用到的光学元件,所以要经常绘制,在这里分享一下一维光栅的四种画法,适用于初学者,画法纯属原创,仅作参考。编译环境MATLAB2014a

下面是光栅参数,图像大小500*500,a为缝宽,d为光栅常数

白黑白黑

下面是第一种画法:

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;    endendfigure , imshow (U1);



显然方法有点复杂,需要两个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;endfigure , imshow(U2);


第三种方法,再次更新,把光栅常数d放到for中,这样更直观(因从0开始,所以为c-1)

U3  = zeros( c , r );for n = 0 : d : c-1    U3( 1 + n : a + n , : ) = 1;endfigure , imshow(U3);

第四种方法,使遍历的参量从1开始,也是为了更直观,但这就要求循环中a-1

U4 = zeros( c , r );a = a -1 ;for n = 1:d:c        U4(n:n+a,:) = 1;endfigure , imshow(U4);

如果需要二维光栅只需要在列方向在添加一组就可以了。