前言
在实际应用中经常会遇到一些规律排布的圆形,如果有办法可以快速的生成它们,将大大提高编程效率。作者将列举以下几种分布的生成方式:
成一排分布
如图1所示六个圆成一排分布,所有圆的直径为10,Y=0,Z=0,每个圆之间的距离为30
图1 成一排分布的六个圆
从左到右依次对圆标号,那么圆的标号和其X坐标值有如下对应关系,见表1
序号 |
1 |
2 |
3 |
4 |
5 |
6 | |
X坐标 |
0 |
30 |
60 |
90 |
120 |
150 |
表1 序号和与之对应的X坐标
从表格中可知序号与X坐标存在函数关系——X坐标=(序号-1)×30,有了此对应关系便可以利用DO循环快速生成,具体步骤如下:
第一步,创建 I 的DO循环,
DO (NAM=I, BGN=1, END=6)
图2 DO循环
第二步,生成圆,
GENCIR (NAM=CIR(I), XCO=30*(I-1), YCO=0, ZCO=0, DIA=10, NPT=6, PLA=XY, INO=I, CSY=REFR$CSY, ZVL=10)
图3 生成圆
第三步,测量圆,
MeasCir2D (NAM=CIR(I), CSY=REFR$CSY, PTY=XY)
第四步,结束循环,
ENDDO
完整程序代码如下:
DO (NAM=I, BGN=1, END=6)
GENCIR (NAM=CIR(I), XCO=30*(I-1), YCO=0, ZCO=0, DIA=10, NPT=6, PLA=XY, INO=I, CSY=REFR$CSY, ZVL=10)
MeasCir2D (NAM=CIR(I), CSY=REFR$CSY, PTY=XY)
ENDDO
圆形分布
如图4所示,八个圆直径均为10,均匀的分布在直径100的圆上,第一个圆的坐标是(50,0,0)
图4 圆形分布的八个圆
方式一,数学计算
利用数学计算需要去找到圆序号我们需要找到序号与其坐标的对应关系,很明显直接找坐标对应关系不明显,但是每个圆圆心与原点连线到X轴夹角(以下简称夹角)的规律很好找,找到夹角的规律坐标值就是简单的三角函数关系,如表2所示
序号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
夹角 |
0 |
45 |
90 |
135 |
180 |
225 |
270 |
315 |
表2 序号与夹角的关系
不难看出序号与夹角的关系——夹角=45×(序号-1),利用这个关系便可以生成需要的圆,步骤如下:
第一步,创建1到8的DO循环,循环因子是I,
DO (NAM=I, BGN=1, END=8)
第二步,进行函数运算,计算角度和XY坐标
AA=45*(I-1)
XX=50*FCOS(AA)
YY=50*FSIN(AA)
第三步,生成圆,将第二步生成的XY坐标填入对应位置
GENCIR (NAM=CIR(I), XCO=XX, YCO=YY, ZCO=0, DIA=10, NPT=6, PLA=XY, INO=I, CSY=REFR$CSY)
图5 生成圆
第四步,测量圆,MeasCir2D (NAM=CIR(I), CSY=REFR$CSY, PTY=XY)
第五步,结束循环,ENDDO
方式二,元素转换
元素转换的方式是先成一个圆,然后将当前圆围绕原点进行旋转得到之后的圆,旋转角度与圆序号之间存在如下关系:
序号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
角度 |
0 |
45 |
90 |
135 |
180 |
225 |
270 |
315 |
表3 序号与旋转角度的关系
不难发现旋转角度=45×(序号-1)
需要用到元素转换指令,具体步骤如下:
第一步,生成第一个圆,
GENCIR (NAM=CIR(1), XCO=50, YCO=0, ZCO=0, DIA=10, NPT=6, PLA=XY, INO=I, CSY=REFR$CSY)
X=50,Y=0
第二步,开启循环,
DO (NAM=I, BGN=1, END=8)
第三步,元素转换,
TRAOBJ (NEW=CIR(I), OLD=CIR(1), ANG=45*(I-1), AXI=+Z)
图6 元素转换
第四步,测量圆,MeasCir2D (NAM=CIR(I), CSY=REFR$CSY, PTY=XY)
第五步,结束循环,ENDDO
元素转换也可以应用在在第一种情况下成一排分布的情况,不再赘述。
矩形分布
如图7所示圆呈矩阵式分布,所有圆的直径均为10,一行(X方向)8个圆,圆心间隔20,一列(Y方向)6个圆,圆心间隔15
图7 矩阵式分布
由于矩阵式圆的X坐标和Y坐标相互独立因此生成矩阵式圆需要用到双循环的嵌套结构分别表示X坐标和Y坐标。
列序号 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
X坐标 |
0 |
20 |
40 |
60 |
80 |
100 |
120 |
140 |
表4 矩阵分布列序号与X坐标关系
行序号 |
1 |
2 |
3 |
4 |
5 |
6 |
Y坐标 |
0 |
15 |
30 |
45 |
60 |
75 |
表5 矩阵分布行序号与Y坐标关系
如表格所示XY坐标分别与列行序号有对应关系,生成圆时也要有与之对应的关系,具体步骤如下:
第一步,生成6行8列的循环嵌套结构,注意两个循环的循环因子不同,
DO (NAM=I, BGN=1, END=6)
DO (NAM=J, BGN=1, END=8)
ENDDO
ENDDO
第二步,在循环中插入生成圆指令,如图8所示,圆名称与两个循环因子均相关,XY坐标随循环因子变化
GENCIR (NAM=CIR(I*10+J), XCO=20*(J-1), YCO=15*(I-1), DIA=10, NPT=6, PLA=XY, CSY=REFR$CSY)
图8 生成圆
第三步,在生成圆后面测量圆,
MeasCir2D (NAM=CIR(I*10+J), CSY=REFR$CSY, PTY=XY)
完整程序代码如下:
DO (NAM=I, BGN=1, END=6)
DO (NAM=J, BGN=1, END=8)
GENCIR (NAM=CIR(I*10+J), XCO=20*(J-1), YCO=15*(I-1), DIA=10, NPT=6, PLA=XY, CSY=REFR$CSY)
MeasCir2D (NAM=CIR(I*10+J), CSY=REFR$CSY, PTY=XY)
ENDDO
ENDDO
异形矩形分布
如图9所示圆分布,相对于图7的分布偶数行所有圆向右平移10毫米
图9 异形矩阵分布
当在奇数行时,当前行的第一个圆的X坐标是0,当在偶数行时,当前行第一个圆的X坐标是10,可以有以下的生成方式:
方式一,分奇偶行生成
为了避免测量的时候分奇偶行测量,可以先全部生成后再测量,具体步骤如下:
第一步,生成奇数行的圆,行数循环的时候需要依次是1、3、5,因此行循环如下设置
图10 奇数行循环设置
生成圆的坐标与之前相同,代码如下:
DO (NAM=I, BGN=1, END=6, DLT=2)
DO (NAM=J, BGN=1, END=8)
GENCIR (NAM=CIR(I*10+J), XCO=20*(J-1), YCO=15*(I-1), DIA=10, NPT=6, PLA=XY, CSY=REFR$CSY)
ENDDO
ENDDO
第二步,生成偶数行的圆,行数循环的时候需要依次是2、4、6,因此行循环如下设置
图11 偶数行循环设置
生成圆的X坐标在原来基础上+10,XCO=20*(J-1)+10,代码如下:
DO (NAM=I, BGN=2, END=6, DLT=2)
DO (NAM=J, BGN=1, END=8)
GENCIR (NAM=CIR(I*10+J), XCO=20*(J-1)+10, YCO=15*(I-1), DIA=10, NPT=6, PLA=XY, CSY=REFR$CSY)
ENDDO
ENDDO
第三步,测量生成的圆
DO (NAM=I, BGN=1, END=6)
DO (NAM=J, BGN=1, END=8)
MeasCir2D (NAM=CIR(I*10+J), CSY=REFR$CSY, PTY=XY)
ENDDO
ENDDO
方式二,不分奇偶行直接生成
如果不想分奇偶行分别生成,可以利用奇偶行的行序号进行操作,生成的X坐标XCO=20×(J-1)+10×系数,当前是奇数行系数为0,当前为偶数行系数为1,为了生成符合要求的系数需要用到取余函数
行序号 |
1 |
2 |
3 |
4 |
5 |
6 |
除以2余数 |
1 |
0 |
1 |
0 |
1 |
0 |
需要的系数 |
0 |
1 |
0 |
1 |
0 |
1 |
表6 行序号、余数和系数
如表6所示余数与系数存在关系,系数=1-余数,由此可以进行生成,具体步骤如下:
第一步,生成6行8列的循环嵌套结构,不需要区分奇偶行
DO (NAM=I, BGN=1, END=6, DLT=1)
DO (NAM=J, BGN=1, END=8)
ENDDO
ENDDO
第二步,在循环中插入系数的计算
VV=1-Mod(I,2),Mod(I,2)的意思是行序号除以2所得的余数
第三步,在循环中生成圆,圆的X坐标与系数有关XCO=20*(J-1)+10*VV
GENCIR (NAM=CIR(I*10+J), XCO=20*(J-1)+10*VV, YCO=15*(I-1), DIA=10, NPT=6, PLA=XY, CSY=REFR$CSY)
第四步,在循环中测量圆
MeasCir2D (NAM=CIR(I*10+J), CSY=REFR$CSY, PTY=XY)
完整程序代码如下:
DO (NAM=I, BGN=1, END=6, DLT=1)
DO (NAM=J, BGN=1, END=8)
VV=1-Mod(I,2)
GENCIR (NAM=CIR(I*10+J), XCO=20*(J-1)+10*VV, YCO=15*(I-1), DIA=10, NPT=6, PLA=XY, CSY=REFR$CSY)
MeasCir2D (NAM=CIR(I*10+J), CSY=REFR$CSY, PTY=XY)
ENDDO
ENDDO
平行四边形分布
相较于矩形分布,每一行都比前一行向右平移10毫米,如图12所示
图12 平行四边形分布
Y坐标值与行序号对应关系与之前相同,但是X坐标不单纯与列序号有关同时与行序号有关,每行第一个圆的X坐标和行序号有如下对应
行序号 |
1 |
2 |
3 |
4 |
5 |
6 |
行首圆X坐标 |
0 |
10 |
20 |
30 |
40 |
50 |
表7 行序号与行首圆X坐标
由表格可知二者关系为——行首圆X坐标=10×(行序号-1),扩展的每个圆即在行首圆X坐标的基础上进行加法运算——X坐标=行首圆X坐标+20×(列序号-1),具体操作步骤如下:
第一步,生成6行8列的循环嵌套结构
DO (NAM=I, BGN=1, END=6, DLT=1)
DO (NAM=J, BGN=1, END=8)
ENDDO
ENDDO
第二步,在循环中生成圆,X坐标与行序号列序号均相关,XCO=20*(J-1)+10*(I-1)
GENCIR (NAM=CIR(I*10+J), XCO=20*(J-1)+10*(I-1), YCO=15*(I-1), DIA=10, NPT=6, PLA=XY, INO=I, CSY=REFR$CSY)
第三步,在循环中测量圆
MeasCir2D (NAM=CIR(I*10+J), CSY=REFR$CSY, MOD=NOE, PTY=XY)
完整程序代码如下:
DO (NAM=I, BGN=1, END=6)
DO (NAM=J, BGN=1, END=8)
GENCIR (NAM=CIR(I*10+J), XCO=20*(J-1)+10*(I-1), YCO=15*(I-1), DIA=10, NPT=6, PLA=XY, INO=I, CSY=REFR$CSY)
MeasCir2D (NAM=CIR(I*10+J), CSY=REFR$CSY, MOD=NOE, PTY=XY)
ENDDO
ENDDO
以上介绍了五种排列方式的快速生成方法,更多排列方式欢迎留言交流讨论。