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後繼續用所得到的夾角值,不過我有想到一個問題,這是簡單只存一個數值的時候,可是以後要存多個值的時候,可能要用到陣列用到指標,指標的部分我還需要加強,才可能弄得出多個數值的儲存吧我想。

沒有留言:

張貼留言