2009-11-19 6 views
1

J'ai un point p et 2 segments de ligne dans un plan 2D. Le point p est un point de vue d'où la caméra regarde vers les segments de ligne. Je veux vérifier si le segment de ligne 1 est partiellement ou complètement caché derrière la ligne 2, en regardant à partir du point P.Segments de ligne d'un point

+0

Comment sont définies vos lignes? Equation (ax + by + c = 0), ou co-ordonnée ((x1, y1) - (x2, y2))? – Artelius

+0

Ses coordonnées. – Zinx

Répondre

1

Je pense que la question est de savoir si la deuxième ligne est "masquée" par la première ligne. Supposons que votre point de caméra soit C et que vos segments soient A1, A2 et B1, B2.

Je calculerais les produits croisés CA1xCB1 et CA2xCB2. Le signe vous donne si le point si le point B1 est sur la gauche ou la droite de la ligne CA1. Cela dépend de la façon dont vos triangles CA1A2 et CB1B2 sont orientés (ils doivent être orientés de la même façon, ils ont plusieurs façons de le faire).

Vous pouvez ensuite utiliser le signe pour savoir si vous êtes dans les cas suivants:

  • CA1xCB1 est négatif ou CA2xCB2 est positif, partiellement visible
  • le contraire, alors caché.

Vous pouvez également calculer CA1xCB2 et CA2xCB1 pour avoir des cas à grain fin.

+0

Oui, il s'agit essentiellement de tester s'il existe un axe de séparation entre les deux points dans l1 et les deux dans l2. –

1

La réponse de slurdge est un bon début, mais c'est un peu plus compliqué que ça.

Si le segment de ligne 2 est plus proche de C que le segment de ligne 1, il peut toujours être visible, par ex.

A1-------A2 

    B1-B2 


    C 

Ici B1 et B2 sont "dans" le secteur A1A2, mais ne sont pas cachés.

la plus difficile de travailler est si B1 est « entre » A1 et A2, mais plus proche de la caméra, tandis que B2 est « pas entre » A1 et A2, mais plus loin de la caméra:

   B2 

A1-----A2 
B1 


    C 

B1B2 pourrait couper le bord du segment de ligne, rendant ainsi une petite partie de B1B2 cachée (ou peut-être pas!). Je pense que vous devriez trouver l'intersection de A1A2 et B1B2 pour vérifier si cela se produit réellement.

Questions connexes