2017年11月27日 星期一

用C# 寫小遊戲: 模擬重力及封閉環境的物體運動 完整程式碼 (Full Source Code)

這個小遊戲模擬一個小方塊在封閉環境中的運動情況,考慮了初速度,重力加速度,反彈,摩擦力等物理特性,所以看起來更為真實。(在視窗中任一點按下滑鼠,方塊會以特定初速,沿著特定方向運動)



2017年11月21日 星期二

用C# 寫經典遊戲: 記憶卡牌遊戲(Memory Game) 完整程式碼 (Full Source Code)

記憶卡牌遊戲(Memory Game) 是規則簡單,又容易撰寫的小程式,大人小孩都愛玩。
(程式中用到的圖形版權屬於動畫電影:Strange Magic 仲夏夜魔法,由迪士尼公司旗下的盧卡斯電影製作)。



2017年11月13日 星期一

用C# 寫經典遊戲: TETRIS 俄羅斯方塊(魔術方塊) 完整程式碼 (Full Source Code)

       
        用C#寫出經典遊戲:俄羅方塊(又名魔術方塊,TETRIS)?乍聽之下,好想頗複雜,但是實際上,你只要會幾個簡單的語法,就可以順利的把它實做出來。


 
先來看看執行的情況 !!!



  如果你真的很有興趣,想要自己動手做,那麼就 ...
下載完整程式碼 (download full source code)

2017年9月14日 星期四

蘇黎士投機定律 (The Zurich Axioms by Max Gunther) 讀書筆記

1. 憂慮不是心理疾病,而是健康的徵兆。如果你不擔憂,那就是你冒的險不夠。
     1-1. 始終要下有意義的賭注。
     1-2. 避免過份分散風險。

2. 盡早獲利了結。   
    2-1. 預先決定投機賺多少,目標達成後,立即獲利了結。

3. 船開始下沉時,不要禱告,趕快脫身。
   3-1. 欣然接受小損失,儘管歷經多次失敗,但要設法一次扳回來。

4. 人類的行為根本不能預測,不要相信任何未卜先知。

5. 出現條理之前的混論並不危險。
    5-1. 當心歷史會重演的心理陷阱。
    5-2. 謹防圖表分析的幻覺。
    5-3. 勿輕易論斷因果關係。
    5-4. 勿犯賭徒的荒謬心理。

6. 避免紮跟,它妨礙靈活性。
    6-1. 不要因為意氣或念舊,而駐足於已經沒有希望的投資活動。
    6-2. 如果要更吸引人的機會橫在前面,要毫不遲疑脫開原來的樊籠。

7. 可以解釋的預感或直覺是值得信賴的。
    7-1. 絕對不要把希望和預感混為一談。

8. 上帝創造世界的計畫中,未必包括使你發財。
    8-1. 占星術要是靈的話,占星學家早都發了。
    8-2. 不要過度迷信,如果你能淡然處之,也可以享受到一些樂趣。

9. 預期最佳況會發生就是樂觀,信心則是知道如和處理最壞情況,決不要因為樂觀而採取投       機活動。

10. 請藐視多數人的意見,因為他們可能是錯的。
      10-1. 不要追逐風潮。沒有人進場的時候,往往就是買進的時機。

11. 如果第一次沒賺到錢,忘掉他,重新再來。
      11-1. 決不要用向下承接的攤平法,挽救沒有希望的投機。

12. 長期計畫引起的危機是,它讓你認為未來是可以控制的,永遠不要為自己或讓別人為你制        定長期計畫。
       12-1. 避開長期計畫。

2017年5月12日 星期五

