vgl_triangle_test.hxx
Go to the documentation of this file.
1 // This is core/vgl/vgl_triangle_test.hxx
2 #ifndef vgl_triangle_test_hxx_
3 #define vgl_triangle_test_hxx_
4 //:
5 // \file
6 // \author fsm
7 
8 #include "vgl_triangle_test.h"
9 
10 template <class T>
12  T x2, T y2,
13  T x3, T y3)
14 {
15  return x1*(y2-y3) - x2*(y1-y3) + x3*(y1-y2);
16 }
17 
18 template <class T>
19 bool vgl_triangle_test_inside(T x1, T y1,
20  T x2, T y2,
21  T x3, T y3,
22  T x , T y )
23 {
24  T det123 = vgl_triangle_test_discriminant(x1, y1, x2, y2, x3, y3);
25  T detA23 = vgl_triangle_test_discriminant( x, y, x2, y2, x3, y3);
26  T det1A3 = vgl_triangle_test_discriminant(x1, y1, x, y, x3, y3);
27  T det12A = vgl_triangle_test_discriminant(x1, y1, x2, y2, x, y);
28 
29  if (det123 > 0)
30  return detA23>=0 && det1A3>=0 && det12A>=0;
31 
32  else if (det123 < 0)
33  return detA23<=0 && det1A3<=0 && det12A<=0;
34 
35  else // det123 == 0 or NaN
36  // degenerate triangle. ignore for now.
37  return false;
38 }
39 
40 //----------------------------------------
41 
42 #undef VGL_TRIANGLE_TEST_INSTANTIATE
43 #define VGL_TRIANGLE_TEST_INSTANTIATE(T) \
44 template T vgl_triangle_test_discriminant(T, T, T, T, T, T); \
45 template bool vgl_triangle_test_inside(T, T, T, T, T, T, T, T)
46 
47 #endif // vgl_triangle_test_hxx_
bool vgl_triangle_test_inside(T x1, T y1, T x2, T y2, T x3, T y3, T x, T y)
Function returns true if (x, y) is inside, or on the boundary of triangle.
T vgl_triangle_test_discriminant(T x1, T y1, T x2, T y2, T x3, T y3)
Compute discriminant function.