MATLAB输出程序

2024-11-30

MATLAB输出程序(共3篇)

MATLAB输出程序 篇1

样地是森林资源连续清查和规划设计 (二类调查) 调查重要内容, 是估测总体面积、蓄积及相关因子的重要手段, 随着计算机技术的飞速发展, 提供样地调查成果也由手工复制变为计算机打印成果, 目前大都采用GIS系统经过矢量化绘制样木位置图, 没有根本解决样木位置图自动打印问题, 为此笔者设计一个小的程序可以实现此功能, 从而实现样地成果输出完全自动化。

1 样地调查标准和设计思路

1.1 调查标准

1.1.1 样地面积和形状

实测样地的面积为0.06hm2;形状为边长24.49m, 其1/2对角线长为17.32m, 对角线指向正东 (西) 和正南 (北) 的正方形。

1.1.2 样木号

固定样地内的检尺样木均编号, 并长期保持不变。样木号以样地为单元进行编写, 不得重号和漏号。固定样木被采伐或枯死后, 原有编号原则上不再使用, 新增样木 (如进界木、漏测木) 编号接前期最大号续编。

1.1.3 方位角、水平距离

采用PDA或实测每株样木位置与样地中心点方位角和水平距离, 方位角以度为单位, 水平距离以m为单位, 均保留1位小数。

1.1.4 样木位置图

为了直观反映样木在样地中的位置, 应该根据每株样木的方位角和水平距绘制样木位置图。

1.2 设计思路

在林分中树木的分布随机散点分布, 并无规律可循, 为合理显示样木位置并标注样木号, 首先将样地范围虚拟分割成数个0.4×0.25的格子, 然后根据样木角度和距离计算每个网格内样木实际株数, 以有样木网格为中心, 将样木位置点在网中心位置显示, 样木号的标注通过计算周边八个网格是否空白进行标注, 为使打印样木号不重叠, 将样木号输出到显示屏上或打印在空白纸上。

2 程序设计及原理

2.1 坐标系统

输出样木位置图离不开坐标系统, 在输出时要用到多种坐标系统。

2.1.1 设备坐标

设备坐标用于显示器和打印机等输出设备。显示器设备坐标, 原点位于左上角, X轴正向向右, Y正向向下, 打印机的设备坐标, 原点位于左下角, X轴正向向右, Y正向向上。

2.1.2 逻辑坐标

图形和文字等都要通过显示器和打印机等设备输出, 但各种输出设备的精度是不同的, 如果输出同一个图形而根据不同设备的输出精度调整操作, 工作量非常大, 为解决这一问题, 建立一个逻辑坐标, 与设备无关, 它是一个虚拟坐标系。

2.1.3 用户坐标

是用户定义原始图形时所用的坐标系, 如直角坐标系。

2.1.4 用户坐标与逻辑坐标的转换

原始样木图首先绘制在用户坐标系中, 通过变换映射到逻辑坐标系中, 然后通过设置映射模式, 用缩放函数映射到设备坐标中。

逻辑坐标与设备坐标之间的转换通过API函数实现。

用户坐标与逻辑坐标之间的转换, 外业样木采集的信息为样木与样地中心点的角度和距离, 如何在计算机上实现显示, 那就要进行用户坐标与逻辑坐标之间的转换。转换过程中由于度量单位不同, 用户坐标系中的图形转换到逻辑坐标系中去, 必然按照一定的比例进行缩放, 这个比例称为缩放因子。这种缩放因子可以理解为用户坐标系中的一个度量单位代表逻辑坐标系中的几个度量单位, 或逻辑坐标系中的一个度量单位代表用户坐标系中的几个度量单位, 如果将样木位置图打印在A4纸上, 其缩放因子为1732/9。

2.2 样木输出位置逻辑坐标值的求算

样地中心点 (逻辑坐标原点) 的坐标为X=10.5, Y=10, 根据三角函数和用户直角坐标中样木角度和距离, 计算样木的X、Y逻辑坐标值, 其计算公式如下:

2.3 格网坐标的计算及株数、样木号统计

将样地用纵横坐标线区分成网格, 一块样地的样木株数最多不超过999株, 既需标注的样木号最多3个字符, 所以将格网设成长方形, 以利于标注样木号, 每个网格大小为0.4×0.25, 用一维数组记录每个格点的左上角顶点坐标。坐标集合 (格网) 内株数、样木号记录:用二维数组记录坐标集合内的样木株数, 用三维数组记录样木号。

2.4 网格中心点坐标的计算

2.4.1 网格逻辑坐标的计算

2.5 样木位置图输出

利用VB的Picture BOX控件的各种属性显示样木位置图, 利用Printer的各种属性和方法打印样木位置图, 如图1所示。

3 结论

3.1 技术关键点

应用VB6编程实现了自动输出样木位置图, 解决的主要技术关键点是:

3.1.1 坐标转换