科幻小說"三體(The Three-Body Problem)" (劉慈欣 著,2015年雨果獎得主) 讀書心得

     


      "三體" 這本小說的作者,是大陸最炙手可熱的科幻作家-劉慈欣,本書榮獲2014年『星雲獎』提名,並於2015年獲得『雨果獎』最佳長篇小說的殊榮,也是華人圈第一次得到這個榮譽,"三體"被前美國總統歐巴馬,臉書創辦人祖克柏列為閱讀書單,除此之外,版權還被美國好萊塢買下,準備拍成電影。

        本小說的書名"三體",源自於書中外星人的故鄉"半人馬座alpha星系",一個三合星系,也就是由三個恆星構成的系統,而擁有高度科技文明的的外星人,就居住在這星系中的一個行星,雖然已經擁有極其高度的文明,卻被不穩定的生存條件所困擾,氣候有時溫度極為溫和(只有一個太陽),有時卻是黑暗冰凍(沒有太陽)和猛爆烈焰(兩個或三個太陽),歷經幾百次幾乎慘遭毀滅的輪迴之後,外星人決定離開如此惡劣的環境,移往一個氣候穩定的星球,而這個時候,從一個遠達4.2光年外的太陽系行星,傳來有文明存在的信號,又得知該行星的氣候非常溫和且穩定,這個個行星就是人類居住的地球...當外星人收到這樣的信號,會有什麼樣的反應呢? 和地球人交朋友?還是毀滅地球人呢?

          三體女主角"葉文潔",經歷過文化大革命,其父慘死於紅衛兵的批鬥,之後遭流放並輾轉進到中國當時名為"紅岸"的祕密機構,因一次機會,他利用機構內的超大型發射器,以太陽為放大器,對全宇宙進行廣播,八年多以後,獲得了外星人的回應,由時間來推算,這極有可能是從半人馬座alpha星系裡的外星文明所傳來,但是首先接收到訊號的外星人卻警告葉文潔不要再次傳遞訊號,更不能告知其他外星文明地球的所在位置,否則很可能會遭致毀滅的命運,而在葉文潔經歷過一連串無情的打擊,對人性徹底失望之際,她決定不再留戀整個人類社會,於是和其黨羽繼續和外星人聯繫並提供情報,而外星人在了解人類的狀況後,憑其高超的科技,傳送了僅有質子大小的智慧微機械:智子,對人類科技進行封鎖和監控其所有活動,同時也派出龐大的星際艦隊以光速的百分之一速度,朝地球進行侵略行動,當然,地球人不可能坐以待斃,據估算,外星人到達地球,還需420年的時間,於是整個地球世界都動員起來,進行跨國合作,期望能找到有效的辦法,以抵禦外星人的入侵‧‧‧

2016年12月10日 星期六

股市各項指標及其計算方式

1. K 線: 分為陽線、陰線、中立線三種,以日K為例,當該日收盤價大於開盤價,則為陽線,反之則為陰線,若開盤價等於收盤價,就是中立線。陽線和陰線分為實體和影線,實體是開盤和收盤價的價差,上影線則是最高價和實體上緣的價差,下影線是最低價和實體下緣的價差。另外,常見的K線5分K,10分K,30分K,週K,月K等,道理一樣,皆是取該時段 "開始","結束","最高"和"最低" 繪製而成。



2. 移動平均線 MA(Moving Average, MA,又稱"均線"):
 
     a) 簡單移動平均線(Simple Moving Average): n日均線即表示是最近n日價格的算術平均值:
         SMAn = (P(1)+P(2)+...+P(n))/n
         假使某日的n日SMA 為 SMA(t0, n) 則次日的n日SMA為
         SMA(t1,n) = SMA(t0,n)- P(1)/n + P(n+1)/n
   
      b) 指數移動平均值(exponential Moving Average, EMA o EWMA)
          a=2/(N+1),  若N=19, a=0.1
          S(t)= a*Y(t) + (1-a)*S(t-1)
         
 
3. 隨機指標(Stochastic Oscillator, KD指標):
     RSV (Raw Stochastic Value: 未成熟隨機值)
     RSV = (Cn-Ln)/(Hn-Ln) * 100%
     (n 為交易期間,一般定為9日,Cn為第n日之收盤價,Ln為n日內最低價,Hn為n日內最高價)
 
      K(n) = a*RSV + (1-a)*K(n-1)
      D(n) = a*Kn    + (1-a)*D(n-1)
      (a 一般定為 1/3, 若無前一日K,D值,則以50%代替)

      K值為靈敏平均值,D值為遲鈍平均值,若K>D則表示處於漲勢,否則就是跌勢,K、D值介於0%~100%之間,80%以上為買超區(多頭趨勢),20%以下為賣超區(空頭趨勢)。

4.乖離率(Bias Ration, BIAS):
   nBias = (Close -MAn)/MAn * 100%

   nBias: n日乖離率
  Close: 當日收盤價
  MAn: n日移動平均價,n 一般定為3日和6日

 5.威廉指標(Williams %R):
    W%R = (Hn-Cn)/(Hn-Ln)

    n: 交易期間,一般定為14日
    Cn: 最新收盤價
    Hn: n日內最高價
    Ln: n日內最低價






2016年7月25日 星期一

