2012-06-21 3 views
0

Код, я использую в своем коде обнаружения столкновений заключается в следующем:«Is треугольник Прикосновение» код не дает правильных результатов

(примечание:. Vector3f является частью библиотеки LWJGL)

(Примечание2: Tri является класс, состоящий из трех Vector3fs LWJGL в. v1, v2 и v3.)

public Vector<Tri> getTrisTouching(Vector3f pos, float radius){ 
     Vector<Tri> tempVec = new Vector<Tri>(); 
     for(int i = 0; i < tris.size(); i++){ 
      Tri t = tris.get(i); 

      Vector3f one_to_point = new Vector3f(0,0,0); 
      Vector3f.sub(pos,t.v1,one_to_point);   //Storing vector A->P 

      Vector3f one_to_two = new Vector3f(0,0,0); 
      Vector3f.sub(t.v2,t.v1, one_to_two);   //Storing vector A->B 

      Vector3f one_to_three = new Vector3f(0,0,0); 
      Vector3f.sub(t.v3, t.v1, one_to_three);   //Storing vector A->C 

      float q1 = Vector3f.dot(one_to_point, one_to_two)/one_to_two.lengthSquared();   // The normalized "distance" from a to 
      float q2 = Vector3f.dot(one_to_point, one_to_three)/one_to_three.lengthSquared();   // The normalized "distance" from a to 



      if (q1 > 0 && q2 > 0 && q1 + q2 < 1){ 
       tempVec.add(t); 
      } 
     } 

     return tempVec; 
    } 

Мой вопрос, как я правильно ли точка в пространстве, прикоснувшись к одному из моих треугольников?

ответ

1

Чтобы проверить, находится ли ваша точка внутри треугольника, создайте луч с его началом в контрольной точке и протяните его до бесконечности. Хорошим легким был бы луч, который является горизонтальным (например, y постоянным, а x увеличивается до бесконечности. Затем подсчитывайте количество раз, когда оно пересекается с одним из ваших краев многоугольника. Нуль или четное число пересечений означает, что вы находитесь за пределами треугольника Хорошая вещь об этом работает не только для треугольников, но и для любого полигона.

http://erich.realtimerendering.com/ptinpoly/

0

Единственный способ помочь вам - предоставить вам эту ссылку. К сожалению, я не очень хорошо знаком с LWJGL Geometry, так что вы здесь. - Vector3f

Надеюсь, это поможет! Если это так, отметьте ответ, чтобы принять его.

Смежные вопросы