2012年8月27日 星期一

復健-純思考 pt.1

禮拜天時想要把佑佶完成的進度弄到我的筆電上來跑,但是不知道少了什麼而無法跑程式,目前進度的程式也有debug的需求。白天在桃榮時突然想到個點子,就算佑佶寫的在我的筆電無法跑,我只要寫個程式建立出三維座標,那麼我就能夠在我的筆電上來想我們所需要的程式碼,也可以看看已經寫好的程式哪邊有邏輯上的錯誤並進行修正。
剛剛也找到了下面網址的程式碼 point3D
http://msdn.microsoft.com/zh-tw/library/system.windows.media.media3d.point3d(v=vs.100)
等到周末比較有空時就來試試看好了 : )

2012年8月26日 星期日

復健-角度偵測判定的想法與概念 pt.2

今天再來寫一下研究進度,因為paper開工後可能就放著進度紀錄不管了 :P

先前與學長討論用內積的方式做出角度判斷,在周六晚上已經成功弄出三維空間的向量了,今天下午找資料時發現一個很實用的程式碼Vector3D.AngleBetween,他可以讓我們直接做角度判斷,而不用很麻煩的寫內積公式來求cos再求acos

接下來的部分與佑佶共同討論,我只是負責記錄的。

所夾角度的判斷,這個問題解決後,我們今天下午討論時遇到的第一個問題是,如何夾出角度。應該說手舉起來後,我要相對於哪個向量來夾出我所要偵測的角度。








為了解決這問題,我想到讓手自然垂放這動作當作初始化的動作









也就是說,把手自然垂放時的向量當作vector1,手舉起來後的向量當作vector2,這樣就能夾出一個角度,於是佑佶想出了下面的判斷式
(PS: Z軸深度、X軸左右方向、Y軸上下高度,肩膀簡稱為肩,手肘簡稱為肘 )

if(肩x==肘x && 肩z==肘z && 肩y > 軸y)
{
    vector1;  //手自然垂放時的向量
    vector2;  //手舉起來時的向量
    AngleBetween(vector1, vector2 );  //求出兩向量所夾的角度
}

晚上實測後遇到的第一個問題就是向量跑不出來。經過討論後我們發現,現實生活中,肩x不會那麼剛好等於軸x,所以無法進入if 迴圈來產生向量,這個問題在設定誤差值後理論上應該能解決。

在討論時佑佶還有想到一個問題,就是在if迴圈裡所得到的角度,出了迴圈後就消失,經討論後,只要在外面設一個變數,讓這個變數儲存所得到的角度即可,原本的架構變為


double storage;
if(肩x==肘x && 肩z==肘z && 肩y > 軸y)
{
    vector1;  //手自然垂放時的向量
    vector2;  //手舉起來時的向量
    AngleBetween(vector1, vector2 );  //求出兩向量所夾的角度
    storage = AngleBetween;
}

這樣的話照理來說就能在離開if後繼續用所得到的夾角值,不過我有想到一個問題,這是簡單只存一個數值的時候,可是以後要存多個值的時候,可能要用到陣列用到指標,指標的部分我還需要加強,才可能弄得出多個數值的儲存吧我想。

2012年8月25日 星期六

復健-角度偵測判定的想法與概念 pt.1

本篇內容全都是與佑佶共同討論出的結果,我只是負責記錄的。

好久沒寫作研究的部落格了,今天寫的是這週跟佑佶討論的內容。
佑佶與物理治療師討論後決定用角度做為判斷復健動作是否標準,優點是可依復健者能力的不同,來輸入不同的角度,因為判定的方式從角度改為座標,理論上可以做到更精細的復健動作。
看了佑佶傳給我的資料,我決定先從肩關節內轉來構思如何做角度判定。

先從一個火柴人來思考的。讓火柴人的肩膀與手軸打直,使手軸與手臂成九十度,讓手臂往前轉180度(肩關節內轉),

這時我想到每個復健者的能力不同,手軸與手臂不可能每個人都能做到九十度,會有各種奇怪的形狀
所以我想到,藉由向量的概念,讓手軸與手臂視為不同方向的兩個向量,藉由這兩個向量來做出一平面

藉由旋轉平面所夾的角度來做角度判斷

判定的基準面與復健者的身軀平行,接著做出與身軀垂直的旋轉軸即可
這是我最初的想法,但是與佑佶討論後這方法實在有點太笨,與學長討論後改用內積公式做判定
在三維空間中做出兩向量,用反函數acos來求得角度
至於如何在三維空間中做出向量,以下是我孤狗找到的方式
http://msdn.microsoft.com/en-us/library/ms594925
期許這週能寫出來