2016-12-19 4 views
0

Je souhaite détecter si un doigt (ou un objet) pointe vers une certaine case (sur l'écran) comme indiqué dans l'image ci-dessous.Mappage des coordonnées pour interagir avec une boîte d'interaction 2D

Le code suivant peut être utilisé pour obtenir les coordonnées xy du doigt, mais quel est le moyen le plus simple de définir les cases d'interaction et de mapper les cordinates pour voir si elles correspondent à l'extérieur de l'écran. J'utilise la dernière version de leap motion SDK (3.2.0) sur Windows.

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)) 

La sortie ressemble alors à ceci:

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

Répondre

0

Tout d'abord, ce code ne vous dira pas où le doigt pointe. Il vous indique juste où le bout du doigt est situé dans l'espace - une distinction importante, mais peut-être subtile.

Puisque vous avez probablement vos boîtes définies en coordonnées d'écran, vous pouvez simplement vérifier chaque boîte pour voir si la position du bout du doigt est à l'intérieur. Quelque chose comme:

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 

Ceci suppose que vous avez une classe appropriée pour représenter une boîte 2D.

+0

salut, j'ai demandé un moyen facile de définir les boîtes et un moyen de résoudre ce problème! c'est déjà un meilleur moyen: 'Importer matplotlib.path comme chemin' ' box_a = path.Path ([(0,0), (0, 100), (100, 100), (100, 0) ]) ' ' isInA = box_a.contains_points ([(app_x, app_y)]) ' – theAlse