依然是同上篇一样的题目,绘制一组六边形,这次需要换用其他方法完成。
变量设置与之前完全相同。
方法1:定义函数,通过调用函数绘制多个六边形
方法2:使用copy指令,复制平移基础六边形
程序:zhangjiali1201/Lumerical_demo (github.com)
本文程序为exercise2_model_hex_function和exercise2_model_hex_copy
目录
方法1:function()
定义一个绘制六边形的功能函数hex
function hex(Nx,Ny,R,H,glass)
{
vtx=zeros(6,2);
for(j=1:6)
{
vtx(j,1)=R*cos(pi/6+(j-1)*pi/3)+Nx;
vtx(j,2)=R*sin(pi/6+(j-1)*pi/3)+Ny;
}
addpoly;
set('vertices',vtx);
set('z span',H);
set('material',glass);
}
后续调用hex函数就可以绘制六边形,比如想绘制一个中心在原点的六边形,通过hex(0,0,R,H,glass)便可绘制出。
通过一个循环,调用七次hex函数绘制出七个六边形,就可完成本题。
方法2:copy()
这种方法先绘制一个基础六边形,然后将其复制,平移到新的位置。
copy(x,y,z)指令的xyz指的就是沿xyz轴方向的平移距离。
因此在本题中,不难理解,复制中心的六边形后,要平移的距离就是之前的方法中求出的新六边形中心点Nx与Ny的值。
select('hexagon');
copy(Nx,Ny);
附完整代码
方法1:
########################################
#modeling exercise
#draw a couple of hexagons, method 2
#function()
#edited by jializhang,20210424
deleteall;
function hex(Nx,Ny,R,H,glass)
{
vtx=zeros(6,2);
for(j=1:6)
{
vtx(j,1)=R*cos(pi/6+(j-1)*pi/3)+Nx;
vtx(j,2)=R*sin(pi/6+(j-1)*pi/3)+Ny;
}
addpoly;
set('vertices',vtx);
set('z span',H);
set('material',glass);
}
for(i=0:6)
{
if (i==0)
{
Nx=0;
Ny=0;
}
else
{
Nx=(2*R*cos(pi/6)+gap)*cos((i-1)*pi/3);
Ny=(2*R*cos(pi/6)+gap)*sin((i-1)*pi/3);
}
hex(Nx,Ny,R,H,glass);
set('name','hexagon'+num2str(i));
}
方法2:
########################################
#modeling exercise
#draw a couple of hexagons, method 3
#copy the hexagon in the center, then translate
#edited by jializhang,20210424
deleteall;
vtx=zeros(6,2);
for(j=1:6)
{
vtx(j,1)=R*cos(pi/6+(j-1)*pi/3);
vtx(j,2)=R*sin(pi/6+(j-1)*pi/3);
}
addpoly;
set('name','hexagon');
set('vertices',vtx);
set('z span',H);
set('material',glass);
for(i=1:6)
{
Nx=(2*R*cos(pi/6)+gap)*cos((i-1)*pi/3);
Ny=(2*R*cos(pi/6)+gap)*sin((i-1)*pi/3);
select('hexagon');
copy(Nx,Ny);
set('name','hexagon'+num2str(i));
}