Monthly Archives: August 2009

今夏必看國片: 夏天協奏曲

夏天協奏曲DM 夏天協奏曲預告片 昨天去看了在金門拍攝的電影第二場首映會 “夏日協奏曲”,人多到沒地方坐,只好坐在走道上,這部電影真的非常好看,把金門拍得非常美,名為協奏曲的電影,在音樂上做得也非常好,背景的音樂都很能帶出情境來,女主角沙拉作曲和唱的曲子也都非常動聽,鋼琴也彈得非常棒,我個人對於這部片有很高的評價,很多人常常說要支持國片,在我個人看來,不是所有國片都值得支持,食之無味的爛片支持再多也沒有任何幫助,如果拍片的人沒有心,再多的支持也只是浪費而已,但這部片確實是有笑有淚的好片,可以感受到導演的用心,這樣用心的好電影值得大家的支持 官方部落格 女主角沙拉的部落格

Posted in Uncategorized, 中文文章 | Tagged , , , , , | 3 Comments

作品集更新 : 幾何圖形繪圖以及手繪辨

最近的一個案子終於算是結束了,簡單地介紹一下這個軟體,跨平臺的幾何圖形繪圖和手繪辨識的功能 可以用各種方式填色 不同的框線 每個物件都可以自由旋轉和變形以及位移 物件可以設定透明度 當然,這軟體是跨平臺的,這是在ubuntu下執行的畫面,原本當我在windows下寫完丟到ubuntu下執行,我猜想可能會遇到一些煩人的跨平台問題要解決,不過很順利地,一切就像在windows下一樣,wxPython看來真的是跨平臺的好選擇 接著是抓圖沒辦法展示的功能,手繪辨識和無限次數復原和重做,請看影片 手繪辨識是裡面最難寫的功能,讓我把我學過的數學都搬了出來,象皮擦的部份也是很複雜的運算,這整個軟體裡用到的幾乎都是線性代數的知識,我很自豪的一點就在於大部份我學過的東西都在實際應用上用得上

Posted in Python, 中文文章, 作品 | Tagged , , , , , , , | 6 Comments

用Python幫你進行代數運算 : Sympy

最近因為接到的Case,滿腦子中都是線性代數的東西,程式中有太多東西需要計算,以前學過的東西全都從腦子裡挖了出來,不過我通常都不背公式的,我所做的都是將當時走過的思路再走過一次,把公式重新導出來,因為公式是一個點,忘記就沒了,而思路是一條線,只要抓到了就可以得到同樣的結果 我還記得有一次,在PTT站上問一個微積分的式子是怎麼來的,因為我在書上看到他經過一個很奇怪的上下乘某個三角函數,式子就莫名奇妙的跑出來了,有個台大的學生很不以為然的回答,就是上下相乘那三角函數阿,當時讓我覺得挺無言的,這我當然也知道,看書也知道,問題是在於,如果沒有書跟你講,你是怎樣能想到這神來一筆,知道要上下乘這個函數? 所以公式的結果從來都不是重點,重點在於思路,只死記公式最後都會忘光光,但是能夠思考而走到公式這一步的話,就好像走過一條路,找到片段,又能找到終點,死記公式,就好像把你丟到一個定點,要你記住那裡長什麼樣子,一個是點,一個是一條路,當然是思路記得比較好 這種想法讓我到了應用時通常都能用上我所學到的,因為我知道那些東西從哪裡來的,即使忘記了也可以再導出來,但同時有些時候也讓我吃足了苦頭,還記得有一次考物理時,前面半節課我在導公式,後面半節用導出來的公式算,下場當然很慘,其實很多時候公式寫到一個地方,剩的就只剩整理,但是這過程卻很煩人、機械化,很容易一個正負號,一個看走眼就會讓後面的過程全部跟著錯掉,所以不得不在過程中每個符號小心的重寫一次,長久以來我一直在想,即使是整理也是有規則的,為什麼不能用電腦來算呢? 雖然我知道有matlab這類的東西,畢竟沒時間學,領域也不太一樣,不合胃口,直到前陣子在PTT的Python版上看見有人推薦一款Python的library : Sympy,他是一款Python寫的代數運算函式庫,舉個例子你寫出了一個式子,想知道它的導函數是什麼,你只要先將式子列出來,再用一個函數呼叫,他就可以把導函數算出來,這非常地合我喜好,我們現在就來介紹如何使用Sympy來幫你計算兩線在平面交一點的公式 兩線交一點 首先我們在平面上有P1和P2兩點,而從P1出發的是u向量,從P2出發的是v向量,我們想得知這兩條線在哪裡會交一點,就必須這麼算,我們設t和s為實數,我們可以找到一個等式P1 + su = P2 + tv,也就是P1以u的速度走s秒(秒只是幫助想像的假設),P2以v的速度走t秒,兩人會撞在一起,要導公式就要先找等式,這就是我們公式的等式,一開始我不知道是程式寫太多還怎樣,突然有點腦殘的想說,奇怪,這式子有兩個未知數s和t,一條式子算不出兩個未知數阿? 後來才突然想到,我忘了這是平面,所以在x分量和y分量上面我們各有一條這樣的等式,有了兩條等式,兩個未知數才可能有解 有了等式之後,嘿嘿,就是該交給電腦的時候了 from sympy import * p1x = Symbol(‘p1x’) p1y = Symbol(‘p1y’) p2x = Symbol(‘p2x’) p2y = Symbol(‘p2y’) ux = Symbol(‘ux’) uy = Symbol(‘uy’) vx … Continue reading

