gim_basic_geometry_operations.h File Reference

#include "gim_linear_math.h"
#include "gim_math.h"
Include dependency graph for gim_basic_geometry_operations.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define DISTANCE_PLANE_POINT(plane, point)   (VEC_DOT(plane,point) - plane[3])
#define EDGE_PLANE(e1, e2, n, plane)
 Calc a plane from an edge an a normal. plane is a vec4f.
#define PARALELENORMALS   0.000001f
#define PLANE_MINOR_AXES(plane, i0, i1)   VEC_MINOR_AXES(plane, i0, i1)
 Finds the 2 smallest cartesian coordinates of a plane normal.
#define PLANEDIREPSILON   0.0000001f
#define PROJECT_POINT_PLANE(point, plane, projected)
#define TRIANGLE_NORMAL(v1, v2, v3, n)
#define TRIANGLE_NORMAL_FAST(v1, v2, v3, n)
#define TRIANGLE_PLANE(v1, v2, v3, plane)
 plane is a vec4f
#define TRIANGLE_PLANE_FAST(v1, v2, v3, plane)
 plane is a vec4f

Enumerations

enum  eLINE_PLANE_INTERSECTION_TYPE {
  G_FRONT_PLANE_S1 = 0, G_FRONT_PLANE_S2, G_BACK_PLANE_S1, G_BACK_PLANE_S2,
  G_COLLIDE_PLANE_S1, G_COLLIDE_PLANE_S2
}
enum  ePLANE_INTERSECTION_TYPE { G_BACK_PLANE = 0, G_COLLIDE_PLANE, G_FRONT_PLANE }

Functions

template<typename T >
SIMD_FORCE_INLINE bool BOX_AXIS_INTERSECT (T pos, T dir, T bmin, T bmax, T &tfirst, T &tlast)
 Line box intersection in one dimension.
template<typename CLASS_POINT >
SIMD_FORCE_INLINE void CLOSEST_POINT_ON_SEGMENT (CLASS_POINT &cp, const CLASS_POINT &v, const CLASS_POINT &e1, const CLASS_POINT &e2)
template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE bool INTERSECT_PLANES (const CLASS_PLANE &p1, const CLASS_PLANE &p2, CLASS_POINT &p, CLASS_POINT &d)
 Returns the Ray on which 2 planes intersect if they do. Written by Rodrigo Hernandez on ODE convex collision.
template<typename T , typename CLASS_POINT >
SIMD_FORCE_INLINE bool LINE_INTERSECTION_PARAMS (const CLASS_POINT &dir1, CLASS_POINT &point1, const CLASS_POINT &dir2, CLASS_POINT &point2, T &t1, T &t2)
 Finds the line params where these lines intersect.
template<typename T , typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE GUINT LINE_PLANE_COLLISION (const CLASS_PLANE &plane, const CLASS_POINT &vDir, const CLASS_POINT &vPoint, CLASS_POINT &pout, T &tparam, T tmin, T tmax)
 line collision
template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE void PLANE_CLIP_SEGMENT (const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped)
template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE
eLINE_PLANE_INTERSECTION_TYPE 
PLANE_CLIP_SEGMENT2 (const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped)
 Confirms if the plane intersect the edge or nor.
template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE
eLINE_PLANE_INTERSECTION_TYPE 
PLANE_CLIP_SEGMENT_CLOSEST (const CLASS_POINT &s1, const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped1, CLASS_POINT &clipped2)
 Confirms if the plane intersect the edge or not.
template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE bool POINT_IN_HULL (const CLASS_POINT &point, const CLASS_PLANE *planes, GUINT plane_count)
 Verifies if a point is in the plane hull.
template<typename T , typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE bool RAY_PLANE_COLLISION (const CLASS_PLANE &plane, const CLASS_POINT &vDir, const CLASS_POINT &vPoint, CLASS_POINT &pout, T &tparam)
 Ray plane collision in one way.
template<typename CLASS_POINT >
SIMD_FORCE_INLINE void SEGMENT_COLLISION (const CLASS_POINT &vA1, const CLASS_POINT &vA2, const CLASS_POINT &vB1, const CLASS_POINT &vB2, CLASS_POINT &vPointA, CLASS_POINT &vPointB)
 Find closest points on segments.
template<typename T >
SIMD_FORCE_INLINE void SORT_3_INDICES (const T *values, GUINT *order_indices)
 Sorts 3 componets.

Detailed Description

Author:
Francisco Len Nßjera type independant geometry routines

Definition in file gim_basic_geometry_operations.h.


Define Documentation

#define DISTANCE_PLANE_POINT ( plane,
point   )     (VEC_DOT(plane,point) - plane[3])

Definition at line 86 of file gim_basic_geometry_operations.h.

