LeapMotion开发(四)-- Hand模块下的所有Methods用法和说明(上篇)(C++SDK)

官方C++ SDK介绍地址:

https://developer.leapmotion.com/documentation/cpp/api/Leap.Hand.html#cppclass_leap_1_1_hand_1aa2c9cca797fde17bf7371451a297e608

 

本文是就着英文版官方说明给出了翻译以及自己的理解,Hand模块总共分为了两块,上文完成一半,下午把另一半发上来。

 

目录概览:

 

·        Hand()

·        arm() const

·        basis() const

·        confidence() const

·        direction() const

·        finger(int32_t id) const

·        fingers() const

·        frame() const

·        grabAngle() const

·        grabStrength() const

·        id() const

·        invalid()

·        isLeft() const

·        isRight() const

·        isValid() const

·        operator!=(const Hand &) const

·        operator==(const Hand &) const

·        palmNormal() const

·        palmPosition() const

·        palmVelocity() const

·        palmWidth() const

 

 

详细解释:

class Leap::Hand

 

获取一个手的对象:

 

Leap::HandList hands = frame.hands();

Leap::Hand firstHand =hands[0];

备注:hand()出来的可能是无效对象,当检测不出手的时候会拟合出一个,故而可以用用手isvalid()功能来判定是否是有效的。

Since

1.0

 

Hand()

创造一个Hand object.//Frame对象里获取有效Hand对象

Leap::HandleftmostHand = frame.hands().leftmost();

Since

1.0

 

 

Arm arm() const

 

返回定义的Arm类型的参数,如果看不到胳膊就根据人体解剖学估计出一个(估计是吹逼的,效果并没有那么好,233,实测性能并不好,但勉强可以用)

 

Leap::Handhand = frame.hands().frontmost();

Leap::Armarm = hand.arm();

Since

2.0.3

 

 

Matrix basis() const

 

以矩阵的形式返回hand的方向信息//左右手呈镜面关系

xAxis 小拇指的正方向

yAxis 手面向上的正方向

zAxis 手腕朝向的正方向

 

Leap::Matrixbasis = hand.basis();

Leap::VectorxBasis = basis.xBasis;

Leap::VectoryBasis = basis.yBasis;

Leap::VectorzBasis = basis.zBasis;

Since

2.0

 

 

float confidence() const

 

对一个手部姿态的确信程度(看来并不是无脑自信,哈哈哈)

 

float confidence= hand.confidence();

Since

2.0

 

 

Vector direction() const

 

返回手掌朝向的Vector,分为pitch,yaw和row。

 

float pitch = hand.direction().pitch();

float yaw = hand.direction().yaw();

float roll = hand.palmNormal().roll();

Since

1.0

 

Finger finger(int32_t id) const

 

从前一Frame里返回Finger类型的指定编号的手指对象,如果没有会返回一个invalidFinger对象

 

Leap::Finger fingerOnHandByID = hand.finger(fingerID);

Since

1.0

 

 

FingerList fingers() const

 

返回这个hand里所有的Finger对象并储存在FingerList里。

 

备注:用 PointableList::extended() 可以去除列表里non-extendedfinger对象

// hand is a Leap::Hand object

Leap::PointableListpointables= hand.pointables();// Both fingers and tools

Leap::FingerListfingers = hand.fingers();

Since

1.0

 

Frame frame() const

 

返回和Hand相关的Frame。如果不可获得就返回invalid类型的Frame对象

 

Leap::FrameframeForHand = hand.frame();

Since

1.0

 

 

float grabAngle() const

 

返回手掌抓握的紧张程度,数值在0-π之间,紧握为0,松开为π

//本质上其实就是算的四根手指的平均张开角度

 

Since

3.0

 

 

float grabStrength() const

 

落伍了落伍了!!废弃不用了。。。

 grabAngle() 替代。

Since

2.0

 

 

int32_t id() const

Hand对象绑定的ID,就算手消失了还是存在的

(然而它并没有Kinect那种消失再回来还能一定程度上匹配的功能,至少我测试的没有,甚至同一只手没超出范围还会跳变,摔墙!)

//下面代码用于发现未来一些frame里已知ID的手的甄别

Leap::HandknownHand = frame.hand(handID);

Since

1.0

 

 

bool isLeft() const

判断手是不是左手。。。

 

std::string handName = hand.isLeft()? "Left hand" : "Right hand";

Since

2.0

 

bool isRight() const

判断是不是右手

if(hand.isRight()){

    // .. Do righthanded stuff

}

Since

2.0

 

 

bool isValid() const

判断手对象里的数据是不是有效的鲁棒的。

if (hand.isValid()){

    //Process handdata...

}

Since

1.0

 

 

 

bool operator!=(const Hand &) const

比较两个Hand对象是不是同一Frame同一个手(估计是比较手的长短啊大小啊位置啊之类的)//黑人问号脸:我要这个何用???

thisHand != thatHand;

Since

1.0

 

 

bool operator==(const Hand &) const

和上面的类似

thisHand == thatHand;

Since

1.0

 

 

Vector palmNormal() const

指向手掌的Vector,搭配direction食用风味更佳

float pitch = hand.direction().pitch();

float yaw = hand.direction().yaw();

float roll = hand.palmNormal().roll();

Since

1.0

 

Vector palmPosition() const

返回手腕重心点在LeapMotion坐标系里毫米单位的坐标

Leap::VectorhandCenter = hand.palmPosition();

Since

1.0

 

Vector palmVelocity() const

返回手掌的移动速度,单位:millimeters/second.

Leap::VectorhandSpeed = hand.palmVelocity();

Since

1.0

 

float palmWidth() const

当手面平整时估计手掌的宽度。单位是毫米

float handWidth = hand.palmWidth();

Since

2.0

 



第一部分先到这里了,剩下的下午翻译完再发。


最后祝大家开发LeapMotion愉快~


你可能感兴趣的:(C++,sdk,methods,Leap,LeapMotion)