Pointable類(Leap::Pointable)

Pointable類(Leap::Pointable)

這個類記錄被檢測到的手指或者工具這些有端點的物體的物理特徵。通過Pointable::isFinger()函數來判斷Pointable對象是否代表手指,通過Pointable::isTool()函數來判斷Pointable對象是否代表工具。當一個檢測到的實體比典型的手指更細、更直、更長的時候,Leap Motion軟件會把其判斷爲工具。
爲了提供接觸仿真,Leap Motion軟件關聯了一個不固定的接觸平臺來適應用戶手指的移動和手勢。該設備把平臺上有目的的移動轉化爲潛在的接觸點,通過touchZone和touchDistance兩個值來反映接觸的狀態。
Pointable對象也可以是無效的,也就是說它有可能沒有包含有效的跟蹤數據,並不關聯一個實體,從Pointable構造函數創建的Pointable對象也是無效的,可以通過函數Pointable::isValid()函數來判定有效性。
enum Zone:通過定義一些值來反映Pointable對象關於接觸平臺的狀態。
ZONE_NONE=0表示該對象距離平臺很遠。
ZONE_HOVERING=1表示該對象很近,但並不是接觸。
ZONE_TOUCHING=2表示該對象已經穿透了平臺。
Vector direction():表示這個手指或工具指向的方向,返回一個向量,如下圖。

這裏寫圖片描述

用法:Leap::Vector pointingToward=pointable.direction();
Frame frame(): 表示與這個對象關聯的幀,返回相關聯的Frame對象(可能是無效的Frame對象)。
用法:Leap::Frame frameOfThisPointableObject=pointable.frame();
Hand hand(): 表示與這個對象關聯的手對象。
用法:Leap::Hand attachedHand=pointable.hand();
int32_t id(): 表示這個Pointable對象分配到的獨有的ID。當跟蹤的手指或工具保持可見的話,則在連續幀中這個值保持不變。如果跟蹤丟了(比如,一根手指被另一根手指遮擋,或者消失在Leap Motion的視線內),那在將來的幀中如果該軟件檢測到這個實體,則會分配一個新的ID。通過這個ID值和Frame::pointable()函數在將來的幀中找到這個Pointabe對象。ID值應該是從1到100的。
用法:int32_t theID=pointable.id();
bool isExtended(): 判斷這個Pointable對象是否可以姿勢擴展。如果一個手指可以直接從手擴展如同指向一樣,則認爲該手指是可以擴展的。如果是彎曲,向手指蜷縮,則認爲是不可擴展的。工具總是可以擴展的。如果可以擴展,則返回True。
用法: int extendedFingers = 0;
for (int f = 0; f < hand.fingers().count(); f++)
{
Leap::Finger finger = hand.fingers()[f];
if (finger.isExtended()) extendedFingers++;
}
bool isFinger(): 判斷是否要把這個Pointable對象歸爲手指一類。如果是,返回True。
說明:if (pointable.inTool())
Leap::Tool tool=Leap::Tool(pointable);
else
Leap::Finger finger=Leap::Finger(pointable);
bool isTool(): 判斷是否要把這個Pointable對象歸爲工具一類。如果是,返回True。
說明:if (pointable.inTool())
Leap::Tool tool=Leap::Tool(pointable);
else
Leap::Finger finger=Leap::Finger(pointable);
bool isValid(): 判斷這是否是個有效的Pointable對象。如果這個對象包含有效的跟蹤數據,則返回True。
float length(): 表示手指或工具估計的長度(毫米)。
float width(): 表示手指或工具估計的寬度(毫米)。
用法:float apparentlength=pointable.length();
bool operator!=(const Pointable &): 比較Pointable對象是否不相等。如果兩個對象都是有效的,在同一幀中有且僅有這兩個對象表示同樣的實體,則這兩個對象相等。
用法:thisPointable!=thatPointable;
bool operator==(const Pointable &): 比較Pointable對象是否相等。如果兩個對象都是有效的,在同一幀中有且僅有這兩個對象表示同樣的實體,則這兩個對象相等。
用法:thisPointable==thatPointable;
Pointable(): 構造一個Pointable對象。一個未初始化的對象被認爲是無效的,從一個Frame或Hand對象中得到有效的對象。
說明:Leap::Pointable pointable=frame.pointable().frontmost();
Vector stabilizedTipPosition(): 表示這個對象穩定的尖端位置。這個位置會落後於尖端位置一個不等的量,主要依靠移動的速率。返回的是這個對象修正的尖端位置,其中會有一些額外的平滑和穩定。
用法:Leap::Vector stabilizedPosition=pointable. stabilizedTipPosition();
float timeVisible(): 表示這個對象在Leap Motion控制器中保持可視化的時間(秒)。
用法:float lifetime=pointable.timeVisible();
Vector tipPosition(): 在Leap Motion座標系下的尖端位置。返回一個包含尖端位置座標的向量。
用法:Leap::Vector currentPosition=pointable. tipPosition();
Vector tipVelocity(): 在Leap Motion座標系下的尖端速率變化(毫米/秒)。返回一個包含尖端速率座標的向量。
用法:Leap::Vector currentPosition=pointable. tipPosition();
std::string toString(): 一個包含簡略描述該對象的字符串。
float touchDistance(): 表示一個與這個Pointable對象和接觸平臺之間距離成比例的值。這個接觸距離是一個在範圍-1到1的值,值1表示這個對象是在“盤旋”區域很遠的邊緣,值0表示這個對象正要進入這個接觸區域,值-1表示這個對象在接觸區域內,而之間的值則是和到平臺的距離成比例。因此,這個值是0.5表示這個對象一般進入了“盤旋”區域。如下圖可以很好理解。
Zone touchZone(): 表示這個對象當前接觸的區域。Leap Motion軟件是基於一個自適應於用戶手指移動和手勢的不固定的接觸平臺來計算接觸區域。當這個對象移動靠近自適應的接觸區域,則進入了“盤旋”區域;如果達到或通過這個區域,則進入了接觸區域。

這裏寫圖片描述

const Pointable & invalid(): 返回一個無效的Pointable對象。還是用來判斷對象是否有效。

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

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