#define EDGE_PLANE ( e1,
e2,
n,
plane   ) 
Value:
{\
    vec3f _dif; \
    VEC_DIFF(_dif,e2,e1); \
    VEC_CROSS(plane,_dif,n); \
    VEC_NORMALIZE(plane); \
    plane[3] = VEC_DOT(e1,plane);\
}\

Calc a plane from an edge an a normal. plane is a vec4f.

Definition at line 78 of file gim_basic_geometry_operations.h.

#define PARALELENORMALS   0.000001f

Definition at line 46 of file gim_basic_geometry_operations.h.

#define PLANE_MINOR_AXES ( plane,
i0,
i1   )     VEC_MINOR_AXES(plane, i0, i1)

Finds the 2 smallest cartesian coordinates of a plane normal.

Definition at line 232 of file gim_basic_geometry_operations.h.

#define PLANEDIREPSILON   0.0000001f

Definition at line 45 of file gim_basic_geometry_operations.h.

#define PROJECT_POINT_PLANE ( point,
plane,
projected   ) 
Value:
{\
        GREAL _dis;\
        _dis = DISTANCE_PLANE_POINT(plane,point);\
        VEC_SCALE(projected,-_dis,plane);\
        VEC_SUM(projected,projected,point);     \
}\

Definition at line 88 of file gim_basic_geometry_operations.h.

#define TRIANGLE_NORMAL ( v1,
v2,
v3,
 ) 
Value:
{\
        vec3f _dif1,_dif2;\
    VEC_DIFF(_dif1,v2,v1);\
    VEC_DIFF(_dif2,v3,v1);\
    VEC_CROSS(n,_dif1,_dif2);\
    VEC_NORMALIZE(n);\
}\

Definition at line 49 of file gim_basic_geometry_operations.h.

#define TRIANGLE_NORMAL_FAST ( v1,
v2,
v3,
 ) 
Value:
{\
    vec3f _dif1,_dif2; \
    VEC_DIFF(_dif1,v2,v1); \
    VEC_DIFF(_dif2,v3,v1); \
    VEC_CROSS(n,_dif1,_dif2); \
}\

Definition at line 58 of file gim_basic_geometry_operations.h.

#define TRIANGLE_PLANE ( v1,
v2,
v3,
plane   ) 
Value:
{\
    TRIANGLE_NORMAL(v1,v2,v3,plane);\
    plane[3] = VEC_DOT(v1,plane);\
}\

plane is a vec4f

Definition at line 66 of file gim_basic_geometry_operations.h.

#define TRIANGLE_PLANE_FAST ( v1,
v2,
v3,
plane   ) 
Value:
{\
    TRIANGLE_NORMAL_FAST(v1,v2,v3,plane);\
    plane[3] = VEC_DOT(v1,plane);\
}\

plane is a vec4f

Definition at line 72 of file gim_basic_geometry_operations.h.


Enumeration Type Documentation

Enumerator:
G_FRONT_PLANE_S1 
G_FRONT_PLANE_S2 
G_BACK_PLANE_S1 
G_BACK_PLANE_S2 
G_COLLIDE_PLANE_S1 
G_COLLIDE_PLANE_S2 

Definition at line 129 of file gim_basic_geometry_operations.h.

Enumerator:
G_BACK_PLANE 
G_COLLIDE_PLANE 
G_FRONT_PLANE 

Definition at line 122 of file gim_basic_geometry_operations.h.


Function Documentation

template<typename T >
SIMD_FORCE_INLINE bool BOX_AXIS_INTERSECT ( pos,
dir,
bmin,
bmax,
T &  tfirst,
T &  tlast 
) [inline]

Line box intersection in one dimension.

Parameters:
pos Position of the ray
dir Projection of the Direction of the ray
bmin Minimum bound of the box
bmax Maximum bound of the box
tfirst the minimum projection. Assign to 0 at first.
tlast the maximum projection. Assign to INFINITY at first.
Returns:
true if there is an intersection.

Definition at line 498 of file gim_basic_geometry_operations.h.

template<typename CLASS_POINT >
SIMD_FORCE_INLINE void CLOSEST_POINT_ON_SEGMENT ( CLASS_POINT &  cp,
const CLASS_POINT &  v,
const CLASS_POINT &  e1,
const CLASS_POINT &  e2 
) [inline]

Finds the closest point(cp) to (v) on a segment (e1,e2)

Definition at line 338 of file gim_basic_geometry_operations.h.

template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE bool INTERSECT_PLANES ( const CLASS_PLANE &  p1,
const CLASS_PLANE &  p2,
CLASS_POINT &  p,
CLASS_POINT &  d 
) [inline]

Returns the Ray on which 2 planes intersect if they do. Written by Rodrigo Hernandez on ODE convex collision.

Parameters:
p1 Plane 1
p2 Plane 2
p Contains the origin of the ray upon returning if planes intersect
d Contains the direction of the ray upon returning if planes intersect
Returns:
true if the planes intersect, 0 if paralell.