根据数据库的角度和距离转换成逻辑直角坐标点。

3.1.2 坐标网格划分及网格内株数统计

以坐标原点为基准, 根据打印字体大小分割坐标网格, 然后统计网格内株数。

3.1.3 样木号输出位置的确定。

以坐标值为中心确定其周围网格树木分布情况, 确定其输出位置。

3.1.4 一个网格超过8株数问题的解决

当样木周围8个小网格都被占有时, 样木号打印还会重叠, 根据经验, 在很小的网格内同时生长8株数木的概率为万分之一左右, 为此采用了在计算机上手工移动样木号的办法进行处理。

3.2 程序特点

在林业调查工作中图形显示是一个很重要的内容, 利用输出样木位置图程序, 能快速、美观输出样地调查成果, 解决了样地位置图靠手工复制或复印的历史, 同时比用GIS矢量化绘制的速度快, 提高了工作效率。

摘要:应用VB6系统软件开发编写程序, 实现自动绘制样木位置图, 使一类清查、二类调查样地成果的输出完全自动化。

关键词:资源调查,样地,样木位置图,VB6

MATLAB输出程序 篇2

# include main(){int year,month,day,c,Y,W,i,j,w;int t[]={31,0,31,30,31,30,31,31,30,31,30,31};printf(“请输入年份”);scanf(“%d”,&year);if(year%4==0&&year%100!=0||year%400==0)t[1]=29;else t[1]=28;for(month=1;month<=12;month++){

if(month<3)

{c=((int)(year-1)/100);

Y=(year-1)-((int)((year-1)/100))*100;

w=((int)(c/4))-2*c+Y+((int)(Y/4))+((int)(13*(month+13)/5));

W=(w+70)%7;}

else if(month>=3)

{c=((int)(year/100));

Y=year-((int)(year/100))*100;

w=((int)(c/4))-2*c+Y+((int)(Y/4))+((int)(13*(month+1)/5));

W=(w+70)%7;

}

i=W;

printf(“nn

%dn”,month);

printf(“ 日

六n”);

for(j=1;j<=W;j++)printf(“

”);

for(day=1;day<=t[month-1];day++)

{i++;

printf(“%4d”,day);

if(i%7==0)printf(“n”);

} } printf(“n”);} 2.(拓展题,分值25)输入任意一个年份的值,输出该年份的日历。要求将12个月自上而下排成两列。# include main(){int year,month,day1,day2,c,Y,W,i1,i2,j,w,k,flag1=0,flag2=0,p,q;

int t[]={31,0,31,30,31,30,31,31,30,31,30,31};

printf(“请输入年份”);

scanf(“%d”,&year);

if(year%4==0&&year%100!=0||year%400==0)

t[1]=29;

