2016-12-19 58 views
0

我想要检测手指(或任何对象)是否指向某个框(在屏幕上),如下图所示。映射坐标以与2D交互框交互

以下代码可用于获取手指的xy坐标,但定义交互框然后映射坐标以查看它是否与屏幕外部的任何框匹配,最简单的方法是什么?

我上Windows使用最新版本的leap motion SDK(3.2.0)的。然后

def on_frame(self, controller): 
    app_width = 800 
    app_height = 600 
    # Get the most recent frame and report some basic information 
    frame = controller.frame() 

    pointable = frame.pointables.frontmost 


    if pointable.is_valid: 
     iBox = frame.interaction_box 
     leapPoint = pointable.stabilized_tip_position 
     normalizedPoint = iBox.normalize_point(leapPoint, False) 

     app_x = normalizedPoint.x * app_width 
     app_y = (1 - normalizedPoint.y) * app_height 
     #The z-coordinate is not used 

     print ("X: " + str(app_x) + " Y: " + str(app_y)) 

输出看起来是这样的:

所有的
X: 467.883825302 Y: 120.019626617 
X: 487.480115891 Y: 141.106081009 
X: 505.537891388 Y: 164.418339729 
X: 522.712898254 Y: 189.527964592 
X: 539.482307434 Y: 213.160014153 
X: 556.220436096 Y: 233.744287491 
X: 573.109865189 Y: 253.145456314 

interaction area

回答

0

首先,该代码不会告诉你在手指指向。它只是告诉你指尖在空间中的位置 - 这是一个重要但可能微妙的区别。

既然你大概已经在屏幕坐标来定义你的盒子,你可以只检查每一个盒子,看看指尖位置内。例如:

def check_in_box(box, point): 
    if point.x > box.left and point.x < box.right 
     and point.y > box.top and point.y < box.bottom: 

     return True 

    else: 
     return False 

这里假定您有一个合适的类来表示2D盒子。

+0

嗨,我问一个简单的方法来定义框和解决此问题的方法! 这是一个更好的方法: 'import matplotlib.path as path' 'box_a = path.Path([(0,0),(0,100),(100,100),(100,0) ])'' = isInA box_a.contains_points([(app_x,app_y)])' – theAlse