objc.io#21#GPU 加速下的图像处理
make用法总结
make用法总结Make是一个高级程序设计工具,通常用于源代码的自动化构建(编译、打包、测试、安装等)过程中。
它是在类Unix操作系统下使用的工具,因为所有的Unix遵循 POSIX 标准而支持make。
make被广泛用于各种编程语言,如C、C++、Java、Python等。
一、Make的基本语法在使用make前,我们需要先了解make语法中的一些基本概念:1. Target: 表示一个目标,可以是一个可执行文件、库文件、中间文件、目录等等。
2. Dependency: 表示一个目标所依赖的文件。
3. Rule: 表示如何从依赖生成目标的方法。
示例:```makefiletarget: dependency1 dependency2recipe```其中,“target”是一个目标,“dependency1”和“dependency2”是目标需要的依赖文件,“recipe”是构建目标的具体操作。
二、Makefile的生成make工具使用Makefile文件来指定构建目标及其依赖关系、构建规则和构建指令。
Makefile文件的一般格式为:```makefiletarget1: dependency1 dependency2 ...recipe1target2: dependency3 dependency4 ...recipe2...```在终端中执行make命令时,make工具会根据Makefile文件中的规则,自动分析所需的编译任务,并决定哪些任务需要重新编译。
三、Make的常见用法1. 编译make最常见的用法是编译C/C++源代码,将源代码编译为可执行文件。
下面是一个简单的Makefile,用于将main.c和io.c编译为可执行文件main:```makefileCC=gccCFLAGS=-Wall -pedantic -I./includeLDLIBS=-lmOBJ=main.o io.oEXEC=mainall: $(EXEC)$(EXEC): $(OBJ)$(CC) $(LDFLAGS) $^ $(LDLIBS) -o $@%.o: %.c$(CC) -c $(CFLAGS) $< -o $@```在Makefile中,我们首先定义了一些变量,比如CC表示编译器,CFLAGS表示编译选项,OBJ表示目标文件列表。
CAD与探索者快捷键
C A D与探索者快捷键CAD快捷键F1:获取帮助F2:实现作图窗和文本窗口的切换F3:控制是否实现对象自动捕捉F4:数字化仪控制F5:等轴测平面切换F6:控制状态行上坐标的显示方式F7:栅格显示模式控制F8:正交模式控制F9:栅格捕捉模式控制F10:极轴模式控制F11:对象追踪式控制Ctrl+A:全选Ctrl+B:栅格捕捉模式控制(F9)Ctrl+C:将选择的对象复制到剪切板上Ctrl+D:开/关坐标值Ctrl+E:确定轴测图方向Ctrl+F:控制是否实现对象自动捕捉(f3)Ctrl+G:栅格显示模式控制(F7)Ctrl+H:pickstyleCtrl+J:重复执行上一步命令Ctrl+K:超级链接Ctrl+L:正交开/关Ctrl+M:打开选项对话框Ctrl+N:新建图形文件Ctrl+O:打开图象文件Ctrl+P:打开打印对说框Ctrl+Q:退出Ctrl+S:保存文件Ctrl+T:数字化仪关Ctrl+U:极轴模式控制(F10)Ctrl+V:粘贴剪贴板上的内容Ctrl+W:对象追踪式控制(F11)Ctrl+X:剪切所选择的内容Ctrl+Y:重做Ctrl+Z:取消前一步的操作Ctrl+1:打开特性对话框Ctrl+2:打开图象资源管理器Ctrl+3:打开工具选项板Ctrl+4:图纸集管理器Ctrl+5:信息选项板Ctrl+6:打开图象数据原子Ctrl+7:标记集管理器Ctrl+8:超级计算器Ctrl+9:隐藏/显示命令行Ctrl+0:隐藏/显示快捷图标AA:测量区域和周长(area)AL:对齐(align)AR:阵列(array)AP:加载*lsp程系AV:打开视图对话框(dsviewer)SE:草图设置①捕捉和栅格②极轴追踪③对象捕捉④动态输入ST:打开字体设置对话框(style)SO:绘制二围面(2dsolid)SP:拼音的校核(spell)SC:缩放比例(scale)SN:栅格捕捉模式设置(snap)DT:文本的设置(dtext)DI:测量两点间的距离OI:插入外部对相A:绘圆弧B:定义块C:画圆D:尺寸资源管理器E:删除F:倒圆角G:对相组合H:填充I:插入J:合并L:直线Z:缩放M:移动N:空O:偏移P:移动R:redrawS:拉伸T:文本输入U:恢复上一次操做V:设置当前坐标W:定义块并保存到硬盘中X:炸开autocad中鼠标键(快捷键)功能使用详解鼠标的功能!二键式鼠标左键:选择功能键(选象素选点选功能)右键:绘图区-----快捷菜单或[ENTER]功能1.变量SHORTCUTMENU等于0或偶数---------[ENTER]2.变量SHORTCUTMENU为基数---------快捷菜单3.或用于环境选项--------使用者设定---------快捷菜单开关设定[shift]+右键:对象捕捉快捷菜单三键式鼠标左键:选择功能键(选象素选点选功能)右键:绘图区-----快捷菜单或[ENTER]功能1.变量SHORTCUTMENU等于0或偶数---------[ENTER]2.变量SHORTCUTMENU为基数---------快捷菜单3.或用于环境选项--------使用者设定---------快捷菜单开关设定中间键:Mbuttonpan=1(系统默认值)压着不放并拖曳实现平移双击ZOOM------E缩放成实际范围[Shift]+压着不放并拖曳:作垂直或水平的实时平移[Ctrl]+压着不放并拖曳:随意式实时平移Mbuttonpan=0:对象捕捉快捷菜单[Shift]+右键:对象捕捉快捷菜单二键+中间滚轮鼠标左键:选择功能键(选象素选点选功能)右键:绘图区-----快捷菜单或[ENTER]功能1.变量SHORTCUTMENU等于0或偶数---------[ENTER]2.变量SHORTCUTMENU为基数---------快捷菜单3.或用于环境选项--------使用者设定---------快捷菜单开关设定中间滚轮1.旋转轮子向前或向后,实时缩放、拉近、拉远2.压轮子不放并拖曳实时平移3.双击ZOOM------E缩放成实际范围[Shift]+压轮子不放并拖曳作垂直或水平的实时平移[Ctrl]+压轮子不放并拖曳随意式实时平移Mbuttonpan=0(系统默认值=1)按一下轮子对象捕捉快捷菜单[Shift]+右键对象捕捉快捷菜单AutoCAD命令acad.pgp文件我已经将其命令的内容翻译出来,希望对用快捷键的朋友有点帮助吧3A,*3DARRAY;三维阵列3DO,*3DORBIT;三维动态观察器3F,*3DFACE;曲面三维面3P,*3DPOLY;三维多段线A,*ARC;圆弧ADC,*ADCENTER;AutoCAD设计中心AA,*AREA;查询面积AL,*ALIGN;将实体对象输出到ACIS文件中AP,*APPLOAD;加载应用程序AR,*ARRAY;阵列-AR,*-ARRAY;阵列ATT,*ATTDEF;定义属性-ATT,*-ATTDEF;修改定义属性ATE,*ATTEDIT;修改块属性-ATE,*-ATTEDIT;命令行修改块属性ATTE,*-ATTEDIT;命令行修改块属性B,*BLOCK;做块-B,*-BLOCK;修改块BH,*BHATCH;图案填充BO,*BOUNDARY;图案填充中的边界-BO,*-BOUNDARY;修改图案填充中的边界BR,*BREAK;打断C,*CIRCLE;画圆CH,*PROPERTIES;特性-CH,*CHANGE;不使用特性对话框进行特性修改CHA,*CHAMFER;倒角COL,*COLOR;指定当前图层颜色COLOUR,*COLOR;指定当前图层颜色CO,*COPY;复制选择D,*DIMSTYLE;标注样式DAL,*DIMALIGNED;对齐标注DAN,*DIMANGULAR;角度标注DBA,*DIMBASELINE;基线标注DBC,*DBCONNECT;数据库DCE,*DIMCENTER;圆心中心标记DCO,*DIMCONTINUE;连续标注DDA,*DIMDISASSOCIATE;删除选定择标注的关联性DDI,*DIMDIAMETER;直径标注DED,*DIMEDIT;编辑标注DI,*DIST;距离查询DIV,*DIVIDE;定数等分在线上加点DLI,*DIMLINEAR;线性标注DO,*DONUT;圆环DOR,*DIMORDINATE;标注坐标DOV,*DIMOVERRIDE;标注替代DR,*DRAWORDER;显示顺序DRA,*DIMRADIUS;半径标注DRE,*DIMREASSOCIATE;重新关联标注DS,*DSETTINGS;捕捉设置DST,*DIMSTYLE;标注样式DT,*DTEXT单行文本DV,*DVIEW;定义平行投影或透视视图E,*ERASE;删除ED,*DDEDIT编辑多行文字或文字EL,*ELLIPSE;椭圆EX,*EXTEND;延伸EXIT,*QUIT;退出EXP,*EXPORT;输出文件EXT,*EXTRUDE;实体拉伸F,*FILLET;倒圆角FI,*FILTER;对象选择过滤器G,*GROUP;建组-G,*-GROUP;用命令行编辑建立组GR,*DDGRIPS;选项H,*BHATCH;填充-H,*HATCH;用命令行填充HE,*HATCHEDIT;图案填充编辑HI,*HIDE;3D消隐I,*INSERT;插入块-I,*-INSERT;命令行插入块IAD,*IMAGEADJUST;图像调整IAT,*IMAGEATTACH;插入光栅图像ICL,*IMAGECLIP;剪裁图像IM,*IMAGE;图像管理器-IM,*-IMAGE;命令行方式图像管理器IMP,*IMPORT;插入其它格式文件IN,*INTERSECT;3D实体编辑交集INF,*INTERFERE;3D实体干涉IO,*INSERTOBJ;插入OLE对象L,*LINE;绘直线LA,*LAYER;管理图层和图层特性-LA,*-LAYER;用命令行管理图层和图层特性LE,*QLEADER;注释引线LEN,*LENGTHEN;修改对象的长度和圆弧的包含角LI,*LIST;查询LINEWEIGHT,*LWEIGHT;设置线宽LO,*-LAYOUT;命令行布局设置LS,*LIST;查询LT,*LINETYPE;加载、设置和修改线型-LT,*-LINETYPE;命令行设置、加载和修改线型LTYPE,*LINETYPE;加载、设置和修改线型-LTYPE,*-LINETYPE;命令行设置、加载和修改线型LTS,*LTSCALE;设置全局线型比例因子LW,*LWEIGHT;设置线宽M,*MOVE;移动MA,*MATCHPROP;匹配特性(扫把)ME,*MEASURE;定距等分MI,*MIRROR;镜像ML,*MLINE;多线MO,*PROPERTIES;特性MS,*MSPACE;从图纸空间切换到模型空间视口MT,*MTEXT;多行文本编辑器MV,*MVIEW;创建并控制布局视口O,*OFFSET;偏移OP,*OPTIONS;选项ORBIT,*3DORBIT;三维动态观察器OS,*OSNAP;对象捕捉-OS,*-OSNAP;命令行的对象捕捉P,*PAN;实时平移-P,*-PAN;命令行实时平移PA,*PASTESPECPARTIALOPEN,*-PARTIALOPEN;将选定视图或图层的几何图形加载到图形中PE,*PEDIT;编辑多段线和三维多边形网格PL,*PLINE;创建二维多段线PO,*POINT;创建点对象POL,*POLYGON;正多边形PR,*OPTIONS;特性PRCLOSE,*PROPERTIESCLOSE;关闭“特性”窗口PROPS,*PROPERTIES打开特性窗口PRE,*PREVIEW;打印预览PRINT,*PLOT;打印PS,*PSPACE;从模型空间视口切换到图纸空间PTW,*PUBLISHTOWEB;网上发布PU,*PURGE;清理文件-PU,*-PURGE;命令行的清理文件R,*REDRAW;刷新当前视口中的显示RA,*REDRAWALL;重画RE,*REGEN;重生成REA,*REGENALL;全部重生成REC,*RECTANGLE;恢复被UNDEFINE忽略的AutoCAD内部命令REG,*REGION;面域REN,*RENAME;重命名-REN,*-RENAME;命令行的重命名REV,*REVOLVE;实体旋转RM,*DDRMODES;草图设置RO,*ROTATE;旋转RPR,*RPREF;设置渲染系统配置RR,*RENDER;渲染渲染S,*STRETCH;拉伸SC,*SCALE;缩放SCR,*scrīpt;运行脚本SE,*DSETTINGS;对象捕捉设置SEC,*SECTION;实体截面SET,*SETVAR;设置变量SHA,*SHADE;这个不知道是做什么的SL,*SLICE;实体剖切SN,*SNAP;规定光标按指定的间距移动SO,*SOLID;二维填充SP,*SPELL;拼写检查SPL,*SPLINE;样条曲线SPE,*SPLINEDIT;编辑样条曲线ST,*STYLE;文字样式SU,*SUBTRACT;实体编辑差集T,*MTEXT;多行文本-T,*-MTEXT;命令行的多行文本TA,*TABLET;数字化仪定点TH,*THICKNESS;显示图形统计信息、模式及范围TI,*TILEMODE;这个也不知道是做什么的TO,*TOOLBAR;自定义设置TOL,*TOLERANCE;创建形位公差TOR,*TORUS;实体圆环体TR,*TRIM;修剪UC,*DDUCS;命名UCUCP,*DDUCSP;正交UCSUN,*UNITS;图形单位-UN,*-UNITS;命令行图形单位UNI,*UNION;并集V,*VIEW;视图-V,*-VIEW;命令行设置视图VP,*DDVPOINT;三维视图视点预置-VP,*VPOINT;命令行三维视图视点预置W,*WBLOCK;写块-W,*-WBLOCK;命令行的写块WE,*WEDGE;实体楔体X,*EXPLODE;这个不用说了吧,爆开XA,*XATTACH;外部参照XB,*XBIND;绑定-XB,*-XBIND;命令行的绑定XC,*XCLIP;定义外部参照或块剪裁边界,并且设置前剪裁面和后剪裁面XL,*XLINE;构造线XR,*XREF;外部参照管理器-XR,*-XREF;命令行的外部参照管理器Z,*ZOOM;缩放探索者快捷键一览表。
Java导出Excel完整例子+完整代码,使用easypoi导出Excel+通用工具类
Java导出Excel完整例子+完整代码,使用easypoi导出Excel+通用工具类前言:在之前写Excel导入导出功能的时候,使用更多的可能是apache 的poi,相信用过poi的应该都会感觉poi使用起来还是有点点麻烦的,所以,如果你是:不太熟悉poi的、不想写太多重复太多的、只是简单的导入导出的。
那么相信我,使用easypoi绝对很适合。
easypoi,正如同它的名字一样,主打的功能就是容易,让一个没见接触过poi的人员,就可以很方便的写出Excel导出、Excel导入,通过简单的注解就可以完成以前复杂的写法。
so,今天就用easypoi来做一个导出Excel的完整案例,项目是SpringBoot的项目一、引入pom依赖<!-- excle导入导出依赖包 start --><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.2.0</version></dependency><de pendency><groupId>cn.afterturn</groupId><artifactId>easyp oi-web</artifactId><version>3.2.0</version></dependency><de pendency><groupId>cn.afterturn</groupId><artifactId>easyp oi-annotation</artifactId><version>3.2.0</version></dependenc y><!-- excle导入导出依赖包 end -->注意:有的文章或者博客可能说可以不用上边三个依赖这么麻烦,直接用 easypoi-spring-boot-starter 一个依赖就可以了但是,用easypoi-spring-boot-starter 这个可能会导致你的springboot项目jar包依赖冲突,所以还是推荐使用上边的三个依赖二、定义需要导出的实体对象Userimport cn.afterturn.easypoi.excel.annotation.Excel;import cn .afterturn.easypoi.excel.annotation.ExcelTarget;import lombok.D ata;import java.io.Serializable;import java.util.Date;/*** 导出对应的实体类** @author caoju*/@ExcelTarget("user")@Datapublic class User implements Serializable {@Excel(name = "id",width=7)private In teger id;@Excel(name = "姓名",width=15)private String name;@Excel(name = "性别",replace = { "男_1", "女_2" },width=10)private Integer sex;@Excel(name = "创建时间",exportFormat = "yyyy-MM-dd HH:mm:ss",width=25)private Date createTime;}三、Excel导出工具类和导出自定义样式类不要看下面的两个类这么长,好像多复杂似的别担心!就是个工具类而已啦~你懂的,直接ctrl c、ctrl v(我也懂的,热爱编程的你,最喜欢的就是这个 c v大法,简单粗暴,不多bibi!hia hia hia~~~)import cn.afterturn.easypoi.excel.ExcelExportUtil;import cn. afterturn.easypoi.excel.entity.ExportParams;import cn.afterturn.e asypoi.excel.entity.TemplateExportParams;import cn.afterturn.ea sypoi.excel.entity.enmus.ExcelType;import com.xiaoleilu.hutool.d ate.DateUtil;import com.xiaoleilu.hutool.util.StrUtil;import lomb ok.extern.slf4j.Slf4j;import ermodel.Workbo ok;import javax.servlet.http.HttpServletResponse;import java.io.I OException;import java.io.OutputStream;import .URLEnc oder;import java.util.ArrayList;import java.util.List;import java.uti l.Map;/*** Excel导出工具类** @author caoju*/@Slf4jpublic class ExcelUtils {/** 允许导出的最大条数 */private static final Integer EXPORT_EXCEL_MAX_NUM = 10000;/*** 导出Excel** @param workbook workbook流* @param fileName 文件名* @param response 响应*/public static void exportExcel(Workbook workbook, String file Name, HttpServletResponse response) {//给文件名拼接上日期fileName = fileName + StrUtil.UNDERLINE + DateUtil.today();//输出文件try (OutputStream out = response.getOutputStream()) {//获取文件名并转码String name = URLEncoder.encode(fileName, "UTF-8");//设置编码response.setCharacterEncoding("UTF-8");//设置http响应头告诉浏览器,以下载的形式处理响应的数据response.setContentType("application/force-download");//设置下载文件的默认名称response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xlsx");//输出表格workbook.write(out);} catch (IOException e) {log.error("文件导出异常,详情如下:", e);} finally {try {if (workbook != null) {//关闭输出流workbook.close();}} catch (IOException e) {log.error("文件导出异常,详情如下:", e);}}}/*** 获取导出的 Workbook对象** @param title 大标题* @param sheetName 页签名* @param object 导出实体* @param list 数据集合* @return Workbook*/public static Workbook getWorkbook(Stri ng title, String sheetName, Class object, List list) {//判断导出数据是否为空if (list == null) {list = new ArrayList<>();}//判断导出数据数量是否超过限定值if (list.size() > EXPORT_EXCEL_MAX_NUM) {title = "导出数据行数超过:" + EXPORT_EXCEL_MAX_NUM + "条,无法导出、请添加查询条件后再进行导出!";list = new ArrayList<>();}//导出参数ExportParams exportParams = new ExportParams(title, sheetNa me, ExcelType.XSSF);//设置导出样式,可以不设置使用默认的样式,这里用的是自定义样式exportParams.setStyle(ExcelStyle.class);//输出Workbook流return ExcelExportUtil.exportExcel(exportParams, object, list);}/** * 获取导出的 Workbook对象** @param path 模板路径* @param map 导出内容map* @return Workbook*/public static Workbook getWorkboo k(String path, Map<String, Object> map) {//获取导出模板TemplateExportParams params = new TemplateExportParams(p ath);//设置导出样式params.setStyle(ExcelStyle.class);//输出Workbook流return ExcelExportUtil.exportExcel(params, map);}} import cn.afterturn.easypoi.excel.entity.params.ExcelExportE ntity;import cn.afterturn.easypoi.excel.entity.params.ExcelForEac hParams;import cn.afterturn.easypoi.excel.export.styler.ExcelExp ortStylerDefaultImpl;import cn.afterturn.easypoi.excel.export.sty ler.IExcelExportStyler;import ermodel.*;/*** Excel导出自定义样式类** @author caoju*/public class ExcelStyle extends ExcelExportSt ylerDefaultImpl implements IExcelExportStyler {private static fin al short STRING_FORMAT = (short) BuiltinFormats.getBuiltinFor mat("TEXT");private static final short FONT_SIZE_TEN = 10;privat e static final short FONT_SIZE_ELEVEN = 11;private static final sh ort FONT_SIZE_TWELVE = 12;/*** 大标题样式*/private CellStyle headerStyle;/*** 每列标题样式*/private CellStyle titleStyle;/*** 数据行样式*/private CellStyle styles;public ExcelStyle(Workbook workbook) {super(workbook);this.init(workbook);}/*** 初始化样式** @param workbook*/private void init(Workbook workbook) {/ /大标题样式this.headerStyle = initHeaderStyle(workbook);//每列标题样式this.titleStyle = initTitleStyle(workbook);//数据行样式this.styles = initStyles(workbook);}/*** 大标题样式** @param color* @return*/@Overridepublic CellStyle getHead erStyle(short color) {return headerStyle;}/*** 每列标题样式** @param color* @return*/@Overridepublic CellStyle getTitleS tyle(short color) {return titleStyle;}/*** 数据行样式** @param parity 可以用来表示奇偶行* @param entity 数据内容* @return 样式*/@Overridepublic CellStyle getStyles(boolean parity, ExcelExpo rtEntity entity) {return styles;}/*** 获取样式方法** @param dataRow 数据行* @param obj 对象* @param data 数据*/@Overridepublic CellStyle getStyles(Cell cell, int dataRow, Exc elExportEntity entity, Object obj, Object data) {return getStyles(t rue, entity);}/*** 模板使用的样式设置*/@Overridepublic CellStyle getT emplateStyles(boolean isSingle, ExcelForEachParams excelForEachParams) {return null;}/*** 初始化--大标题样式** @param workbook* @return*/private CellStyle initHeaderStyl e(Workbook workbook) {CellStyle style = getBaseCellStyle(work book);style.setFont(getFont(workbook, FONT_SIZE_TWELVE, tru e));return style;}/*** 初始化--每列标题样式** @param workbook* @return*/private CellStyle initTitleStyle( Workbook workbook) {CellStyle style = getBaseCellStyle(workbo ok);style.setFont(getFont(workbook, FONT_SIZE_ELEVEN, false)); //背景色 POI IndexedColors 编码与颜色枚举类对照 : https:///ju_362204801/article/details/1060791 71style.setFillForegroundColor(IndexedColors.PALE_BLUE.getInd ex());style.setFillPattern(FillPatternType.SOLID_FOREGROUND);re turn style;}/*** 初始化--数据行样式** @param workbook* @return*/private CellStyle initStyles(Wor kbook workbook) {CellStyle style = getBaseCellStyle(workbook); style.setFont(getFont(workbook, FONT_SIZE_TEN, false));style.se tDataFormat(STRING_FORMAT);return style;}/*** 基础样式** @return*/private CellStyle getBaseCellStyle(Workbook workb ook) {CellStyle style = workbook.createCellStyle();//下边框style.setBorderBottom(BorderStyle.THIN);//左边框style.setBorderLeft(BorderStyle.THIN);//上边框style.setBorderTop(BorderStyle.THIN);//右边框style.setBorderRight(BorderStyle.THIN);//水平居中style.setAlignment(HorizontalAlignment.CENTER);//上下居中style.setVerticalAlignment(VerticalAlignment.CENTER);//设置自动换行style.setWrapText(true);return style;}/*** 字体样式** @param size 字体大小* @param isBold 是否加粗* @return*/private Font getFont(Workbook workbook, short siz e, boolean isBold) {Font font = workbook.createFont();//字体样式font.setFontName("宋体");//是否加粗font.setBold(isBold);//字体大小font.setFontHeightInPoints(size);return font;}} 再说一下哈,上边面两个类虽然很长,但就是个工具类而已啦~ 不多说!你懂的!直接ctrl c、ctrl v四、测试导出方法的Controllerimport mon.collect.Lists;import com.qtyc.u tils.ExcelUtils;import org.springframework.web.bind.annotation. RequestMapping;import org.springframework.web.bind.annotat ion.RequestMethod;import org.springframework.web.bind.anno tation.RestController;import javax.servlet.http.HttpServletRespo nse;import java.util.Date;import java.util.List;/*** 导出Excel测试Controller** @author caoju*/@RestControllerpublic class ExcelE xportController {/*** 导出Excel测试*/@RequestMapping(value = "/exportExcelTest", method = Req uestMethod.GET)public void exportExcelTest(HttpServletRespon se response) {List<User> personList = this.findUser();ExcelUtils.e xportExcel(ExcelUtils.getWorkbook("用户信息列表", "用户信息", User.class, personList), "用户信息列表导出", response);}/*** 模拟数据库查询返回用户信息*/private List<User> findUser() {List<User> list = Lists.newArray List();User user = new User();user.setId(10);user.setName("张三");user.setSex(1);user.setCreateTime(new Date());list.add(user);Us er user1 = new User();user1.setId(26);user1.setName("李四");user1.setSex(1);user1.setCreateTime(new Date());list.add(user1 );User user2 = new User();user2.setId(28);user2.setName("王丽");user2.setSex(2);user2.setCreateTime(new Date());list.add(user2 );return list;}}五、测试浏览器输入:可以看到浏览器左下角弹出了下载窗口,自动下载了Excel打开下载的文件夹可以看到刚才下载的Excel打开Excel看下里边的内容可以看到咱们想要导出的内容已经导出了,其中的标题,表头,以及每行每列的背景颜色,字体等等都可以通过代码根据自己的需求来自定义的。
WinCC上可以很方便的编写VB脚本和C脚本
WinCC上可以很方便的编写VB脚本和C脚本,但是调试起来还是比较费劲的。
下面介绍一下个人的应用体会。
1,VB,最好安装VB6,先在VB6里面编写程序,然后再放到WinCC的脚本中,事半功倍,毕竟VB的调试非常方便。
a,插入引用注意选择OLE Automation 和WinCC *****;b,可以直接在VB里面调用WinCC的全部变量,部,外部全可以:如下:c,在VB里面监视WinCC的变量:d,调试完毕,程序拷贝到WinCC 的脚本中。
2,C语言系统提供了一个应用程序窗口,如下,只要把他拖到画面窗口即可:2,使用Printf函数,把需要调试的容打印出来;3,效果如下:希望对大家有点用处。
下面容来自网络,感原文作者。
wenku.baidu./link?url=vEykUwJBHY3kamu6EGqrO8WX1XVc6_IMzRfnfkcwe5 JpmjmPLUHmsod1xIDeQUpd1MJgUMD9IlS8bcIsH6GWpHwjuq76wAjG6NjSk ndSrQKVbs 操作wincc画面脚本总结一:不使用变量单纯的操作界面1.操作某个画面中控件的属性如Home1.Pdl(总窗体)下的画面窗口2(画面窗口)Sub OnClick(ByVal Item)Dim objCircleDim screennameDim pwnameSet objCircle= ScreenItems("圆1" )objCircle.Radius = 60Set screenname=HMIRuntime.Screens("Home1") //获取要操作的窗体Set pwname=screenname.ScreenItems("画面窗口2") //获取要操作的控件,这里填入你要操作的控件名MsgBox(objCircle.Radius) //输出圆的半径MsgBox (pwname.Picturename) //输出当前画面窗口2的名字End Sub注意当调用某窗体下的某控件的某个属性时,需要声明两个对象,一个接纳这个控件,一个接纳值例如Dim objectDim valueSet object =HMIRuntime.Screens("Home1").ScreenItems("画面窗口2")Set value=object.picturename2.更改画面窗口的对象Sub OnClick(Byval Item)Dim opObjectSet opObject=HMIRuntime.Screens ("Home1").ScreenItems("画面窗口2")opObject.PictureName="Page1.Pdl"End Sub3.设置文本Set titleTxt=HMIRuntime.Screens ("Home1").ScreenItems("静态文本2") titleTxt.Text =titleTxt.Text+"EF" //获取文本的值并追加字符4.vb 字符串函数VB的字符串截取函数有Left(字符串,n),返回字符串前N 个字符;Mid(字符串,p,n),从第p个字符开始,向后截取N个字符;right (字符串,n),返回字符串的最后n个字符。
C语言教程
§ 1 C 语言概述 一.C 语言的发展 1.起源时间:二十世纪七十年代初。 2.作用:既可以用来编制系统软件,也可以用来 编制应用软件,是目前世界上流行的一种程序语言 (编程语言) 。 【注: (1)程序语言:是包含一组指令及一套语法规则 的语言。 (2)源程序:利用程序语言所规则的指令和语法 规则形成一系列具有特点功能的代码集合(文件) 。 该代码经过翻译系统编译(解释)成计算机能够识 别的符号。 (3)三类计算机语言: 0 1 机器语言: 机器语言 或称为二 进制 代码语言 ,计算机 可以直接识别,不需要 进行任何翻译。它是第 一代的计算机语言。 0 2 汇编语言: 汇编语言 (Assembly Language) 是面向机器 的程序 设计 语言 。它用 助记符 (Memoni) 代替操 作码,用地址符号 (Symbol) 或标号 (Label) 代替 地址码。使用汇编语言 编写的程序,机器不能 直接识别,要由一种程 序(汇编器)将汇编语 言翻译成机器语言,汇 编语言的长处在于编写 高效且需要对机器硬件精确控制的程序。 0 3 高级语言: 高级语言 与计算机 的硬 件结构及 指令系统 无关,它有更强的表达 能力,可方便地表示数 据的运算和程序的控制 结构,能更好的描述各 种算法,而且容易学习 掌握。但高级语言编译 生成的程序代码一般比 用汇编程序语言设计的 程序代码要长,执行的速度也慢。 高级语言程序 “ 看不见 ” 机器的硬件结构, 不 能用于编写直接访问机 器硬件资源的系统软件 或设备控制软件。为此 ,一些高级语言提供了 与汇编语言之间的调用接口。 3.本质:编译方式的结构化高级程序设计语言, 但保留了低级语言的特性。 4.操作方式: (1)命令行方式: (DOS 状态下,通过键入命令进 行操作) (2) 集成开发环境方式 (IDE) : Turbo C, Turbo C++, Visual C++。
实验6-传感器之火焰篇
火焰是由各种燃烧生成物、中间物、高温气体、碳氢物质以及无机物质为主体的高温固体微粒构成的。
火焰的热辐射具有离散光谱的气体辐射和连续光谱的固体辐射。
不同燃烧物的火焰辐射强度、波长分布有所差异,但总体来说,其对应火焰温度的 1 ~ 2 μ m 近红外波长域具有最大的辐射强度。
例如汽油燃烧时的火焰辐射强度的波长。
火焰传感器是机器人专门用来搜寻火源的传感器,当然火焰传感器也可以用来检测光线的亮度,只是本传感器对火焰特别灵敏。
火焰传感器利用红外线对对火焰非常敏感的特点,使用特制的红外线接受管来检测火焰,然后把火焰的亮度转化为高低变化的电平信号,输入到中央处理器中,中央处理器根据信号的变化做出相应的程序处理。
火焰传感器是探测在物质燃烧时,产生烟雾和放出热量的同时,也产生可见的或大气中没有的不可见的光辐射。
火焰传感器又称感光式火灾传感器,它是用于响应火灾的光特性,即探测火焰燃烧的光照强度和火焰的闪烁频率的一种火灾传感器。
火焰传感器实验简介6.1讯方公司传感器实验2 1、通过该实验项目,学生能够了解火焰传感器的硬件电路和工作原理;2、通过该实验项目,学生能够学会编写火焰传感器的程序。
1、编写一个读取火焰传感器输出电平信号的程序;2、将火焰检测状态做简单的处理显示,正常无火焰状态为0,检测到火焰状态为1;3、用按键KEY1控制ZIGBEEN是否发送数据。
6.4.1硬件部分1、ZIGBEE调试底板一个;图6-1 ZIGBEE调试底板2、20PIN转接线一条和带USB的J-Link仿真器一个;图6-2 J-Link仿真器实验内容6.3实验目的6.2实验设备6.4电源开关电源传感器C端口指示灯 2J-LINK接口ZigBee_DEBUG复位键节点按键拨码开关ZigBe按键红外发射指示灯1ZigBee复位键可调电阻传感器A端口传感器B端口方口USB线,另一端连接电上电指示灯20PIN转接线,另一端接转接板实验六 传感器之火焰篇33、转接板一个;图 6-3 转接板4、9~12V 电源适配器2个;图6-4 电源适配器5、带普通USB 线的ZIGBEE 仿真器一个;图6-5 ZIGBEE 仿真器普通USB 线10PIN 转接线20PIN 转接线接口10PIN 转接线接口串口接口电源(上)和状态指示灯讯方公司 传感器实验4 6、智能网关一台;图6-6 智能网关7、ZIGBEE 模块两个;图 5-7 ZIGBEE 模块8、火焰传感器一个;图 6-8 火焰传感器ZigBee 模块组合接口电源及开关开关按钮显示屏SD 卡USB 下载数据线+5V 输入 TTL 信号输出 GND 输入输出信号指示灯,低有效火焰感应探头模拟信号输出灵敏度调节旋钮,顺时针增大实验六 传感器之火焰篇59、10PIN 转接线和传感器连接线各一条。
C编写Tcl文件系统监测扩展
1引言在内存里维护着一个保存了文件md5码的树形结构来模拟实际的文件系统,定时遍历文件系统与该树形结构,发现不同或比较存在两者的md5码,来判断文件是否发生变化。
这个过程是比较复杂的,而且bug不断,所以最后弃之不用了。
有人说用ReadDirectoryChangeW来做的话会很方便,不过一来执着于只用Tcl来解决问题,再者长久没用C,在Tcl 实现文件监控也暂时搁置下来了。
事情的发展总是需要一些触发,前些时候在看oratcl的源码,大致想弄清楚Tcl与Oracle之间编码转化的问题,最后问题倒是没有解决,但是对于使用C来开发Tcl模块有了初步感性上的认识。
当然,尝试的对象就是文件监控了。
2Hello,World下面就编写这个模块时的一些想法结合必要的框架,来介绍一下开发Tcl的C extension。
而关于编程的学习,一般总是从Hello,World开始的,这里也不例外。
例子来自于Tcl的wiki站,先列出代码:#include<tcl.h>static intHello_Cmd(ClientData cdata,Tcl_Interp*interp,int objc,Tcl_Obj*CONST objv[]){Tcl_SetObjResult(interp,Tcl_NewStringObj("Hello, World!",-1));return TCL_OK;}int DLLEXPORTHello_Init(Tcl_Interp*interp){if(Tcl_InitStubs(interp,TCL_VERSION,0)== NULL){return TCL_ERROR;}if(Tcl_PkgProvide(interp,"Hello","1.0")== TCL_ERROR){return TCL_ERROR;}Tcl_CreateObjCommand(interp,"hello", Hello_Cmd,NULL,NULL);return TCL_OK;}当Tcl调用以上代码编译而成的dll文件时会查找函数PKG_Init作为模块的入口,其中PKG是模块的名字,这里就是Hello。
cad3d制图命令
3DARRAY:创建三维阵列 3A3DFACE:创建三维面 3F3DORBIT:控制在三维空间中交互式查看对象 3DO3DPOLY:在三维空间中使用“连续”线型创建由直线段组成的多段线 3P ADCENTER:管理内容 ADCALIGN:在二维和三维空间中将某对象与其他对象对齐 ALAPPLOAD:加载或卸载应用程序并指定启动时要加载的应用程序 APARC:创建圆弧 AAREA:计算对象或指定区域的面积和周长 AAARRAY:创建按指定方式排列的多重对象副本 ARATTDEF:创建属性定义 ATTATTEDIT:改变属性信息 ATEATTEXT:提取属性数据 DDATTEXTBHATCH:使用图案填充封闭区域或选定对象 H、BHBLOCK:根据选定对象创建块定义 BBOUNDARY:从封闭区域创建面域或多段线 BOBREAK:部分删除对象或把对象分解为两部分 BRCHAMFER:给对象的边加倒角 CHACHANGE:修改现有对象的特性 -CHCIRCLE:创建圆形 CCOLOR:定义新对象的颜色 COLCOPY:复制对象 CO、CPDBCONNECT:为外部数据库表提供 AutoCAD 接口 AAD、AEX、ALI、ASQ、ARO、ASE、DBCDDEDIT:编辑文字和属性定义 EDDDVPOINT:设置三维观察方向 VPDIMALIGNED:创建对齐线性标注 DALDIMANGULAR:创建角度标注 DANDIMBASELINE:从上一个或选定标注的基线处创建线性、角度或坐标标注 DBA DIMCENTER:创建圆和圆弧的圆心标记或中心线 DCEDIMCONTINUE:从上一个或选定标注的第二尺寸界线处创建线性、角度或坐标标注 DCODIMDIAMETER:创建圆和圆弧的直径标注 DDIDIMEDIT:编辑标注 DEDDIMLINEAR:创建线性尺寸标注 DLIDIMORDINATE:创建坐标点标注 DORDIMOVERRIDE:替代标注系统变量 DOVDIMRADIUS:创建圆和圆弧的半径标注 DRADIMSTYLE:创建或修改标注样式 DDIMTEDIT:移动和旋转标注文字 DIMTEDDIST:测量两点之间的距离和角度 DIDIVIDE:将点对象或块沿对象的长度或周长等间隔排列 DIVDONUT:绘制填充的圆和环 DODRAWORDER:修改图像和其他对象的显示顺序 DRDSETTINGS:指定捕捉模式、栅格、极坐标和对象捕捉追踪的设置 DS、RM、SE DSVIEWER:打开“鸟瞰视图”窗口 AVDVIEW:定义平行投影或透视视图 DVELLIPSE:创建椭圆或椭圆弧 ELERASE:从图形中删除对象 EEXPLODE:将组合对象分解为对象组件 XEXPORT:以其他文件格式保存对象 EXPEXTEND:延伸对象到另一对象 EXEXTRUDE:通过拉伸现有二维对象来创建三维原型 EXTFILLET:给对象的边加圆角 FFILTER:创建可重复使用的过滤器以便根据特性选择对象 FIGROUP:创建对象的命名选择集 GHATCH:用图案填充一块指定边界的区域 -HHATCHEDIT:修改现有的图案填充对象 HEHIDE:重生成三维模型时不显示隐藏线 HIIMAGE:管理图像 IMIMAGEADJUST:控制选定图像的亮度、对比度和褪色度 IAD IMAGEATTACH:向当前图形中附着新的图像对象 IATIMAGECLIP:为图像对象创建新剪裁边界 ICLIMPORT:向 AutoCAD 输入文件 IMPINSERT:将命名块或图形插入到当前图形中 IINTERFERE:用两个或多个三维实体的公用部分创建三维复合实体 INF INTERSECT:用两个或多个实体或面域的交集创建复合实体或面域并删除交集以外的部分 ININSERTOBJ:插入链接或嵌入对象 IOLAYER:管理图层和图层特性 LA-LAYOUT:创建新布局,重命名、复制、保存或删除现有布局 LO LEADER:创建一条引线将注释与一个几何特征相连 LEADLENGTHEN:拉长对象 LENLINE:创建直线段 LLINETYPE:创建、加载和设置线型 LTLIST:显示选定对象的数据库信息 LI、LSLTSCALE:设置线型比例因子 LTSLWEIGHT: LWMATCHPROP:设置当前线宽、线宽显示选项和线宽单位 MAMEASURE:将点对象或块按指定的间距放置 MEMIRROR:创建对象的镜像副本 MIMLINE:创建多重平行线 MLMOVE:在指定方向上按指定距离移动对象 MMSPACE:从图纸空间切换到模型空间视口 MSMTEXT:创建多行文字 T、MTMVIEW:创建浮动视口和打开现有的浮动视口 MVOFFSET:创建同心圆、平行线和平行曲线 OOPTIONS:自定义 AutoCAD 设置 GR、OP、PROSNAP:设置对象捕捉模式 OSPAN:移动当前视口中显示的图形 PPASTESPEC:插入剪贴板数据并控制数据格式 PAPEDIT:编辑多段线和三维多边形网格 PEPLINE:创建二维多段线 PLPRINT :将图形打印到打印设备或文件 PLOTPOINT:创建点对象 POPOLYGON:创建闭合的等边多段线 POLPREVIEW:显示打印图形的效果 PREPROPERTIES:控制现有对象的特性 CH、MO PROPERTIESCLOSE:关闭“特性”窗口 PRCLOSEPSPACE:从模型空间视口切换到图纸空间 PSPURGE:删除图形数据库中没有使用的命名对象,例如块或图层 PU QLEADER:快速创建引线和引线注释 LEQUIT:退出 AutoCAD EXITRECTANG:绘制矩形多段线 RECREDRAW:刷新显示当前视口 RREDRAWALL:刷新显示所有视口 RAREGEN:重生成图形并刷新显示当前视口 REREGENALL:重新生成图形并刷新所有视口 REAREGION:从现有对象的选择集中创建面域对象 REGRENAME:修改对象名 RENRENDER:创建三维线框或实体模型的具有真实感的渲染图像 RR REVOLVE:绕轴旋转二维对象以创建实体 REVRPREF:设置渲染系统配置 RPRROTATE:绕基点移动对象 ROSCALE:在 X、Y 和 Z 方向等比例放大或缩小对象 SCSCRIPT:用脚本文件执行一系列命令 SCRSECTION:用剖切平面和实体截交创建面域 SECSETVAR:列出系统变量并修改变量值 SETSLICE:用平面剖切一组实体 SLSNAP:规定光标按指定的间距移动 SNSOLID:创建二维填充多边形 SOSPELL:检查图形中文字的拼写 SPSPLINE:创建二次或三次 (NURBS) 样条曲线 SPLSPLINEDIT:编辑样条曲线对象 SPESTRETCH:移动或拉伸对象 SSTYLE:创建或修改已命名的文字样式以及设置图形中文字的当前样式 ST SUBTRACT:用差集创建组合面域或实体 SUTABLET:校准、配置、打开和关闭已安装的数字化仪 TATHICKNESS:设置当前三维实体的厚度 THTILEMODE:使“模型”选项卡或最后一个布局选项卡当前化 TI、TM TOLERANCE:创建形位公差标注 TOLTOOLBAR:显示、隐藏和自定义工具栏 TOTORUS:创建圆环形实体 TORTRIM:用其他对象定义的剪切边修剪对象 TRUNION:通过并运算创建组合面域或实体 UNIUNITS:设置坐标和角度的显示格式和精度 UNVIEW:保存和恢复已命名的视图 VVPOINT:设置图形的三维直观图的查看方向 -VPWBLOCK:将块对象写入新图形文件 WWEDGE:创建三维实体使其倾斜面尖端沿 X 轴正向 WEXATTACH:将外部参照附着到当前图形中 XAXBIND:将外部参照依赖符号绑定到图形中 XBXCLIP:定义外部参照或块剪裁边界,并且设置前剪裁面和后剪裁面 XC XLINE:创建无限长的直线(即参照线) XLXREF:控制图形中的外部参照 XRZOOM:放大或缩小当前视口对象的外观尺寸 ZAUTO CAD快捷键常见命令(一)字母类1、对象特性ADC, *ADCENTER(设计中心“Ctrl+2”)CH, MO *PROPERTIES(修改特性“Ctrl+1”)MA, *MATCHPROP(属性匹配)ST, *STYLE(文字样式)COL, *COLOR(设置颜色)LA, *LAYER(图层****作)LT, *LINETYPE(线形)LTS, *LTSCALE(线形比例)LW, *LWEIGHT (线宽)UN, *UNITS(图形单位)ATT, *ATTDEF(属性定义)ATE, *ATTEDIT(编辑属性)BO, *BOUNDARY(边界创建,包括创建闭合多段线和面域)AL, *ALIGN(对齐)EXIT, *QUIT(退出)EXP, *EXPORT(输出其它格式文件)IMP, *IMPORT(输入文件)OP,PR *OPTIONS(自定义CAD设置)PRINT, *PLOT(打印)PU, *PURGE(清除**)R, *REDRAW(重新生成)REN, *RENAME(重命名)SN, *SNAP(捕捉栅格)DS, *DSETTINGS(设置极轴追踪)OS, *OSNAP(设置捕捉模式)PRE, *PREVIEW(打印预览)TO, *TOOLBAR(工具栏)V, *VIEW(命名视图)AA, *AREA(面积)DI, *DIST(距离)LI, *LIST(显示图形数据信息)2、AUTO CAD快捷绘图命令:PO, *POINT(点)L, *LINE(直线)XL, *XLINE(射线)PL, *PLINE(多段线)ML, *MLINE(多线)SPL, *SPLINE(样条曲线)POL, *POLYGON(正多边形)REC, *RECTANGLE(矩形)C, *CIRCLE(圆)A, *ARC(圆弧)DO, *DONUT(圆环)EL, *ELLIPSE(椭圆)REG, *REGION(面域)MT, *MTEXT(多行文本)T, *MTEXT(多行文本)B, *BLOCK(块定义)I, *INSERT(插入块)W, *WBLOCK(定义块文件)DIV, *DIVIDE(等分)H, *BHATCH(填充)3、AUTO CAD快捷修改命令:CO, *COPY(复制)MI, *MIRROR(镜像)AR, *ARRAY(阵列)O, *OFFSET(偏移)RO, *ROTATE(旋转)M, *MOVE(移动)E, DEL键 *ERASE(删除)X, *EXPLODE(分解)TR, *TRIM(修剪)EX, *EXTEND(延伸)S, *STRETCH(拉伸)LEN, *LENGTHEN(直线拉长)SC, *SCALE(比例缩放)BR, *BREAK(打断)CHA, *CHAMFER(倒角)F, *FILLET(倒圆角)PE, *PEDIT(多段线编辑)ED, *DDEDIT(修改文本)4、AUTO CAD快捷视窗缩放:P, *PAN(平移)Z+空格+空格, *实时缩放Z, *局部放大Z+P, *返回上一视图Z+E, *显示全图5、AUTO CAD快捷尺寸标注:DLI, *DIMLINEAR(直线标注)DAL, *DIMALIGNED(对齐标注)DRA, *DIMRADIUS(半径标注)DDI, *DIMDIAMETER(直径标注)DAN, *DIMANGULAR(角度标注)DCE, *DIMCENTER(中心标注)DOR, *DIMORDINATE(点标注)TOL, *TOLERANCE(标注形位公差)LE, *QLEADER(快速引出标注)DBA, *DIMBASELINE(基线标注)DCO, *DIMCONTINUE(连续标注)D, *DIMSTYLE(标注样式)DED, *DIMEDIT(编辑标注)DOV, *DIMOVERRIDE(替换标注系统变量)(二)AUTO CAD快捷常用CTRL快捷键【CTRL】+1 *PROPERTIES(修改特性) 【CTRL】+2 *ADCENTER(设计中心)【CTRL】+O *OPEN(打开文件)【CTRL】+N、M *NEW(新建文件)【CTRL】+P *PRINT(打印文件)【CTRL】+S *SAVE(保存文件)【CTRL】+Z *UNDO(放弃)【CTRL】+X *CUTCLIP(剪切)【CTRL】+C *COPYCLIP(复制)【CTRL】+V *PASTECLIP(粘贴)【CTRL】+B *SNAP(栅格捕捉)【CTRL】+F *OSNAP(对象捕捉)【CTRL】+G *GRID(栅格)【CTRL】+L *ORTHO(正交)【CTRL】+W *(对象追踪)【CTRL】+U *(极轴)(三)AUTO CAD快捷常用功能键【F1】 *HELP(帮助)【F2】 *(文本窗口)【F3】 *OSNAP(对象捕捉)【F7】 *GRIP(栅格)【F8】 *ORTHO(正交)。
2022年9月至10年9月全国计算机等级考试二级C笔试试题及答案
2022年9月至10年9月全国计算机等级考试二级C笔试试题及答案1)一个栈的初始状态为空。
现将元素1、2、3、4、5、A、B、C、D、E依次入栈,然后再依次出栈,则元素出栈的顺序是()。
A)123456ABCDEB)EDCBA54321C)ABCDE12345D)54321EDCBA(2)下列叙述中正确的是()。
A)循环队列有队头和队尾两个指针,因此,循环队列是非线性结构B)在循环队列中,只需要队头指针就能反映队列中元素的动态变化情况C)在循环队列中,只需要队尾指针就能反映队列中元素的动态变化情况D)循环队列中元素的个数是由队头指针和队尾指针共同决定(3)在长度为n的有序线性表中进行二分查找,最坏情况下需要比较的次数是()。
A)O(n)B)O(n2)C)O(log2n)D)O(nlog2n)(4)下列叙述中正确的是()。
A)顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B)顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C)顺序存储结构能存储有序表,链式存储结构不能存储有序表D)链式存储结构比顺序存储结构节省存储空间(5)数据流图中带有箭头的线段表示的是()。
A)控制流C)模块调用B)事件驱动D)数据流(6)在软件开发中,需求分析阶段可以使用的工具是()。
A)N-S图C)PAD图B)DFD图D)程序流程图(7)在面向对象方法中,不属于“对象”基本特点的是()。
A)一致性C)多态性B)分类性D)标识唯一性(9)在数据管理技术发展的三个阶段中,数据共享最好的是()。
A)人工管理阶段C)数据库系统阶段(10)有三个关系R、S和T如下:由关系R和S通过运算得到关系T,则所使用的运算为()。
A)笛卡尔积B)交C)并D)自然连接(11)在下列原型所示的C++函数中,按“传值”方式传递参数的是()。
A)voidf1(int某);B)voidf2(int某某);C)voidf3(contint某某);D)voidf4(int&某)(12)在C++中,编译系统自动为一个类生成缺省构造函数的条件是()。
Java_IO知识测试B卷
集合部分测试题考试宣言:同学们, 考试考多少分不是我们的目的! 排在班级多少的名次也不是我们的初衷!我们考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了, 那么不用怕, 考完试后, 导师讲解的时候你要注意听! 那时候学会了, 记住了, 也一样不影响你高薪就业!本套题共40道不定项选择题,其中单选30道,多选10道。
单选2分/题,多选4分/题。
多选题不全对半分,全对满分。
1.所有异常和错误的父类是(D)a)Throwable类b)Error类c)Exception类d)RuntimeException类2.下列关键字必须和try一起使用的有(CD)a)finalb)finalizec)finally3.实现下列哪个接口,可以启用序列化功能(B)a)Runnable接口b)Serializable接口c)Comparable接口d)Comparator接口4.当方法遇到异常(编译时异常)又不知如何处理时,下列哪种说法是正确的(A)a)捕获异常(try{…}catch{…})b)抛出异常(throw 异常对象)c)声明异常(throws 异常类型)d)嵌套异常5.如何自定义一个异常类(B )a)让这个类继承Exceptionb)让这个类继承RuntimeExceptionc)让这个类继承Comparatord)让这个类继承Comparable6.可以用来描述文件或者文件夹的类是(A)b)FileStreamc)OutputStreamd)FileReader7.File类中,创建多级目录,可以通过以下那个方法(D)1a)create()b)createNewFile()c)mkdir()d)mkdirs()8.下列哪一个import命令可以使我们在程序中创建输入/输出流对象(B)1a)import .*;b)import .*;c)import .*;d)import .*;9.下列关于Java中文件输入输出的说法正确的是(AB)1a)在Java中,文件的输入输出功能是通过流来实现的b)如果要把数据写入一个文件中,需要创建一个输出流对象c)字符流在某些方面比如图片的处理,比字节流更方便d)可以通过Reader r = new Reader(“c:\\”);创建一个输入流对象10.获取指定目录下所有的文件,可以通过哪个方法实现:()1a)list()b)getDir();c)listFile()d)listFiles()11.下面用字符流能成功拷贝的文件有(C)a)java基础自测题.docb)学生考试答案.xmlc) xlsx12.看下面程序,加入里面有一个文字”a”,请问该程序输出结果是(C)public static void demo1() throws FileNotFoundException, IOException {13.InputStream is = new InputStream(""); vi 这个文件有20Gb 的大小,复制该文件最快的方式是(B)a)FileInputStream fis = new FileInputStream("双元.jpg");FileOutputStream fos = new FileOutputStream("");int b;while((b = ()) != -1) {(b);}();();b)FileInputStream fis = new FileInputStream("致青春.mp3");FileOutputStream fos = new FileOutputStream("");byte[] arr = new byte[()];(arr);(arr);();();c)FileInputStream fis = new FileInputStream("");FileOutputStream fos = new FileOutputStream("");byte[] arr = new byte[1024];int len;while((len = (arr)) != -1) {(arr,0,len);}();();d)FileInputStream fis = new FileInputStream("");FileOutputStream fos = new FileOutputStream("");byte[] arr = new byte[1024*8];int len;while((len = (arr)) != -1) {(arr,0,len);}();();14.BufferedInputStream这个类是哪个设计模式的体现(B)!a)单例设计模式b)装饰设计模式c)工厂设计模式d)适配器模式15.下面说法正确的是(D)!a)OutputStream是个接口//抽象类b)Writer是个接口//抽象类集合的顶层才是接口c)BufferedOutputStream是FileOutputStream的父类d)Reader是InputStreamReader的父类16.下列关于Java I/O中字符输入流Reader类中的read方法描述错误的是(A)!a)read()方法的返回值类型为char类型b)read()方法的返回值类型为int类型c)read()方法的返回值如果为-1,表示到流的末尾d)read(char[] cbuf)方法表示将读到的多个字符存入字符数组cbuf中17.下列是哪些方法是可以让FileWriter类的对象调用的(ABCD)a)write(char[] cbuf)写入字符数组b)write(char[] cbuf, int off, int len)写入字符数组的某一部分c)write(int c)写入单个字符d)write(String str)写入字符串18.假设存在文件,内容为”大家好”,以下代码运行的结果为(A)public class Test {public static void main(String[] args) throws IOException { FileReader fr = new FileReader("");FileWriter fw = new FileWriter("");int c;while((c = ()) != -1) {(); //没有写东西应该把C传进去}();();}}a)编译报错b)程序正常运行,文件中的内容为”大家好”c)程序正常运行,但是没有生成文件d)程序正常运行,但是文件中是乱码19.FileWriter类直接继承哪个类(A)!a)OutputStreamWriterb)Writerc)BufferedWriterd)InputStreamReader20.关于自定义字符数组拷贝文件的说法错误的是(AC)a)自定义的数组越大越好 //不能超过内存,要看拷贝内存的大小b)自定义的数组既不能太大,也不能太小c)可以使用FileReader类的available()方法的返回值作为数组的大小 //这个类里没有这个方法d)建议定义为1024的整数倍,但不能太大,防止内存溢出21.假设文件中存了2000个汉字,下列程序运行后输出的结果是(A)public class Test {public static void main(String[] args) throws IOException { FileReader fr = new FileReader("");FileWriter fw = new FileWriter("");int count = 0;char[] arr = new char[1024];int len;while((len = (arr)) != -1) {count++;(arr,0,len);}();();}}a)1b)2c)3d)422.下面哪个是字符流通向字节流的桥梁(B)!a)InputStreamReaderb)OutputStreamWriterc)FileReaderd)BufferedReader23.BufferedReader读取一行时,判断该行是否结束的标志是什么(D)a)\tb) -2c) -1d)\r\n24.缓冲流是否需要关闭(B)a)否b)是c)关不关都可以d)以上答案都不对25.以下代码运行后输出的结果是(A)public class Test {public static void main(String[] args) throws IOException { }public static int fun(int num) {if(num == 1) {return 1;}else {return num * fun(num - 1);}}}a)120b)720c)24d)626.以下代码运行后输出的结果是(C)public class Demo8_Digui {public static void main(String[] args) {}public static int fun(int num) {if(num == 1 || num == 2) {return 1;}else {return fun(num - 2) + fun(num - 1);}}}a)34b)13c)21d)527.为了提高读写性能,用下面的哪些流(ABCD)a)BufferedInputStreamb)BufferedOutputStreamc)BufferedReaderd)BufferedWriter28.下列关于Java I/O中哪个流可以将多个文件中的内容合并到一个文件中(序列流)( C )a)SequenceOutputStreamb)InputStreamReaderc)SequenceInputStreamd)OutputStreamWriter29.下面的哪个流表示内存输出流( A )a)ByteArrayOutputStreamb)ByteArrayInputStreamc)ObjectInputStreamd)ObjectOutputStream30.下面说法正确的是( A)a)可以通过ByteArrayOutputStream和ByteArrayInputStream实现文件的复制b)不可以通过ByteArrayOutputStream和ByteArrayInputStream实现文件的复制c)用ByteArrayOutputStream和ByteArrayInputStream实现文件的复制,会出现乱码//不会d)用ByteArrayOutputStream可以解决字节流读取中文到程序中出现的乱码问题31.下面说法错误的是( D )a)ByteArrayOutputStream内部封装了字节数组b)new ByteArrayOutputStream()利用空参构造创建对象时,内部的数组的大小为32c)toByteArray()以字节数组的形式返回数据d)以上说法都不对32.关于对象操作流的描述正确的是(AD )a)ObjectOutputStream流是将对象以Object类型写入到文件中b)ObjectOutputStream流是将内容写入到Object对象中c)ObjectInputStream流是读取Object对象里的内容d)ObjectInputStream是从文件中读取一个对象出来,读出来是Object类型的,需要进行强制类型转换33.ObjectOputStream类中的哪个方法可以将对象写入到文件中( C )a)write(Object obj)b)append(Object obj)c)writeObject(Object obj)d)objectWrite(Object obj)34.下列选项中哪个不属于I/O流( C)a)FileWriterb)FileReaderc)Propertiesd)PrintStream35.下列说法不正确的是( D )a)Properties 类表示了一个持久的属性集b)Properties 可保存在流中或从流中加载 //store方法c)属性列表中每个键及其对应值都是一个字符串d)以上说法都不对36.以下代码运行后输出的结果是( C )public class Test {public static void main(String[] args) throws IOException { Properties prop = new Properties();("name", "张三");("tel", "");Enumeration<String> en = (Enumeration<String>) ();while()) {String key = ();String value = (key);+ ":");}}}a)name:telb)tel:namec)张三::d):张三37.关于Properties类中的load和store方法说法正确的是( AB)a)load方法从流中读取属性列表,键值对,加载到Properties对象中b)store方法将Properties对象中的键值对,写入到流中c)load方法将Properties (Properties)对象中的内容加载到文件中//反了d)以上说法都不对。
多种NC问题及解决办法
多种NC问题及解决办法一、内存溢出(1)重启eclipse(2)或者看看设置下参数,(-Xms256M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=256M), nchome里bin/ncSysConfigeclipse-窗口-首选项-已安装的jre-编辑jre-缺省vm参数项目点右键-调试方式-调试-自变量-vm自变量二、所有信息就都输出到控制台(1)把sql日至都打出来,NC_HOME/ierp/bin/logger-config.properties 名字改下,这样所有信息就都输出到控制台,你点击按钮后,看看后台输出的sql,就是到都更新了哪些表了(2)修改D:\ufsoft\ufnc502\ierp\bin\logger-config.properties将anonymous.level=ERRORanonymous.pattern=[%t] %X{remoteAddr} %X{remotePort} %d{yyyy/MM/dd HH:mm:ss} [%A] %p - %m %nanonymous.file=./nclogs/${server}/anony-log.loganonymous.size.maxSize=5MBanonymous.size.maxIndex=20修改为anonymous.level=TRACEanonymous.pattern=[%t] %X{remoteAddr} %X{remotePort} %d{yyyy/MM/dd HH:mm:ss} [%A] %p - %m %n三、寻找错误有错了先点清理控制台,再触发错误的事件,再从控制台的server端寻找错误四、配置文件路径nchome\ierp\bin\prop.xml五、帐套管理路径nchome\ierp\bin\account.xml五、模块注册错乱用集团登陆,在二次开发工具-系统管理工具-自定义菜单--恢复默认结构在二次开发工具-系统管理工具-自定义菜单可以自定义结构六、打断点时候有时候截出的信息过多,有省略用System.out.print(信息)七、中间启动不起来(1)去掉hr开头的模块(2)换个ufjdk八、直接起nchome显示4行就不在继续server的IP改成127.0.0.1九、获得nchome所在文件夹RuntimeEnv.getInstance().getNCHome()十、读取nc服务器信息的String url="http://"+InvocationInfoProxy.getInstance().getServerHost ()+":"+InvocationInfoProxy.g etInstance().getServerPort();十一、javax.swing.JPanel 的 main() 中发生异常/doc/5014152978.html,ng.NoClassDefFoun dError: netscape/javascript/JSObjectat/doc/5014152978.html,ng.Class.forName0(Nati ve Method)at/doc/5014152978.html,ng.Class.forName(Class. java:164)at nc.starter.test.JStarter.StartNC(JStarter.java:111)at nc.starter.test.JStarter.main(JStarter.java:373)没有导入plugin 的jar包十二、/doc/5014152978.html,ponentNotFoundExcept ion: Component:nc.itf.pd.inner.IPubFreeze,Detail Message:Can not find component(both in jndi and ESA)EJB问题,删掉EJB临时文件,重启中间键object is not an instance of declaring class也有可能是接口、实现方法没有定义,定义后重新部署十三、java中的各种路径public static void main(String[] args){System.out.println(newFile("column2.txt").getAbsolutePath());//文件路径System.out.println("Java运行时环境版本:\n"+System.getProperty("java.version")); System.out.println("Java 运行时环境供应商:\n"+System.getProperty("java.vendor"));System.out.println("Java 供应商的URL:\n"+System.getProperty("java.vendor.url"));System.out.println("Java安装目录:\n"+System.getProperty("java.home"));System.out.println("Java 虚拟机规范版本:\n"+System.getProperty("java.vm.specification.version"));System.out.println("Java 类格式版本号:\n"+System.getProperty("java.class.version"));System.out.println("Java类路径:\n"+System.getProperty("java.class.path"));System.out.println("加载库时搜索的路径列表:\n"+System.getProperty("java.library.path"));System.out.println("默认的临时文件路径:\n"+System.getProperty("java.io.tmpdir"));System.out.println("要使用的 JIT 编译器的名称:\n"+System.getProperty("/doc/5014152 978.html,piler"));System.out.println("一个或多个扩展目录的路径:\n"+System.getProperty("java.ext.dirs"));System.out.println("操作系统的名称:\n"+System.getProperty("/doc/5014152978. html,"));System.out.println("操作系统的架构:\n"+System.getProperty("os.arch"));System.out.println("操作系统的版本:\n"+System.getProperty("os.version"));System.out.println("文件分隔符(在 UNIX 系统中是“/”):\n"+System.getProperty("file.separator"));System.out.println("路径分隔符(在 UNIX 系统中是“:”):\n"+System.getProperty("path.separator"));System.out.println("行分隔符(在 UNIX 系统中是“/n”):\n"+System.getProperty("line.separator"));System.out.println("用户的账户名称:\n"+System.getProperty("/doc/5014152978. html,"));System.out.println("用户的主目录:\n"+System.getProperty("user.home"));System.out.println("用户的当前工作目录:\n"+System.getProperty("user.dir")); }十四、端口号/**nchome55\conf文件夹下server.xml文件搜索Define a non-SSL HTTP/1.1 Connector下面就是那个端口*/十六、表体树排序出错表体树不支持排序,禁用表体排序,在initSelfData()调用getBillCardPanel().getBillTable(表编码).setSortXXX(false),注意相应的列表界面也要禁止排序十七、访问受限配置访问规则--编辑--添加--分辨率改为可访问,规则模式写**--确定十八、/doc/5014152978.html,ng.ClassNotFoundExcep tion和/doc/5014152978.html,ng.NoClassDefFoundErr or的区别这2个东西应该是java里很常见,很简单,他们都和classpath设定有关,但区别在哪里呢?我们都知道java里生成对象有如下两种方式:1:Object obj = new ClassName(); 直接new一个对象2:Class clazz = Class.forName(ClassName);Object obj = clazz.newInstance(); 通过class loader动态装载一个类,然后获取这个类的实例同样是生成对象,1在编译期间检查classpath, 如果没有类定义,编译没法通过。
实验八 IO口驱动实验
实验八I/O口驱动实验【实验目的】1、了解PXA270微处理器GPIO的功能2、熟悉PXA270微处理器GPIO驱动程序的编写方法3、掌握驱动程序的加载过程和方法【实验原理】Linux以模块的形式加载设备类型,通常来说一个模块对应一个设备驱动,因此是可以分类的。
将模块分成不同的类型或者类并不是一成不变的,开发人员可以根据实际工作需要在一个模块中实现不同的驱动程序。
一般情况,一个设备驱动对应一类设备的模块方式,这样便于多个设备的协调工作也利于应用程序的开发和扩展。
设备驱动在准备好以后可以编译到内核中(参考实验四的内容),在系统启动时和内核一起启动,这种方法在嵌入式Linux系统中经常被采用。
通常情况下设备驱动的动态加载更为普遍(参考实验七的内容),开发人员不必在调试过程中频繁启动机器就能完成设备驱动的开发工作。
设备驱动在加载时首先调用入口函数init_module(),该函数完成设备驱动的初始化工作,比如寄存器置位、结构体赋值等一系列工作,其中最重要的一个工作就是向内核注册该设备,对于字符设备调用register_chrdev()完成注册,对于块设备需要调用register_blkdev()完成注册。
注册成功后,该设备获得了系统分配的主设备号、自定义的次设备号,并建立起于文件系统的关联。
设备在卸载时需要回收相应的资源,令设备的响应寄存器复位并从系统中注销该设备,字符设备调用unregister_chrdev()、块设备调用unregister_blkdev()。
系统调用部分则是对设备的操作过程,比如open、read、write、ioctl等。
图8-1为一个设备驱动模块动态挂载、卸载和系统调用的全过程。
图8-1 设备驱动在内核中的挂载、卸载和系统调用过程设备驱动程序负责将应用程序如读、写等操作正确无误的传递给相关的硬件,并使硬件能够做出正确反应的代码,因此在编写设备驱动程序时,必须要了解相应的硬件设备的寄存器、IO口及内存的配置参数。
CAD三维命令快捷键
LTS, *LTSCALE 设置全局线型比例因子TOR, *TORUS 圆环(三维)WE, *WEDGE 楔体3P, *3DPOLY 三维多段线3F, *3DFACE 三维面IN, *INTERSECT 交集UNI, *UNION 并集SU, *SUBTRACT 差集EXT, *EXTRUDE 拉伸(三维命令)REV, *REVOLVE 旋转(通过绕轴旋转二维对象来创建实体)HI, *HIDE 消隐SHA, *SHADEMODE 着色SL, *SLICE 剖切(用平面剖切一组实体)SEC, *SECTION 切割(用平面和实体的交集创建面域)INF, *INTERFERE 干涉3A, *3DARRAY 三维阵列3DO, *3DORBIT 三维动态观察ORBIT, *3DORBIT 三维动态观察器RPR, *RPREF 渲染系统配置RR, *RENDER 渲染Z, *ZOOM 实时缩放P, *PAN 实时平移-P, *-PAN 实时平移(命令行输入)OS, *OSNAP 对象捕捉设置-OS, *-OSNAP 对象捕捉设置(命令行输入)SN, *SNAP 捕捉(规定光标按指定的间距移动)PU, *PURGE 清理(删除图形中未使用的命名项目,例如块定义和图层)-PU, *-PURGE 清理(命令行输入)R, *REDRAW (刷新当前视口中的显示)RA, *REDRAWALL 重画RE, *REGEN 重生成REA, *REGENALL 全部重生成REN, *RENAME 重命名-REN, *-RENAME 重命名(命令行输入)AA, *AREA 面积AL, *ALIGN 对齐AP, *APPLOAD 加载应用程序...ATT, *ATTDEF 定义属性...-ATT, *-ATTDEF 定义属性...(命令行输入)ATE, *ATTEDIT 单个...(编辑块插入上的属性)-ATE, *-ATTEDIT 单个...(命令行输入)ATTE, *-ATTEDIT 单个...(命令行输入)BO, *BOUNDARY 边界创建...-BO, *-BOUNDARY 边界创建...(命令行输入)CHK, *CHECKSTANDARDS 检查...(检查当前图形的标准冲突情况)COL, *COLOR 颜色...(设置新对象的颜色)COLOUR, *COLORDBC, *DBCONNECT 数据库连接管理器DOV, *DIMOVERRIDE 替代DR, *DRAWORDER 显示顺序DS, *DSETTINGS 草图设置--------------------------------------------------------------------------------DV, *DVIEW 定义平行投影或透视视图FI, *FILTER 为对象选择创建可重复使用的过滤器G, *GROUP “对象编组”对话框-G, *-GROUP “对象编组”对话框(命令行输入)GR, *DDGRIPS 选项(...选择)IAD, *IMAGEADJUST 图像调整(控制图像的亮度、对比度和褪色度)IAT, *IMAGEATTACH 附着图像(将新的图像附着到当前图形)ICL, *IMAGECLIP 图像剪裁(为图像对象创建新的剪裁边界)IM, *IMAGE 图像(管理图像)-IM, *-IMAGE 图像(命令行输入)IMP, *IMPORT 输入IO, *INSERTOBJ OLE对象LI, *LIST 列表(显示选定对象的数据库信息)LO, *-LAYOUT 新建布局LS, *LIST 列表(显示选定对象的数据库信息)MS, *MSPACE 从图纸空间切换到模型空间视口MV, *MVIEW 创建并控制布局视口(在布局选项卡上工作时)OP, *OPTIONS 选项...(自定义设置)PA, *PASTESPEC “选择性粘贴”对话框(插入剪贴板数据并控制数据格式)PARTIALOPEN, *-PARTIALOPEN (将选定视图或图层的几何图形加载到图形中)PS, *PSPACE 在布局选项卡上工作时,AutoCAD 从模型空间切换到图纸空间PTW, *PUBLISHTOWEB 网上发布...SCR, *SCRIPT 运行脚本...(从脚本文件执行一系列命令)SE, *DSETTINGS 草图设置(指定捕捉模式、栅格、极轴追踪和对象捕捉追踪的设置)SET, *SETVAR 设置变量(列出系统变量或修改变量值)SP, *SPELL 拼写检查...(检查图形中的拼写)TA, *TABLET 数字化仪(校准、配置、打开和关闭已连接的数字化仪)TH, *THICKNESS 设置当前的三维厚度(系统变量)TI, *TILEMODE 将“模型”选项卡或最后一个布局选项卡置为当前(系统变量)TOL, *TOLERANCE 公差UC, *UCSMAN 显示ucs对话框UN, *UNITS 单位...(控制坐标和角度的显示格式并确定精度)-UN, *-UNITS 单位...(命令行输入)V, *VIEW 命名视图...(保存和恢复命名视图)-V, *-VIEW 命名视图...(命令行输入)VP, *DDVPOINT 视点预置...(设置三维观察方向)-VP, *VPOINTX, *EXPLODE 输出...(以其他文件格式保存对象)EXIT, *QUIT 退出EXP, *EXPORT 输出XA, *XATTACH 附着外部参照(将外部参照附着到当前图形)XB, *XBIND 外部参照绑定(绑定一个或多个在外部参照里的命名对象定义到当前的图形)-XB, *-XBIND 外部参照绑定(命令行输入)XC, *XCLIP 外部参照剪裁(定义外部参照或块剪裁边界,并设置前剪裁平面或后剪裁平面)XR, *XREF 外部参照管理器(控制图形文件的外部参照)-XR, *-XREF 外部参照管理器(命令行输入)PE 修改多段线。
C#保存文件或读取数据库文件另存为
C#保存文件或读取数据库文件另存为代码中的fileName是文件的完整名称,tableName是要操作的表名称,fieldName是要保存文件的字段名称。
两段代码实际上是一样的,只是操作的数据库不同,使用的对象不同而已。
接着,在说说将文件从数据库中读取出来,只介绍从SQL Server中读取。
SqlDataReader dr=null;SqlConnection objCn=new SqlConnection();objCn.ConnectionString="Data Source=(local);User ID=sa;Password=;Initial Catalog=Test"; SqlCommand cm=new SqlCommand();cm.Connection=cn;mandType=CommandType.Text;mandText="select "+fieldName+" from "+tableName+" where ID=1";dr=cm.ExecuteReader();byte[] File=null;if(dr.Read()){File=(byte[])dr[0];}FileStream fs;FileInfo fi=new System.IO.FileInfo(fileName);fs=fi.OpenWrite();fs.Write(File,0,File.Length);fs.Close();上面的代码是将保存在数据库中的文件读取出来并保存文fileName指定的文件中。
在使用上面的代码时,别忘了添加System.Data.SqlClient和System.IO引用。
修改:将读文件的下面部分的代码FileStream fs;FileInfo fi=new System.IO.FileInfo(fileName);fs=fi.OpenWrite();fs.Write(File,0,File.Length);fs.Close();//修改为FileStream fs=new FileStream(fileName,FileMode.CreateNew);BinaryWriter bw=new BinaryWriter(fs);bw.Write(File,0,File.Length);bw.Close();fs.Close();这样修改后,就可以解决朋友们提出的“如果想从数据库中取出,另存为相应的文件时。
基于单片机的智能循迹小车---答辩PPT(1.0版)
主要程序功能
/*********************第一部分 管脚声明*********************/
sbit Left_pwm=P1^6; Sbit Right_pwm=P1^7; sbit sbit sbit sbit P3_4=P3^4; P3_5=P3^5; P3_6=P3^6; P3_7=P3^7; //IN1 //IN2 //IN3 //IN4 //三路寻迹模块接口第一路 //三路寻迹模块接口第二路 //三路寻迹模块接口第三路 //接驱动模块ENA使能端,输入PWM信号调节速度 //接驱动模块ENB使能端,输入PWM信号调节速度
void little_left(void) //小车前进向左微调 { Left_go; Right_go; push_val_left=2; push_val_right=5; } void rotate_right(void) //旋转右转 { push_val_left=4; push_val_right=3; Left_go; Right_back; } void little_right(void) //小车前进向右微调 { Left_go; Right_go; push_val_left=4; push_val_right=2; }
void timer0() interrupt 1 //TIMER0中断服务子函数产生PWM信号 { TH0=(65536-1000)/256; //1ms定时 TL0=(65536-1000)%256; //time++; pwm_val_left++; pwm_val_right++; pwm_out_left(); pwm_out_right(); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Instagram,Snapchat,Photoshop。
所有这些应用都是用来做图像处理的。
图像处理可以简单到把一张照片转换为灰度图,也可以复杂到是分析一个视频,并在人群中找到某个特定的人。
尽管这些应用非常的不同,但这些例子遵从同样的流程,都是从创造到渲染。
在电脑或者手机上做图像处理有很多方式,但是目前为止最高效的方法是有效地使用图形处理单元,或者叫GPU。
你的手机包含两个不同的处理单元,CPU 和GPU。
CPU 是个多面手,并且不得不处理所有的事情,而GPU 则可以集中来处理好一件事情,就是并行地做浮点运算。
事实上,图像处理和渲染就是在将要渲染到窗口上的像素上做许许多多的浮点运算。
通过有效的利用GPU,可以成百倍甚至上千倍地提高手机上的图像渲染能力。
如果不是基于GPU 的处理,手机上实时高清视频滤镜是不现实,甚至不可能的。
着色器(shader) 是我们利用这种能力的工具。
着色器是用着色语言写的小的,基于C 语言的程序。
现在有很许多种着色语言,但你如果做OS X 或者iOS 开发的话,你应该专注于OpenGL 着色语言,或者叫GLSL。
你可以将GLSL 的理念应用到其他的更专用的语言(比如Metal) 上去。
这里我们即将介绍的概念与和Core Image 中的自定义核矩阵有着很好的对应,尽管它们在语法上有一些不同。
这个过程可能会很让人恐惧,尤其是对新手。
这篇文章的目的是让你接触一些写图像处理着色器的必要的基础信息,并将你带上书写你自己的图像处理着色器的道路。
什么是着色器我们将乘坐时光机回顾一下过去,来了解什么是着色器,以及它是怎样被集成到我们的工作流当中的。
如果你在iOS 5 或者之前就开始做iOS 开发,你或许会知道在iPhone 上OpenGL 编程有一个转变,从OpenGL ES1.1 变成了OpenGL ES2.0。
OpenGL ES 1.1 没有使用着色器。
作为替代,OpenGL ES 1.1 使用被称为固定功能管线(fixed-function pipeline) 的方式。
有一系列固定的函数用来在屏幕上渲染对象,而不是创建一个单独的程序来指导GPU 的行为。
这样有很大的局限性,你不能做出任何特殊的效果。
如果你想知道着色器在工程中可以造成怎样的不同,看看这篇Brad Larson 写的他用着色器替代固定函数重构Molecules 应用的博客OpenGL ES 2.0 引入了可编程管线。
可编程管线允许你创建自己的着色器,给了你更强大的能力和灵活性。
在OpenGL ES 中你必须创建两种着色器:顶点着色器(vertex shaders) 和片段着色器(fragment shaders)。
这两种着色器是一个完整程序的两半,你不能仅仅创建其中任何一个;想创建一个完整的着色程序,两个都是必须存在。
顶点着色器定义了在2D 或者3D 场景中几何图形是如何处理的。
一个顶点指的是2D 或者3D 空间中的一个点。
在图像处理中,有 4 个顶点:每一个顶点代表图像的一个角。
顶点着色器设置顶点的位置,并且把位置和纹理坐标这样的参数发送到片段着色器。
然后GPU 使用片段着色器在对象或者图片的每一个像素上进行计算,最终计算出每个像素的最终颜色。
图片,归根结底,实际上仅仅是数据的集合。
图片的文档包含每一个像素的各个颜色分量和像素透明度的值。
因为对每一个像素,算式是相同的,GPU 可以流水线作业这个过程,从而更加有效的进行处理。
使用正确优化过的着色器,在GPU 上进行处理,将使你获得百倍于在CPU 上用同样的过程进行图像处理的效率。
把东西渲染到屏幕上从一开始就是一个困扰OpenGL 开发者的问题。
仅仅让屏幕呈现出非黑色就要写很多样板代码和设置。
开发者必须跳过很多坑,而这些坑所带来的沮丧感以及着色器测试方法的匮乏,让很多人放弃了哪怕是尝试着写着色器。
幸运的是,过去几年,一些工具和框架减少了开发者在尝试着色器方面的焦虑。
GPUImageShaderToyShaderificQuartz Composer下面我将要写的每一个着色器的例子都是从开源框架GPUImage 中来的。
如果你对OpenGL/OpenGL ES 场景如何配置,从而使其可以使用着色器渲染感到好奇的话,可以clone 这个仓储。
我们不会深入到怎样设置OpenGL/OpenGL ES 来使用着色器渲染,这超出了这篇文章的范围。
我们的第一个着色器的例子顶点着色器好吧,关于着色器我们说的足够多了。
我们来看一个实践中真实的着色器程序。
这里是一个GPUImage 中一个基础的顶点着色器:attributevec4position;attributevec4input TextureCoordinate;varyingvec2textureCoordinate;voidmain(){ gl_position=position;textureCoordinate=in putTextureCoordinate.xy;}我们一句一句的来看:attributevec4position;像所有的语言一样,着色器语言的设计者也为常用的类型创造了特殊的数据类型,例如2D 和3D 坐标。
这些类型是向量,稍后我们会深入更多。
回到我们的应用程序的代码,我们创建了一系列顶点,我们为每个顶点提供的参数里的其中一个是顶点在画布中的位置。
然后我们必须告诉我们的顶点着色器它需要接收这个参数,我们稍后会将它用在某些事情上。
因为这是一个C 程序,我们需要记住要在每一行代码的结束使用一个分号,所以如果你正使用Swift 的话,你需要把在末尾加分号的习惯捡回来。
attributevec4inputTextureCoordinate;现在你或许很奇怪,为什么我们需要一个纹理坐标。
我们不是刚刚得到了我们的顶点位置了吗?难道它们不是同样的东西吗?其实它们并非一定是同样的东西。
纹理坐标是纹理映射的一部分。
这意味着你想要对你的纹理进行某种滤镜操作的时候会用到它。
左上角坐标是(0,0)。
右上角的坐标是(1,0)。
如果我们需要在图片内部而不是边缘选择一个纹理坐标,我们需要在我们的应用中设定的纹理坐标就会与此不同,像是(.25, .25) 是在图片左上角向右向下各图片高宽1/4 的位置。
在我们当前的图像处理应用里,我们希望纹理坐标和顶点位置一致,因为我们想覆盖到图片的整个长度和宽度。
有时候你或许会希望这些坐标是不同的,所以需要记住它们未必是相同的坐标。
在这个例子中,顶点坐标空间从-1.0 延展到 1.0,而纹理坐标是从0.0 到1.0。
varyingvec2textureCoordinate;因为顶点着色器负责和片段着色器交流,所以我们需要创建一个变量和它共享相关的信息。
在图像处理中,片段着色器需要的唯一相关信息就是顶点着色器现在正在处理哪个像素。
gl_Position=position;gl_Position 是一个内建的变量。
GLSL 有一些内建的变量,在片段着色器的例子中我们将看到其中的一个。
这些特殊的变量是可编程管道的一部分,API 会去寻找它们,并且知道如何和它们关联上。
在这个例子中,我们指定了顶点的位置,并且把它从我们的程序中反馈给渲染管线。
textureCoordinate=inputTextureCoordina te.xy;最后,我们取出这个顶点中纹理坐标的X 和Y 的位置。
我们只关心inputTextureCoordinate 中的前两个参数,X 和Y。
这个坐标最开始是通过 4 个属性存在顶点着色器里的,但我们只需要其中的两个。
我们拿出需要的属性,然后赋值给一个将要和片段着色器通信的变量,而不是把更多的属性反馈给片段着色器。
在大多数图像处理程序中,顶点着色器都差不多,所以,这篇文章接下来的部分,我们将集中讨论片段着色器。
片段着色器看过了我们简单的顶点着色器后,我们再来看一个可以实现的最简单的片段着色器:一个直通滤镜:varyinghighpvec2textureCoordinate;unif ormsampler2DinputImageTexture;voidmai n(){gl_FragColor=texture2D(inputImageTe xture,textureCoordinate);}这个着色器实际上不会改变图像中的任何东西。
它是一个直通着色器,意味着我们输入每一个像素,然后输出完全相同的像素。
我们来一句句的看:varyinghighpvec2textureCoordinate;因为片段着色器作用在每一个像素上,我们需要一个方法来确定我们当前在分析哪一个像素/片段。
它需要存储像素的X 和Y 坐标。
我们接收到的是当前在顶点着色器被设置好的纹理坐标。
uniformsampler2DinputImageTexture;为了处理图像,我们从应用中接收一个图片的引用,我们把它当做一个2D 的纹理。
这个数据类型被叫做sampler2D ,这是因为我们要从这个2D 纹理中采样出一个点来进行处理。
gl_FragColor=texture2D(inputImageTextu re,textureCoordinate);这是我们碰到的第一个GLSL 特有的方法:texture2D,顾名思义,创建一个2D 的纹理。
它采用我们之前声明过的属性作为参数来决定被处理的像素的颜色。
这个颜色然后被设置给另外一个内建变量,gl_FragColor。
因为片段着色器的唯一目的就是确定一个像素的颜色,gl_FragColor 本质上就是我们片段着色器的返回语句。
一旦这个片段的颜色被设置,接下来片段着色器就不需要再做其他任何事情了,所以你在这之后写任何的语句,都不会被执行。
就像你看到的那样,写着色器很大一部分就是了解着色语言。
即使着色语言是基于C 语言的,依然有很多怪异和细微的差别让它和普通的 C 语言有不同。
GLSL 数据类型和运算各式着色器都是用OpenGL 着色语言(GLSL) 写的。
GLSL 是一种从C 语言导出的简单语言。
它缺少 C 语言的高级功能,比如动态内存管理。
但是,它也包含一些在着色过程中常用的数学运算函数。
在负责OpenGL 和OpenGL ES 实现的Khronos 小组的网站上有一些有用的参考资料。
在你开始之前,一件你可以做的最有价值的事情就是获取OpenGL 和OpenGL ES 的快速入门指导:OpenGL ESOpenGL通过查看这些参考卡片,你可以快速简单地了解在写OpenGL 应用时需要的着色语言函数和数据类型。
尽早用,经常用。
即使在这么简单的着色器的例子里,也有一些地方看起来很怪异,不是吗?看过了基础的着色器之后,是时候开始解释其中一些内容,以及它们为什么存在于GLSL 中。