Bone類(Leap::Bone)

Bone類(Leap::Bone)

這個類代表一個跟蹤的骨頭。所有的手指都包含4根骨頭,構成了手指的結構。需要從一個Finger對象中得到有效的Bone對象。骨頭從基部到頂端有序排列,索引從0到3。注意,大拇指是沒有基部的掌骨的,因此包含一個有效的0長度的骨頭。Bone對象也可以是無效的,可以用Bone::isValid()函數來測試有效性。
enum Type: 表示骨頭名稱的枚舉。如下圖。
TYPE_METACARPAL = 0表示與手腕相連的掌骨;
TYPE_PROXIMAL = 1表示與手掌相連的近節指骨。
TYPE_INTERMEDIATE = 2表示頂部和基部之間的中節指骨;
TYPE_DISTAL = 3表示手指頂部的遠節指骨。

這裏寫圖片描述

Matrix basis(): 表示這個Bone的標準正交基向量,作爲基矩陣輸出。基向量指定了一個骨頭的方向,定義如下:
xBasis垂直於骨頭的縱軸,通過手指外側離開是指。
yBasis垂直於骨頭的縱軸,離開手指的頂部和底部。上面是正方向。
zBasis與骨頭的縱軸平行,朝着手指的方向是正方向。
如果用的是右手,所以要用右手定則,左手就要用左手定則。因此,x-Basis的正方向是右手朝右,左手朝左,可以通過在z軸基向量上乘以-1把右手定則轉化爲左手定則。可以通過基向量來衡量複雜的手指姿態和骨骼動畫。注意,把基向量直接轉化爲四元數表示在數學上並不是有效的,如果要用四元數,要從旋轉矩陣中創建而不是直接從基向量轉化。
用法:Leap::Matrix basis=bone.basis();
Leap::Vector xBasis=basis.xBasis;
Leap::Vector yBasis=basis.yBasis;
Leap::Vector zBasis=basis.zBasis;
Bone(): 構造一個無效的bone對象。從Finger對象中得到Bone對象。
Vector center(): 表示骨頭的中點。
用法:Leap::Vector middle=bone.center();
Vector direction(): 表示骨頭由基部到頂部歸一化了的方向。
用法:Leap::Bone bone=finger.bone(Leap::Bone::TYPE_DISTAL);
Leap::Vector distalDirection=bone.basis().yBasis;
bool isValid(): 判斷這是否是個有效的Bone對象。如果這個對象包含有效的跟蹤數據,則返回True。
float length(): 表示骨頭的估計長度(毫米)。
用法:float length=bone.length();
Vector nextJoint(): 表示骨頭的末端,最接近於手指的頂部。在解剖學方面,這是骨頭的末端。返回的是包含下一個關節位置座標的向量。
用法:Leap::Vector boneEnd=bone.nextJoint();
bool operator!=(const Bone &): 比較Bone對象是否不相等。如果兩個對象都是有效的,在同一幀中有且僅有這兩個對象表示同樣的實體,則這兩個對象相等。
用法:thisBone!=thatBone;
bool operator==(const Bone &): 比較Bone對象是否相等。如果兩個對象都是有效的,在同一幀中有且僅有這兩個對象表示同樣的實體,則這兩個對象相等。
用法:thisBone==thatBone;
Vector prevJoint(): 表示骨頭的始端,最接近於手腕。在解剖學方面,這是骨頭的近端。返回的是包含前一個關節位置座標的向量。
std::string toString(): 一個包含簡略描述該Bone對象的字符串。
用法:std::string description=bone.toString();
Type type(): 表示這個骨頭的名稱。返回的是Bone::Type枚舉類型中骨頭的類型。
float width(): 表示骨頭周圍肉的平均寬度。
用法:float width=bone.width();
const Bone & invalid(): 返回一個無效Bone對象。還是用來判斷對象是否有效。

譯自:https://developer.leapmotion.com/documentation/cpp/api/Leap.Bone.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章