畢氏定理證明(幾何數學)~~~

        相信大家對畢氏定理都不陌生,也都知道任意直角三角形中:"斜邊平方=其餘兩邊的平方和",但是你知道為什麼會這樣嗎?
         
         這個定理對我來說是再熟悉不過了,但是有一天我女兒問我如何證明時,我也花了一些時間才找出答案,如果你也有興趣,那就先不要看答案,自己先試試看。

        我常跟我女兒說,解數學題目的樂趣在於"解不出來",如果一下子就看出答案的話,那就一點意思都沒有了~~~呵呵。

        如果你已經試過一段時間了˙(不管是否找出答案),那就來看看我的方法,當然啦,方法不只一種,"不管是黑貓還是白貓,只要抓得到老鼠的貓就是好貓",可以解出問題的解法,就是好方法。


ABC為直角三角形,想當然爾,c^2=a^2+b^2,但是如何證明呢?

以AC為一邊長,做一個正方形AEDC,再以BC和BA延長線為兩邊做一個正方形BFHG(使GH通過D,HF通過E),OK,此時你可以看出三角形BAC=三角形AEF=三角形HDE=三角形GCD(因為其斜邊都相等,而且三個角也相等)。那麼
                             
正方形AEDC(紅框)的面積=正方形BFHG(綠框)-4個三角形面積

所以,c^2 = (a+b)^2 - 4*(a*b/2)
化簡    c^2 = a^2+b^2+2ab - 2ab 
 最後   c^2 = a^2+b^2
證明完畢! 夠簡單吧~~~~~

曾經聽過一首打油詩: "人生幾何又幾何,學了幾何又幾何? 幾何學了幾何用? 不學幾何奈我何?"  哈哈哈~蠻好玩的,其實數學沒想像中困難啦,只要肯花點時間了解,其實也可以找出其中樂趣的。

2016年7月20日 星期三

漫談數學動動腦

漫談數學動動腦
最近通訊軟體line流行貼出數學題目,讓大家動動腦筋:

動腦時間
 1  1  1 = 6
 2  2  2 = 6
 3  3  3 = 6
 4  4  4 = 6
 5  5  5 = 6
 6  6  6 = 6
 7  7  7 = 6
 8  8  8 = 6
 9  9  9 = 6
請加入運算符號,但不能加任何數字,以使等號成立。

然後有人解出一組答案如下:


當然,也有其他的答案,
例如4 4+4-√4=6 
例如6 6-6+6=6 
例如9√9×√9-√9=6 

其中應該是8最難,使用到立方根,但這是不合規則的。
這種遊戲題目只能加符號,不能加數字。立方根有用到3就不行。

是,有一位對數學很有興趣的高手想到了8的另一解法,用對數、對數哦!!!

(log8/log(log8/log√8))!

看得懂嗎 ? 解給你看:


然後,加上階層後  3!=3*2*1= 6

神解答呀! Orz......

2016年6月28日 星期二

LabVIEW: 聲音頻率分析

這個練習輸入一個聲音檔案,並做頻率分析。


執行結果
Block diagram



2016年6月21日 星期二

LabVIEW: 簡易秀圖程式(JPG)

這個程式可以選取系統中的JPG 檔案,並且秀在螢幕上:只要簡單幾個元件就可以達成,非常簡單。


執行結果


Block Diagram



LabVIEW: 用 Event Structure 畫出滑鼠軌跡(加強版)

延續 "LabVIEW: 用 Event Structure 畫出滑鼠軌跡"練習,
改成 "按下滑鼠左鍵拖曳,才畫出軌跡,按右鍵清除軌跡"。


執行結果

Block Diagram






2016年6月20日 星期一

LabVIEW: 用 Event Structure 畫出滑鼠軌跡

這個練習使用Event structure偵測並擷取滑鼠位置的座標,並且即時畫到XY Graph上。

Block Diagram


記得Timeout裡面,以要把資料連接起來


人機介面

LabVIEW: XY Graph + Formula Node 製作 愛心圖形

這個練習用XY Graph 和 Formula Node繪製愛心圖形。本程式使用兩段函式繪成:

y=sqrt(1-pow((abs(x)-1), 2));

y=acos(1-abs(x))-3.1415926;

我在[-2,2]區間取用401個點(頭尾都要),先畫上半部,再畫下半部。




執行結果


Block Diagram



2016年5月30日 星期一

