Вершина внутри треугольника - обнаружение столкновений - PullRequest
0 голосов
/ 11 января 2011

Я пытаюсь проверить, находится ли вершина внутри треугольника, но у меня возникают проблемы при разработке функции CCW для 3D-среды.

для функции CCW для 2D среды будет выглядеть так:

//CCW calculates the cross produt


double CCW ( point A  , point B , point C ) {

return (B.x-A.x)  * (C.y-A.y) - (B.y-A.y) * (C.x-A.x);

}

//The other part is designed to work on 3D

typedef struct{

   double x;
   double y;
   double z;

}Point;

int inTriangle(point A, point B, point C, point D){

   Point E;

   E.x = (A.x + B.x + C.x)/3;

   E.y = (A.y + B.y + C.y)/3;

   E.z = (A.z + B.z + C.z)/3;


return ( CCW(A,B,D) * CCW (A,B,E) > 0 &&
         CCW(B,C,D) * CCW(B,C,E) > 0 &&
         CCW(A,C,D) * CCW(A,C,E) );

}

Ответы [ 3 ]

1 голос
/ 11 января 2011

Если вы хотите знать, лежит ли вершина непосредственно в плоскости треугольника и внутри его границ (т.е. на поверхности треугольника), вы можете проверить эти две вещи отдельно. Сначала проверьте, находится ли вершина в плоскости треугольника. Тогда вы сможете проецировать треугольник и вершину в 2D и использовать свой 2D метод.

Он также имеет то преимущество, что удаляет много вершин, поскольку они не находятся на плоскости треугольника, что является быстрым вычислением.

0 голосов
/ 12 января 2011

Чтобы проверить, находится ли точка на плоскости треугольника, вы можете написать уравнение плоскости треугольника.Это просто написать, используя 3 точки, и это линейно, поэтому вычисления будут очень быстрыми.

Чтобы понять, как написать уравнение, проверьте http://en.wikipedia.org/wiki/Plane_(geometry), это просто.

Дляопределить, находится ли точка на плоскости, просто проверить, что она удовлетворяет уравнению равнины с достаточной для вас точностью

0 голосов
/ 11 января 2011

Если точка находится на плоскости треугольника, вы можете использовать барицентрический метод, описанный здесь .

...