else t[1]=28;for(month=1;month<=12;month=month+2){ flag1=0;flag2=0;

/*每次循环flag1;flag2的初始都应该为0*/ if(month<3)

{c=((int)(year-1)/100);

Y=(year-1)-((int)((year-1)/100))*100;

w=((int)(c/4))-2*c+Y+((int)(Y/4))+((int)(13*(month+13)/5));

W=(w+70)%7;}

else if(month>=3)

{c=((int)(year/100));

Y=year-((int)(year/100))*100;

w=((int)(c/4))-2*c+Y+((int)(Y/4))+((int)(13*(month+1)/5));

W=(w+70)%7;

}

printf(“nn

%d

%dn”,month,month+1);

printf(“ 日

六n”);

i1=W;

/*一行一行的输出*/

for(j=1;j<=W;j++)

/*第一行的循环不同于其他的 故要单独写循环语句*/

printf(“

”);

for(day1=1;day1<=t[month-1]&&flag1==0;day1++)

{i1++;printf(“%4d”,day1);

if(i1%7==0)flag1=1;

}

printf(“

”);

i2=(W+t[month-1])%7;

for(k=1;k<=((W+t[month-1])%7);k++)

printf(“

”);

for(day2=1;day2<=t[month]&&flag2==0;day2++)

{i2++;printf(“%4d”,day2);

if(i2%7==0)flag2=1;}

printf(“n”);for(p=8;p<=50;p=p+7)

/*第二行及其后面的循环*/ {i1=0;flag1=0;for(day1=p-W;day1<=t[month-1]&&flag1==0;day1++)

{i1++;printf(“%4d”,day1);

if(i1%7==0)flag1=1;}

for(q=i1;q<7;q++)

/*格式对齐的控制 使第二列的日历每行的第一个书从同一位置开始*/

printf(“

”);

printf(“

”);

i2=0;flag2=0;

for(day2=p-(W+t[month-1])%7;day2<=t[month]&&flag2==0;day2++)

{i2++;printf(“%4d”,day2);

if(i2%7==0)flag2=1;}

MATLAB输出程序 篇3

国产快走丝数控线切割机床大多采用3B格式的程序控制, 而目前较流行的CAM软件基本不提供3B格式的后置处理输出, 3B格式程序目前都是由专用的国产软件来自动编制的。为方便工艺、编程等环节的统一管理, 有必要拓展流行CAM软件的3B程序输出功能。本文以流行的MasterCAM软件为例, 在其标准线切割后处理文档MPWFANUC.PST的基础上, 对3B格式程序定制输出的算法进行探讨。

1 3B线切割加工程序格式及其编制规则解读

国产快走丝线切割机床的加工控制采用固定段格式的3B程序, 每行程序均由前导字符为B分隔的3组数字再加上2个辅助控制的指令代码组成, 故称3B程序。其程序行格式通常表示为:

其中, JX、JY分别为加工线圆在X、Y轴方向上的坐标计数长度。对直线而言, JX、JY为从起点到终点在X、Y方向的坐标增量长度, 当两者中有一个为0时, JX、JY均取0值;对圆弧而言, JX、JY为从圆心到圆弧起点在X、Y方向的坐标增量长度。

J为主计数轴的计数长度, 它等于加工线圆在主计数轴上走过的投影总长度。对直线而言, 它等于JX、JY中相对较大的那个值;对圆弧而言, 其值计算将视圆弧走向及其跨越象限状况而定, 需经综合条件判断后再选择合适的算法处理。这里JX、JY、J的单位是μm。

G为主计数轴的设定, 有GX、GY两种设定, GX表示X轴为主计数轴、GY表示Y轴为主计数轴。对直线而言, JX、JY中相对较大为主计数轴;对圆弧而言, 应判断从圆心到圆弧终点在X、Y方向的坐标增量长度, 相对较小为主计数轴。

Zn为控制加工方式及方向的信息指令。它由一特定的字符或字符串为前导, 后跟4个象限区间数字之一, 共有直线L1~L4, 顺圆SR1~SR4, 逆圆NR1~NR4十二种选择。直线由终点所处象限方位确定, 圆弧则由圆弧起点所处象限方位确定, 确定原则如图1所示。

2 3B线切割程序格式输出的后处理定制方法

根据以上对3B编程规则的解读可知, 无论是直线还是圆弧, 其JX、JY均为特征节点的坐标数据, 因此, 可直接从CAM输出的刀路数据中提取。而主计数长度J则应该在判断出主计数轴后进行计算, 相对而言, 圆弧段主计数长度比直线段主计数长度的算法处理要复杂, 其加工方向控制指令也需要进行相对复杂的条件判定。

2.1 直线段轮廓输出的算法及其定制处理

对于直线轮廓段, 可通过提取CAM刀路数据中线段起终点的增量坐标Xinc、Yinc后, 按图2所示算法流程, 对后处理文档MPWFANUC.PST中“Motion NC output”区段的plinout函数进行定制, 以下函数定制的算法处理程序可供参考。

2.2 圆弧段轮廓输出的算法及其定制处理

对于圆弧轮廓段, 可在CAM输出的刀路数据中提取到起点相对圆心的增量坐标i、j, 起终点增量坐标Xinc、Yinc, 以及圆弧走向变量g20code (顺时针为2、逆时针为3) 和圆弧半径变量arcrad。在此基础上, 可按图3所示算法流程, 对PST后处理文档中“Motion NC output”区段的pcirout函数进行定制。

2.3 其他需定制处理的内容

其他需定制处理的内容包括:计数长度Jx、Jy、bj变量数据的类型及前导字符“B”输出的设置;主计数方向“GX”、“GY”字符串输出设置;加工方式及走向指令“L”、“SR”, “NR” (下转第159页) 字符串输出设置等。

注:…D、E、F计算X值, 算法同A、B、C。

对于加工方式及走向指令字符输出的设置, 可直接将原直线“G00/G01” (变量sg00/sg01) 、顺圆“G02” (变量sg02) 、逆圆“G03” (变量sg03) 输出码修改为“L”、“SR”、“NR”即可, 由sg20code变量控制得到相应的代码输出;主计数方向可添加字符串变量sgx为“GX”、sgy为“GY”, 通过程序算法判定赋值后再由串变量sgbz控制输出;对于计数长度Jx、Jy、bj, 则应先设置“fs2 7 0 3 0 3t”, 定义出类型为7 (小数点右移3位) 的整型格式, 以获得μm单位的坐标数据输出, 再按“fmt B 7 jx”设置Jx、Jy、bj等变量为数据类型“7”且前导字符为“B”的输出形式。

3 结语

经多次试用, 在MasterCAM软件Wire线切割模块中, 用以上后处理定制输出得到的3B程序, 与成熟的国产专用软件自动编制的程序结果一致, 其处理算法得到了验证。

参考文献

[1]何国伟, 吕强中.MasterCAM的后置处理技术研究[J].现代制造工程, 2005 (1)

上一篇:员工职业生涯设计工作论文下一篇:意义与局限