微动博客 >> 示例程序 >> C++ >> 方向划动

方向划动

Vidoo 2015-10-26
浏览次数164

微动可以识别用户手指在空间内的一次快速滑动,并判断出其划动的方向,并提供给用户这一属性,用户读取到slide的方向就能够或者自己刚才的挥动情况。
这种功能在一些动态交互程序中可以获得广泛的应用,试想在头戴头盔的虚拟场景中,微动捕捉到用户的一次划动手掌,在界面中相应地划一条相同方向的痕迹,一定会很有掌控整个场景的感觉。
具体的实现代码如下:

const sharpnow::Frame* frame = sdk.GetFrameInfo();
const sharpnow::Finger* finger;
sdk.RetrieveFrame(0);
frame = sdk.GetFrameInfo();
finger = sdk.GetFinger(frame->finger_focused,0);

在这个示例中,我们使用画图的方法,通过获取到的slide的方向,通过几个简单的算式,计算旋转的角度,继而通过一定的方法按照计算得来的角度绘制我们要的图片(例如可以通过旋转画布或者旋转控件的方法):
先用悬停来初始化画布:

	if(finger->stop==20){
		g1 = panel1->CreateGraphics();
		flag=1;
g1->Clear(Color::XXX); //用控件的底色完成擦除操作
}
//判断有slide动作发生
	if(finger->slide){
//…………………………………………………….
}
//判断划动的方向,计算正切角的角度
ang1=atan((finger->slide_dir.x/(-finger->slide_dir.y)));
//旋转之前定义的画布,并做相应的位移,使得画布不偏移
int a=w*(1-1.414* sin(ang1+45*3.14/180));
int b=w*(1-1.414*cos (ang1+45*3.14/180));
g1->RotateTransform(ang1*180/3.14);
g1->TranslateTransform(-a,b); 
g1->DrawImage(image,w,h); //w与h为画布的位移值