Definition at line 313 of file gim_basic_geometry_operations.h.

template<typename T , typename CLASS_POINT >
SIMD_FORCE_INLINE bool LINE_INTERSECTION_PARAMS ( const CLASS_POINT &  dir1,
CLASS_POINT &  point1,
const CLASS_POINT &  dir2,
CLASS_POINT &  point2,
T &  t1,
T &  t2 
) [inline]

Finds the line params where these lines intersect.

Parameters:
dir1 Direction of line 1
point1 Point of line 1
dir2 Direction of line 2
point2 Point of line 2
t1 Result Parameter for line 1
t2 Result Parameter for line 2
dointersect 0 if the lines won't intersect, else 1

Definition at line 375 of file gim_basic_geometry_operations.h.

template<typename T , typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE GUINT LINE_PLANE_COLLISION ( const CLASS_PLANE &  plane,
const CLASS_POINT &  vDir,
const CLASS_POINT &  vPoint,
CLASS_POINT &  pout,
T &  tparam,
tmin,
tmax 
) [inline]

line collision

Returns:
-0 if the ray never intersects -1 if the ray collides in front -2 if the ray collides in back

Definition at line 267 of file gim_basic_geometry_operations.h.

template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE void PLANE_CLIP_SEGMENT ( const CLASS_POINT &  s1,
const CLASS_POINT &  s2,
const CLASS_PLANE &  plane,
CLASS_POINT &  clipped 
) [inline]

Definition at line 110 of file gim_basic_geometry_operations.h.

template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE eLINE_PLANE_INTERSECTION_TYPE PLANE_CLIP_SEGMENT2 ( const CLASS_POINT &  s1,
const CLASS_POINT &  s2,
const CLASS_PLANE &  plane,
CLASS_POINT &  clipped 
) [inline]

Confirms if the plane intersect the edge or nor.

intersection type must have the following values

  • 0 : Segment in front of plane, s1 closest
  • 1 : Segment in front of plane, s2 closest
  • 2 : Segment in back of plane, s1 closest
  • 3 : Segment in back of plane, s2 closest
  • 4 : Segment collides plane, s1 in back
  • 5 : Segment collides plane, s2 in back

Definition at line 153 of file gim_basic_geometry_operations.h.

template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE eLINE_PLANE_INTERSECTION_TYPE PLANE_CLIP_SEGMENT_CLOSEST ( const CLASS_POINT &  s1,
const CLASS_POINT &  s2,
const CLASS_PLANE &  plane,
CLASS_POINT &  clipped1,
CLASS_POINT &  clipped2 
) [inline]

Confirms if the plane intersect the edge or not.

clipped1 and clipped2 are the vertices behind the plane. clipped1 is the closest

intersection_type must have the following values

  • 0 : Segment in front of plane, s1 closest
  • 1 : Segment in front of plane, s2 closest
  • 2 : Segment in back of plane, s1 closest
  • 3 : Segment in back of plane, s2 closest
  • 4 : Segment collides plane, s1 in back
  • 5 : Segment collides plane, s2 in back

Definition at line 195 of file gim_basic_geometry_operations.h.

template<typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE bool POINT_IN_HULL ( const CLASS_POINT &  point,
const CLASS_PLANE *  planes,
GUINT  plane_count 
) [inline]

Verifies if a point is in the plane hull.

Definition at line 97 of file gim_basic_geometry_operations.h.

template<typename T , typename CLASS_POINT , typename CLASS_PLANE >
SIMD_FORCE_INLINE bool RAY_PLANE_COLLISION ( const CLASS_PLANE &  plane,
const CLASS_POINT &  vDir,
const CLASS_POINT &  vPoint,
CLASS_POINT &  pout,
T &  tparam 
) [inline]

Ray plane collision in one way.

Intersects plane in one way only. The ray must face the plane (normals must be in opossite directions).
It uses the PLANEDIREPSILON constant.

Definition at line 240 of file gim_basic_geometry_operations.h.

template<typename CLASS_POINT >
SIMD_FORCE_INLINE void SEGMENT_COLLISION ( const CLASS_POINT &  vA1,
const CLASS_POINT &  vA2,
const CLASS_POINT &  vB1,
const CLASS_POINT &  vB2,
CLASS_POINT &  vPointA,
CLASS_POINT &  vPointB 
) [inline]

Find closest points on segments.

Definition at line 399 of file gim_basic_geometry_operations.h.

template<typename T >
SIMD_FORCE_INLINE void SORT_3_INDICES ( const T *  values,
GUINT *  order_indices 
) [inline]

Sorts 3 componets.

Definition at line 516 of file gim_basic_geometry_operations.h.

 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines


bullet
Author(s): Erwin Coumans, ROS package maintained by Tully Foote
autogenerated on Fri Jan 11 10:10:57 2013