06 2008 档案
使用XPath轻松获得VC9.0工程文件包含的所有代码文件
摘要: 玩了几天空之轨迹 FC,终于快结束了。距离最后一门考试还有3天,于是把整个XPath的代码写完了。于是试用一下。
现在展示一下我那个XPath的使用方法:
1 VL_List
Result;
2 VL_XPath XPath(L"//Files//File[contains(@RelativePath,\".cpp\") or contains(@RelativePath,\".h\")]");
3 XPath.Query(Doc.GetRootElement(),Result); 第一行声明一个XML节点列表,第二行构造一个XPath,第三行将XPath作用在一个XML文档的根节点上。这个XPath用于把VC++9.0的工程文件中包含的所有.h文件和.cpp文件提取出来。虽然Files里面包含若干Filter,每一个Filter包含一些Filter和File,不过输出结果Output.xml把所有的满足要求的File节点都找了出来。
阅读全文
posted @
2008-06-28 12:55 陈梓瀚(vczh) 阅读(1303) |
评论 (2) 编辑
XPath语法分析器完成!
摘要: 花了2个小时终于把XPath的数据结构和语法分析做完了。这个XPath的语法完全按照MSDN所说的做,除了减少了2个跟DTD相关的函数和11个Microsoft扩展的"ms:"开头的函数以外,剩下的功能将一概支持。
代码写完了之后,我打开MSDN找里面的几十条XPath Example进行测试,发现了一些Bug,然后修正。现在MSDN所列举的所有例子都通过了,接下来只有自己写Example进行测试了。因为MSDN的例子并没有覆盖所有等价类。
下面是运行结果和测试程序的代码:
阅读全文
posted @
2008-06-21 16:34 陈梓瀚(vczh) 阅读(1563) |
评论 (2) 编辑
做了一个XML解释器
摘要: 为了纪念自己为了明天的XML考试复习了半天,特地根据MSDN描述的标准做了一个XML的解释器。接口类似DOM和SAX的混合体。
目前什么都不支持,不过以后打算做完DTD和XPath。XSD和XSL就先算了。反正是写着玩的。把代码贴出来先。这个代码使用了自己开发的一套C++基础库。
阅读全文
posted @
2008-06-19 21:28 陈梓瀚(vczh) 阅读(1652) |
评论 (8) 编辑
使用拓扑进行几何图形布尔运算
摘要: 首先吐槽一下:今天考IT项目管理,100道选择题。前几天考配置管理,10道大题。如今的老师都喜欢走极端……
这个方法是在考完试回宿舍的路上想到的,适用于2D与3D。主要想法是这样的。给定两个几何图形A、B,把A和B都分成『内『、『外』两部分。A的『内』就是处于B内部的部分。于是A和B就变成了A内、A外、B内、B外。然后就有如下公式:
·A and B=A外+B外
·A sub B=A外+B内
·A or B=A内+B内
·A xor B=A外+B外+A内+B内
这种数据结构是为了满足如下算法:一个A点在图形内<==>过这个点的直线交图形与点集P,其中|{Pi|Pi<=A}|和|{Pi|Pi>=A}|都是奇数。注意我们使用的是<=和>=,这样的话两个集合的数量的奇偶性都是一致的。这个算法无论2D、3D多边形还是3D多面体都能适用,就算是这个图形有孔(镶嵌)也可以,而且跟凹凸体无关。这个算法只有一种情况是不能用的:就是自己跟自己有交叉,譬如我们习惯的5条直线构成五角星的画法。这
阅读全文
posted @
2008-06-17 11:20 陈梓瀚(vczh) 阅读(1209) |
评论 (5) 编辑
无责任替朋友发个招聘广告
摘要: 网龙公司招聘
网龙公司是中国网络游戏开发商和运营商的领导者之一,总部位于中国福建省福州市。
1、大型WEB2.0网站架构师
2、3D游戏引擎程序设计师
3、游戏客户端程序员
4、游戏服务端程序员
5、游戏工具开发程序员
6、手机平台开发程序员
7、驱动开发程序工程师
8、B/S程序员
9、WEB2.0游戏社区软件开发工程师
10、应用软件开发程序员
月薪6千起,优秀者月薪不封顶。享受基本养老、医疗、失业、工伤、生育等保险,以及公积金和公司福利。
联系方式:
QQ:611990694(请备注:您的姓名和应聘岗位)
EMAIL:hr@nd.com.cn
内详,版主勿删。
阅读全文
posted @
2008-06-16 23:35 陈梓瀚(vczh)|
编辑
如何手写语法分析器
摘要: 在写可配置的语法分析器之前,我觉得还是先说说如何手写语法分析器好。因为对于大部分人来说,开发一个可配置的语法分析器并没有什么作用,反而针对某种特定的语法开发特定的语法分析器是特别有必要的。典型的有表达式计算器、某种格式化的文件(HTML、XML等)或者是其他的复杂而且符合树型结构的字符串。根据目前论坛的反应来看,有一些朋友们对如何开发一套自己的脚本引擎比较感兴趣。等基础的文章都写完以后我会考虑撰写一个系列的文章介绍如何开发自己的脚本引擎。
这篇文章会附带一些必要的代码以便帮助读者们理解。为了方便,代码使用DevC++开发。
阅读全文
posted @
2008-06-15 21:59 陈梓瀚(vczh) 阅读(2062) |
评论 (26) 编辑
今天在硬盘上发现了去年写的一个小型IDE
摘要: 当Vczh Free Script还处于1.0版本的时候,我用C#写了一个IDE出来。因为脚本本身是不能产生exe的,所以这个IDE只有执行而没有编译的功能。不过有两个个困难的地方。
RichTextBox里面的修改会让颜色变化。我找不到C#中的有效做法,所以只好把自己的正则表达式引擎包一层插入C#,每次修改的时候都重新生成整个RTF文档插入RichTextBox。后来测试的时候,发现只要脚本在1000行左右的时候速度仍然是可以接受的。没有进行更多的测试。
脚本自己也是可以调用编译器的。脚本代码可以用字符串产生一段新的代码然后执行。因此IDE也要动态的【发现】并【调试】这些动态产生的代码。下面贴了4幅图。
阅读全文
posted @
2008-06-14 16:20 陈梓瀚(vczh) 阅读(1719) |
评论 (14) 编辑
接下去的事情
posted @
2008-06-13 01:40 陈梓瀚(vczh) 阅读(129) |
评论 (2) 编辑
椭圆段扫描完成
摘要: 终于完成了相当于GDI中Arc函数的功能了。这次仍然跟API有点误差,不多这里的误差是GDI的问题。这里贴出截图和代码。观看图2和图3,我们知道椭圆是对称的,但是GDI并没有做到这一点。我的算法也不能精确对称,但是左右两边仅相差1个像素。Arc是椭圆的子集,所以Arc在这个局部(椭圆的最上方)中也应该左右对称。图1中我先用GDI绘制黑色Arc,然后使用我的算法绘制红色Arc。这里的自适应步长算法跟上一篇的Bezier曲线的算法是一样的。
阅读全文
posted @
2008-06-12 22:02 陈梓瀚(vczh) 阅读(1171) |
评论 (2) 编辑
自适应步长Bezier曲线扫描
摘要: 花了两个小时把这个东西做好了。虽然不及[LIEN87 ; SHAN87 ; SHAN89]论文厉害,不过自己弄的这个写起来倒是相当容易的。在这里贴出效果图和代码。效果图中,我先使用蓝色画笔,用PolyBezier绘制曲线,然后使用红色像素使用自己的算法绘制曲线。可以看见有一点点误差,不过效果还是可以接受的。代码仍然使用自己的那套库开发,不过曲线扫描的方法不受库的限制。这个算法保证点不会被重复绘制。
有了这个算法之后我就可以把贝塞尔曲线转换成密度刚好的折线了。这才是最终目的。
阅读全文
posted @
2008-06-12 13:20 陈梓瀚(vczh) 阅读(1125) |
评论 (1) 编辑
终于提取到了TrueType字体的轮廓了
摘要: 为了让这篇文章说的东西能够落实,无法躲避的基本东西还是要先准备一下的。今天花了6个小时查了无数资料终于把文字的边框弄出来了。
在此贴出代码和效果图,不作过多解释。熟悉Win32API中的GDI部分的朋友们可以很容易看懂。
效果图:
提取的轮廓:红色和黑色为直线,蓝色为四次贝塞尔曲线。其中上面是先TextOut后自己画,下面是先自己画后TextOut。四次贝塞尔曲线转换成三次贝塞尔曲线之后使用PolyBezier绘制。
代码:
代码使用的框架是我自己寒假无聊的时候封装API的结果,暂时有窗口、菜单、组合键以及菜单,附带GDI。事件自己弄了一个跟C#差不多的可以同时Bind很多不同种类函数的东西。不过这个不是重点。需要重点阅读的是如何使用GetGlyphOutline。
dtof将double转换成FIXED,ftod相反。
GetPoint进行点的变换,主要是因为画字符的时候需要偏移。
DrawCurve绘制边框。
阅读全文
posted @
2008-06-11 23:48 陈梓瀚(vczh) 阅读(1553) |
评论 (7) 编辑
如何学习编程(二)
摘要: 接着上一篇文章继续往下讲。如果按照上一篇文章走下去的话,现在估计做了有些小软件了吧。字符串和图形都容易做大,而且对于潜意识上喜欢数学的最有希望的程序员们也是有吸引力的。但是这两种东西却不容易做好。等到程序到了一定规模的时候,维护和效率这两大问题就会凸显出来。心急吃不了热豆腐,为了解决维护和效率这两个经常会出现的问题,我们需要学习算法和架构。这两种东西是可以同时学的,但是一篇文章说不了多少东西,那么就从算法开始吧。
程序员是需要开阔眼界的,光C#一门也是不行的,毕竟程序运行在各种平台上,有各种各样的语言。譬如Win32上的native C/C++、Delphi等,.NET上的C#和VB.NET,还有自成体系的Java,然后就是运行在mainframe上的COBOL,剩下的还有各种各样的函数式语言、脚本语言等等。熟悉了C#的人从Delphi入手不会很困难,从C/C++入手也可以了。这两门原本是本地语言的语言在编写程序的时候需要我们注意多一些的东西,典型的就是内存管理。这还是需要多加练习的,在这里就不多说了。
说到算法,在这里首先向
阅读全文
posted @
2008-06-11 16:03 陈梓瀚(vczh) 阅读(4727) |
评论 (7) 编辑
图形库的概要设计
摘要: 前天在博客上说希望开发一个尽量独立于GDI的图形库。这个图形库将不使用其他图形库例如GDI+、OpenGL以及DirectX等。图形库使用GDI的原因如下:
1:字体的边框比较难获得。直接读TTF文件暂时还不想做,因此想借助GDI的API获取文字的Bezier轮廓。
2:不使用GDI无法把图片刷上窗口。
因此这个图形库使用的GDI的功能也仅限于此。当然,开发出来的结果必然是GDI所不能达到的。GDI+的结构也稍微有一点点不理想。
为什么GDI和GDI+的速度都不太理想呢?下面的分析将会给出一个可能的解释。
今天早上考了软件配置管理,也就是让我们了解一下为什么需要Subversion这样的软件来帮助我们开发软件。考完试回来的路上就构思了这个图形库的结构。让我们考虑一下图形库所需的功能,也就是需求分析了。我们用惯的图形库都有绘制图形、文字以及图像的功能。图形有画刷和边框,其中边框是具有形状的。
首先考虑一下文字。我们知道现在绝大多数的文字都是由Bezier边
阅读全文
posted @
2008-06-11 11:13 陈梓瀚(vczh) 阅读(1632) |
评论 (13) 编辑
期末考了
摘要: 人生中的很可能的最后一次期末考就到了,复习之余不免忙里偷闲,想想程序的那些破事。
相对于去年来说,今年做的事情比较少。06年做了一个软件渲染器和一个强类型的脚本引擎和一个基于OpenGL的GUI,07年冲做了一个基于OpenGL的GUI,一个正则表达式和动态的上下文无关文法分析器(并在年内重写了一次),还有一个基于闭包的无类型脚本引擎。今年做的是一些修修补补的工作,首先为最新的脚本引擎提供了基于闭包实现的class和namespace、重写了内核并加上了multi-method和operator overloading,为正则表达式引擎重写了一个新的几乎提高了9倍速度的分析器(于是写了一篇招口水的文章)。自从Borland的没落导致我狠一狠心从Delphi过渡到C++之后,一直到现在我都在维护一个我自己个人使用的“非标准模板库”。STL啊Boost啊什么的就不用了,函数的名字比较鸟。
大三也快完了,学院要求我们自己张罗实习的事情,班主任推荐我去微软,后来花了点时间准备了一下。不过不幸的是最后发现准备是没有用的,面试官总会在意外
阅读全文
posted @
2008-06-10 02:16 陈梓瀚(vczh) 阅读(251) |
评论 (5) 编辑
如何学习编程(一)
摘要: 终于还是要写这种文章了。期末考试将至,写大程序没时间,写小程序没动力,只要演变成写文章了。之前的两篇字符串处理写完了仍然不过瘾,打算继续写关于递归下降法和LALR的事。后来想想还是暂时写写关于如何学习编程的好,毕竟这个问题对大家来说更加有益。
本篇将是一个系列,重点讲述在外力很少的情况下如何自学编程,以及需要注意的一些地方。
一般来说,一些所谓的『高手』或者老师会告诉人们算法是非常非常重要以至于会不会算法就是你会不会编程的唯一标准。不过事实上并非如此。掌握算法固然是好,只是大部分程序并不需要高深的算法,而且招人的时候仅仅要求会算法的公司也是很少的(而且很难进)。我并不是学院派的人,所以虽然我本人也推崇学习算法,但并不推崇一开始就学习算法。
刚开始学编程的人总是不知道自己应该从哪里入手。实际上这是一个相当重要的问题。在我看来,学好变成有若干条件:
·兴趣
·数学/英语
·财力
首先谈一谈兴趣。那些为了生计而寻找捷径学习编程的人并不
阅读全文
posted @
2008-06-07 10:29 陈梓瀚(vczh) 阅读(3670) |
评论 (32) 编辑
个人作品目录
posted @
2008-06-06 01:36 陈梓瀚(vczh) 阅读(407) |
评论 (0) 编辑
写了一个弹性物体碰撞模拟
摘要: 无聊之际用C#写了一个弹性物体碰撞模拟玩玩。这个想法源自与前几天上机课有人想我在机房做一个透视投影的程序,于是就立刻写了个投影并弄了个线框球上去跳。结果我就想,如果物体有弹性会怎么样呢?回到宿舍就实践想法。
这个程序是2D的,用C#主要是因为GDI+写起来比较方便,至少比可怜的MFC好用,虽然C#的东西又慢又占用CPU使用率。我发誓.NET的Timer肯定不是用WM_TIMER消息搞的,空转占用CPU都那么高,而且用Sleep还降低不了。过高的CPU占用率持续过久会导致CPU温度升高……
程序现在还有点问题。譬如物理引擎经典问题:浮点误差和碰撞穿透。现在还没100%处理好,虽然绝大多数情况下是没什么事。第二个就是因为弹性超出了我的物理知识范围,所以碰撞的速度更高暂时乱写,等过几天有空解一个三元二次方程组之后再改改代码。
先放截图三张,等程序改好了之后再把代码弄出来。这个东西很好玩的,嘿嘿。考虑了重力哦。
阅读全文
posted @
2008-06-06 01:30 陈梓瀚(vczh) 阅读(1341) |
评论 (8) 编辑