LabVIEW: 聲音擷取+頻譜分析

   這個練習非常簡單: 從麥克風讀取一秒鐘的資料,然後輸出至圖表,並作頻譜分析。




人機介面&執行結果



Block digram



Acquire Sound的設定




Spectral Measurements的設定

2016年5月29日 星期日

Arduino + Labview: LM35溫度感測器,即時溫度監控

    利用Arduino開發板上的類比輸入,讀取溫度感測IC上的值,轉成實際溫度然後透過Serial port傳輸至電腦,而電腦這端則是利用LabView來接收,並做適當轉換後以圖表作為監控介面。

實驗結果:




     Arduino這邊的程式很簡單,先初始化serial port,然後再經由A0讀入LM35的感測值,要注意這個感測值是10位元(bits),根據LM35的datasheet得之,正確溫度的計算方式是每10mV(0.01V)增加一度C,也就是說0V代表0度C,0.1 V(10*0.01V)代表10度C,以此類推。因為每次讀回10bit的資料 n,我們要將n換成電壓值: (5V/1024)*n ,又每10mv 增加一度,所以實際溫度=(5V/1024)*n/10mV = (500/1024)*n

     算出實際溫度之後,利用Serial.print()函數將資料輸出至Serial port傳輸至電腦(我的系統是COM6),此時的資料是字串型式(每筆資料都是整數兩位數,小數兩位數,加上小數點共五個字元, EX:  28.93)。

void setup() 
{
  Serial.begin(9600); 
}

void loop()
{
  float x;
  int n;
  n = analogRead(0);
  x = 500.0 * n /1024.0;
  Serial.print(x, 2); 
  delay(500);
}

再來是電腦這邊的Labview程式,

Labview的Block diagram

Labview的人機介面


2016年5月3日 星期二

LabVIEW: 用手機透過網路,監控電腦的 Labview 程式

          如何用手機透過網路來監控遠端的Labview程式呢? 首先你必須先在電腦上寫一個Labview程式,然後宣告一個 shared variable並公開出來,然後在手機裝上data dashboard的app,再用這個app的indicator連上電腦的shared variable就可以了,概念其實很簡單,以下就是詳細步驟:


開一個專案,並且在專案中New一個 Variable


我New一個Variable,並命名為v1


記得要先存檔

存完檔之後再用滑鼠拖曳至你的程式中

我想把這個shared variable(v1)當成輸出,所以記得在v1上按滑鼠右鍵,再選擇Access Mode中的Write屬性


最後將程式執行起來,這個程式很簡單,就是用亂數產生數值再乘以10之後,再送往v1


手機端需要一個app,請先用google play搜尋 "data dashboard for labview",沒錯,就是最上面那一個,安裝她吧!


安裝完之後,執行這個app,會進入這個畫面,按中間那個"+Add"


再點選"Connect to shared variable..."


輸入Labview程式所在的電腦 ip address之後,按"Connect..."


Connect完成,手機螢幕會秀出可以連結的share variables,點選v1


系統顯示出V1為數值變數


接下來選擇indicator,我選右上角那個指針式的顯示器


數值範圍設定為0.0~10.0


顯示器出現後,點選右上角的"Run",進行動態連結~~~



執行結果!!!! ~~~~~~~是不是很酷呢?


LabVIEW: 神兵利器 Formula Node

        在LabView中,有一個Structure叫做Formula Node,這個結構可以讓你用C 語言定義變數和寫一段程式,相當於C的副程式,非常好用,對於熟悉C語言的人來說,簡直就是一項神兵利器,應該善加利用~~~~





Formula Node隱身在Structure項目中



Formula Node可以定義多個輸入和輸出,中間放置用C 語言寫的程式碼,非常直覺,也非常方便。



數學計算: "連加"(1加到10)和"階層(5!)",一下子就搞定了,是不是很容易呢?


LabVIEW: 透過網路遙控程式

        這個練習主要是透過網路連線來控制遠端的labview的程式,labview可以利用client-server的架構,啟動webserver的服務,接受來自遠端的請求,利用這樣的服務,我們就可以透過網頁來控制遠方的系統了,很方便。


程式執行結果


一個簡單程式


人機介面



選擇 Tools->Web Publishing Tool


選擇你的程式並勾選 "Request control when connection is established" 


這一頁,可以不修改


記住URL名稱,等一下開網頁連進來


設定完畢


開啟一個網頁,把剛剛的網址敲入,連線成功,並且可以即時控制這個labview程式。