摘要: 當(dāng)Vczh Free Script還處于1.0版本的時(shí)候,我用C#寫(xiě)了一個(gè)IDE出來(lái)。因?yàn)槟_本本身是不能產(chǎn)生exe的,所以這個(gè)IDE只有執(zhí)行而沒(méi)有編譯的功能。不過(guò)有兩個(gè)個(gè)困難的地方。
RichTextBox里面的修改會(huì)讓顏色變化。我找不到C#中的有效做法,所以只好把自己的正則表達(dá)式引擎包一層插入C#,每次修改的時(shí)候都重新生成整個(gè)RTF文檔插入RichTextBox。后來(lái)測(cè)試的時(shí)候,發(fā)現(xiàn)只要腳本在1000行左右的時(shí)候速度仍然是可以接受的。沒(méi)有進(jìn)行更多的測(cè)試。
腳本自己也是可以調(diào)用編譯器的。腳本代碼可以用字符串產(chǎn)生一段新的代碼然后執(zhí)行。因此IDE也要?jiǎng)討B(tài)的【發(fā)現(xiàn)】并【調(diào)試】這些動(dòng)態(tài)產(chǎn)生的代碼。下面貼了4幅圖。
閱讀全文
posted @
2008-06-14 00:20 陳梓瀚(vczh) 閱讀(4232) |
評(píng)論 (14) |
編輯 收藏
1:開(kāi)發(fā)將橢圓、貝塞爾曲線(xiàn)以及文字轉(zhuǎn)換成多邊形的工具
2:解決多邊形的布爾運(yùn)算,有并集、交集和余集等
3:使用2開(kāi)發(fā)畫(huà)筆
4:開(kāi)發(fā)畫(huà)刷基礎(chǔ),實(shí)現(xiàn)Color Matrix、Vertex Transformation及多邊形渲染
5:圖像工具
posted @
2008-06-12 09:40 陳梓瀚(vczh) 閱讀(792) |
評(píng)論 (2) |
編輯 收藏
摘要: 終于完成了相當(dāng)于GDI中Arc函數(shù)的功能了。這次仍然跟API有點(diǎn)誤差,不多這里的誤差是GDI的問(wèn)題。這里貼出截圖和代碼。觀看圖2和圖3,我們知道橢圓是對(duì)稱(chēng)的,但是GDI并沒(méi)有做到這一點(diǎn)。我的算法也不能精確對(duì)稱(chēng),但是左右兩邊僅相差1個(gè)像素。Arc是橢圓的子集,所以Arc在這個(gè)局部(橢圓的最上方)中也應(yīng)該左右對(duì)稱(chēng)。圖1中我先用GDI繪制黑色Arc,然后使用我的算法繪制紅色Arc。這里的自適應(yīng)步長(zhǎng)算法跟上一篇的Bezier曲線(xiàn)的算法是一樣的。
閱讀全文
posted @
2008-06-12 06:02 陳梓瀚(vczh) 閱讀(2375) |
評(píng)論 (5) |
編輯 收藏
摘要: 花了兩個(gè)小時(shí)把這個(gè)東西做好了。雖然不及[LIEN87 ; SHAN87 ; SHAN89]論文厲害,不過(guò)自己弄的這個(gè)寫(xiě)起來(lái)倒是相當(dāng)容易的。在這里貼出效果圖和代碼。效果圖中,我先使用藍(lán)色畫(huà)筆,用PolyBezier繪制曲線(xiàn),然后使用紅色像素使用自己的算法繪制曲線(xiàn)。可以看見(jiàn)有一點(diǎn)點(diǎn)誤差,不過(guò)效果還是可以接受的。代碼仍然使用自己的那套庫(kù)開(kāi)發(fā),不過(guò)曲線(xiàn)掃描的方法不受庫(kù)的限制。這個(gè)算法保證點(diǎn)不會(huì)被重復(fù)繪制。
有了這個(gè)算法之后我就可以把貝塞爾曲線(xiàn)轉(zhuǎn)換成密度剛好的折線(xiàn)了。這才是最終目的。
閱讀全文
posted @
2008-06-11 21:20 陳梓瀚(vczh) 閱讀(2657) |
評(píng)論 (1) |
編輯 收藏
摘要: 為了讓這篇文章說(shuō)的東西能夠落實(shí),無(wú)法躲避的基本東西還是要先準(zhǔn)備一下的。今天花了6個(gè)小時(shí)查了無(wú)數(shù)資料終于把文字的邊框弄出來(lái)了。
在此貼出代碼和效果圖,不作過(guò)多解釋。熟悉Win32API中的GDI部分的朋友們可以很容易看懂。
效果圖:
提取的輪廓:紅色和黑色為直線(xiàn),藍(lán)色為四次貝塞爾曲線(xiàn)。其中上面是先TextOut后自己畫(huà),下面是先自己畫(huà)后TextOut。四次貝塞爾曲線(xiàn)轉(zhuǎn)換成三次貝塞爾曲線(xiàn)之后使用PolyBezier繪制。
代碼:
代碼使用的框架是我自己寒假無(wú)聊的時(shí)候封裝API的結(jié)果,暫時(shí)有窗口、菜單、組合鍵以及菜單,附帶GDI。事件自己弄了一個(gè)跟C#差不多的可以同時(shí)Bind很多不同種類(lèi)函數(shù)的東西。不過(guò)這個(gè)不是重點(diǎn)。需要重點(diǎn)閱讀的是如何使用GetGlyphOutline。
dtof將double轉(zhuǎn)換成FIXED,ftod相反。
GetPoint進(jìn)行點(diǎn)的變換,主要是因?yàn)楫?huà)字符的時(shí)候需要偏移。
DrawCurve繪制邊框。
閱讀全文
posted @
2008-06-11 07:48 陳梓瀚(vczh) 閱讀(12363) |
評(píng)論 (12) |
編輯 收藏
摘要: 接著上一篇文章繼續(xù)往下講。如果按照上一篇文章走下去的話(huà),現(xiàn)在估計(jì)做了有些小軟件了吧。字符串和圖形都容易做大,而且對(duì)于潛意識(shí)上喜歡數(shù)學(xué)的最有希望的程序員們也是有吸引力的。但是這兩種東西卻不容易做好。等到程序到了一定規(guī)模的時(shí)候,維護(hù)和效率這兩大問(wèn)題就會(huì)凸顯出來(lái)。心急吃不了熱豆腐,為了解決維護(hù)和效率這兩個(gè)經(jīng)常會(huì)出現(xiàn)的問(wèn)題,我們需要學(xué)習(xí)算法和架構(gòu)。這兩種東西是可以同時(shí)學(xué)的,但是一篇文章說(shuō)不了多少東西,那么就從算法開(kāi)始吧。
程序員是需要開(kāi)闊眼界的,光C#一門(mén)也是不行的,畢竟程序運(yùn)行在各種平臺(tái)上,有各種各樣的語(yǔ)言。譬如Win32上的native C/C++、Delphi等,.NET上的C#和VB.NET,還有自成體系的Java,然后就是運(yùn)行在mainframe上的COBOL,剩下的還有各種各樣的函數(shù)式語(yǔ)言、腳本語(yǔ)言等等。熟悉了C#的人從Delphi入手不會(huì)很困難,從C/C++入手也可以了。這兩門(mén)原本是本地語(yǔ)言的語(yǔ)言在編寫(xiě)程序的時(shí)候需要我們注意多一些的東西,典型的就是內(nèi)存管理。這還是需要多加練習(xí)的,在這里就不多說(shuō)了。
說(shuō)到算法,在這里首先向
閱讀全文
posted @
2008-06-11 00:03 陳梓瀚(vczh) 閱讀(9241) |
評(píng)論 (8) |
編輯 收藏
摘要: 前天在博客上說(shuō)希望開(kāi)發(fā)一個(gè)盡量獨(dú)立于GDI的圖形庫(kù)。這個(gè)圖形庫(kù)將不使用其他圖形庫(kù)例如GDI+、OpenGL以及DirectX等。圖形庫(kù)使用GDI的原因如下:
1:字體的邊框比較難獲得。直接讀TTF文件暫時(shí)還不想做,因此想借助GDI的API獲取文字的Bezier輪廓。
2:不使用GDI無(wú)法把圖片刷上窗口。
因此這個(gè)圖形庫(kù)使用的GDI的功能也僅限于此。當(dāng)然,開(kāi)發(fā)出來(lái)的結(jié)果必然是GDI所不能達(dá)到的。GDI+的結(jié)構(gòu)也稍微有一點(diǎn)點(diǎn)不理想。
為什么GDI和GDI+的速度都不太理想呢?下面的分析將會(huì)給出一個(gè)可能的解釋。
今天早上考了軟件配置管理,也就是讓我們了解一下為什么需要Subversion這樣的軟件來(lái)幫助我們開(kāi)發(fā)軟件。考完試回來(lái)的路上就構(gòu)思了這個(gè)圖形庫(kù)的結(jié)構(gòu)。讓我們考慮一下圖形庫(kù)所需的功能,也就是需求分析了。我們用慣的圖形庫(kù)都有繪制圖形、文字以及圖像的功能。圖形有畫(huà)刷和邊框,其中邊框是具有形狀的。
首先考慮一下文字。我們知道現(xiàn)在絕大多數(shù)的文字都是由Bezier邊
閱讀全文
posted @
2008-06-10 19:13 陳梓瀚(vczh) 閱讀(4427) |
評(píng)論 (13) |
編輯 收藏
摘要: 人生中的很可能的最后一次期末考就到了,復(fù)習(xí)之余不免忙里偷閑,想想程序的那些破事。
相對(duì)于去年來(lái)說(shuō),今年做的事情比較少。06年做了一個(gè)軟件渲染器和一個(gè)強(qiáng)類(lèi)型的腳本引擎和一個(gè)基于OpenGL的GUI,07年沖做了一個(gè)基于OpenGL的GUI,一個(gè)正則表達(dá)式和動(dòng)態(tài)的上下文無(wú)關(guān)文法分析器(并在年內(nèi)重寫(xiě)了一次),還有一個(gè)基于閉包的無(wú)類(lèi)型腳本引擎。今年做的是一些修修補(bǔ)補(bǔ)的工作,首先為最新的腳本引擎提供了基于閉包實(shí)現(xiàn)的class和namespace、重寫(xiě)了內(nèi)核并加上了multi-method和operator overloading,為正則表達(dá)式引擎重寫(xiě)了一個(gè)新的幾乎提高了9倍速度的分析器(于是寫(xiě)了一篇招口水的文章)。自從Borland的沒(méi)落導(dǎo)致我狠一狠心從Delphi過(guò)渡到C++之后,一直到現(xiàn)在我都在維護(hù)一個(gè)我自己個(gè)人使用的“非標(biāo)準(zhǔn)模板庫(kù)”。STL啊Boost啊什么的就不用了,函數(shù)的名字比較鳥(niǎo)。
大三也快完了,學(xué)院要求我們自己張羅實(shí)習(xí)的事情,班主任推薦我去微軟,后來(lái)花了點(diǎn)時(shí)間準(zhǔn)備了一下。不過(guò)不幸的是最后發(fā)現(xiàn)準(zhǔn)備是沒(méi)有用的,面試官總會(huì)在意外
閱讀全文
posted @
2008-06-09 10:16 陳梓瀚(vczh) 閱讀(1556) |
評(píng)論 (5) |
編輯 收藏
摘要: 終于還是要寫(xiě)這種文章了。期末考試將至,寫(xiě)大程序沒(méi)時(shí)間,寫(xiě)小程序沒(méi)動(dòng)力,只要演變成寫(xiě)文章了。之前的兩篇字符串處理寫(xiě)完了仍然不過(guò)癮,打算繼續(xù)寫(xiě)關(guān)于遞歸下降法和LALR的事。后來(lái)想想還是暫時(shí)寫(xiě)寫(xiě)關(guān)于如何學(xué)習(xí)編程的好,畢竟這個(gè)問(wèn)題對(duì)大家來(lái)說(shuō)更加有益。
本篇將是一個(gè)系列,重點(diǎn)講述在外力很少的情況下如何自學(xué)編程,以及需要注意的一些地方。
一般來(lái)說(shuō),一些所謂的『高手』或者老師會(huì)告訴人們算法是非常非常重要以至于會(huì)不會(huì)算法就是你會(huì)不會(huì)編程的唯一標(biāo)準(zhǔn)。不過(guò)事實(shí)上并非如此。掌握算法固然是好,只是大部分程序并不需要高深的算法,而且招人的時(shí)候僅僅要求會(huì)算法的公司也是很少的(而且很難進(jìn))。我并不是學(xué)院派的人,所以雖然我本人也推崇學(xué)習(xí)算法,但并不推崇一開(kāi)始就學(xué)習(xí)算法。
剛開(kāi)始學(xué)編程的人總是不知道自己應(yīng)該從哪里入手。實(shí)際上這是一個(gè)相當(dāng)重要的問(wèn)題。在我看來(lái),學(xué)好變成有若干條件:
·興趣
·數(shù)學(xué)/英語(yǔ)
·財(cái)力
首先談一談興趣。那些為了生計(jì)而尋找捷徑學(xué)習(xí)編程的人并不
閱讀全文
posted @
2008-06-06 18:29 陳梓瀚(vczh)|
編輯 收藏
自我感覺(jué)良好系列代碼: GacUI
編程相關(guān)討論1000人群:
點(diǎn)擊進(jìn)入 IDE實(shí)驗(yàn)項(xiàng)目Release
提供下載!
Cppblog博客下載小程序:
點(diǎn)擊進(jìn)入 語(yǔ)法分析推薦書(shū)籍:
我推薦的書(shū):
《Parsing Techniques》,還有它的第二版(
part1.rar和
part2.rar)
編譯原理系列文章:
跟vczh看實(shí)例學(xué)編譯原理:系列文章
(零),
(一),
(二)。
*new* 如何開(kāi)發(fā)可配置語(yǔ)法分析器:系列文章
(一),
(二),
(三),
(三點(diǎn)五),
(四),
(五),
(六),(七)。
如何設(shè)計(jì)一門(mén)語(yǔ)言:系列文章
(一),
(二),
(三),
(四),
(五),
(六),
(七),
(八),
(九),
(十),
(十一),(十二)。 淺談面向?qū)ο笳Z(yǔ)言的類(lèi)型運(yùn)算。
如何手寫(xiě)語(yǔ)法分析器。
《構(gòu)造正則表達(dá)式引擎》和《構(gòu)造可配置詞法分析器》。
使用高階函數(shù)開(kāi)發(fā)語(yǔ)法分析器。
使用我寫(xiě)的庫(kù)開(kāi)發(fā)語(yǔ)法分析器系列文章: Vczh Library++語(yǔ)法分析器開(kāi)發(fā)指南。
Vczh Library++3.0 C++輕量級(jí)可配置語(yǔ)法分析器,系列文章
(一),
(二),
(三),
(四)。
C++輕量級(jí)可配置語(yǔ)法分析器。
開(kāi)發(fā)自己的IDE——Vczh Library++的IDE工程開(kāi)發(fā)歷程:
一,
二,
三,
四,
五,
六,
七,
八,
九,
十,
十一,
十二。
挖了坑卻沒(méi)空填上系列文章: 手把手教你寫(xiě)腳本引擎
(一),
(二),
(三),
(四),
(五)。Demo
(一)。
C++實(shí)用技巧:
(一),
(二),
(三),
(四)。
作品及代碼下載: JIT腳本引擎:CMinus 0.1版開(kāi)放下載 Vczh Library++ 2.0 GUI Framework 預(yù)覽版代碼以及示例程序 Vczh Free Script 2.0 beta發(fā)布
posted @
2008-06-05 09:36 陳梓瀚(vczh)|
編輯 收藏