Posted in Python, 中文文章 | Tagged , , , , , , | 1 Comment

Python使用HGE引擎

大家肯定都知道在Python下面寫2D遊戲有個眾所階知的選擇就是pygame,雖然它簡單好寫,對於簡單的遊戲來說已經足夠,但是他有一個致命的缺點,就是速度太慢了,在pygame的背後是SDL,用純軟體畫圖的函式庫,既然為純軟體繪圖,遇上旋轉、半透明等等需求,更顯得吃力和不切實際,所以該怎麼辦才好呢? 答案是用Haaf’s Game Engine,它是一款用DirectX做為backend的Open source遊戲函式庫,我在先前的文章裡已經有做簡單的介紹,就不再重覆,那這函式庫和Python又有什麼關聯呢? 他是用C++寫的,Python沒辦法用,正因為這樣,我一直一來想幫他寫一個python的binding,我一直想如果Python也能用HGE寫起來一定很開心,我試著找了一下有沒有已經存在這樣的專案,有找到一個,但是居然是在萬惡的GNU授權下的,讓我百思不得其解,那專案的作者到底在想什麼? 想讓大家寫Open source的Game嗎? 我們都知道GNU是大名頂頂的病毒授權,任何程式使用了用GNU的函式庫都會被感染,代表你的主程式一樣得變成GNU的開源授權,我個人非常討厭打著自由名義但是卻有強烈的強迫性質的GNU授權,況且HGE的授權是非常寬鬆的 zlib/libpng License,實在想不透為什麼一個binding可以用超嚴格的GNU,不過那是那作者的自由,我也管不著,在不能接受那惡心的授權,加上我看了一下他的專案似乎好像也沒有很完整的進度,於是我還是決定自己開了一個新的專案 Python HGE 在這樣的情況下,我前些天抽空開了一個新的Open source專案: Python-HGE,把一些最核心的程式碼都用boost.python包裝給Python使用,最核心的部份完成度很高,剩下的需要我在未來有空慢慢補上,License是MIT,如果你問我為什麼選MIT,我想答案應該是商業用途一樣也可以,不像GNU那種假腥腥的自由,還有一個重點就是,我覺得麻省理工這名字聽起來很酷,讓我想起每次在Discovery看到的東西 效能問題 我照著原本HGE的Tutorial7的程式寫了一個Python的版本,這個範例的目的就是在展示HGE的效能,純C++的版本速度當然是很快,而Python的版本FPS掉了不少,一開始讓我覺得有點失望,讓我開始懷疑如果效能掉很多的話,那用Python寫HGE還有價值嗎? 後來仔細思考了一下,對於一般的2D遊戲來說,要像這demo整畫面跑來跑去的圖片加透明效果的情況實在不多,就算有也很難到這樣上千張的圖片,再者我都還沒進行最佳化、跑profile等等,而且雖說FPS掉不少,但是那是和C++數百的FPS比起來,在60以上其實都是可以接受的,加上我測試的這台電腦已經有點年代,對現代的電腦和GUP來說情況只會更好,在如此的考量之下,Python HGE還是有搞頭的 python版的tutorial 7截圖 這個demo可以在這裡下載 目前狀況 目前雖然核心部份已經高度完成,不過我還沒有把編出來的pyd釋放的打算,如果想嘗鮮的話可以直接從那個demo裡面找pyd出來用,又或著自己check out原始碼進行編譯 參與開發 如果有興趣的話,歡迎參與專案的開發,如同我上面所提到的,我用的是boost.python,一款基於C++的python binding函式庫,如果你熟悉boost.python的話當然是最好,就算沒有也沒關系,因為其實大部份工作都是剪下貼上之類的,可以參考我已經寫好的部份,有些函數回傳例如指標之類的東西需要特別處理,除此之外都只是很簡單無腦工作

Posted in C/C++, Python, 中文文章, 分享, 設計, 遊戲設計 | Tagged , , , , , , , , , | 4 Comments

經緯度轉換TWD97

最近因為專題上的需要,需要把經緯度轉成TWD97的座標,而在更早之前我寫的電力座標轉換程式,則是需要把TWD97的座標轉換成經緯度,今天我們來談談關於這些地理座標的轉換

Posted in 中文文章, 分享 | Tagged , , , , , , , | 15 Comments