geom.h File Reference

A set of functions to perform basic algebraic operations on vectors, matrices and quaternions. More...

#include <libgeom/Export.h>
#include <stdio.h>

Namespaces

namespace  geom

Classes

struct  geom::ARRAY1D
class  geom::GeomException
struct  geom::ARRAY2D

Defines

#define M_PI   3.14159265358979323846
#define M_PI_2   1.57079632679489661923
#define EPSIL_ZERO   0.000001
#define EPSIL_BIG_ZERO   0.00001
#define VIJ(m, i, j, jmax)   (*((m) + (i)*(jmax) + (j)))
#define AI(array1d, line)   (*((array1d)->data + (line)))
#define AIJ(array2d, line, col)   (*((array2d)->data + (col) + (line) * (array2d)->cols))

Typedefs

typedef LIBGEOM_REAL geom::MatriX [4][4]
typedef LIBGEOM_REAL geom::MR3D [3][3]
typedef LIBGEOM_REAL geom::VT3D [3]
typedef LIBGEOM_REAL geom::VHOM [4]
typedef MatriX geom::MatriX_t
typedef MR3D geom::MR3D_t
typedef VT3D geom::VT3D_t
typedef VHOM geom::VHOM_t
typedef LIBGEOM_REAL geom::QUATERNION [4]

Enumerations

enum  { geom::ATTRACTION_NULLE = 0, geom::ATTRACTION_COMPLETE = 1, geom::ATTRACTION_PARTIELLE = 2 }
enum  { geom::GEOM_X_INDEX = 0, geom::GEOM_Y_INDEX = 1, geom::GEOM_Z_INDEX = 2, geom::GEOM_W_INDEX = 3 }

Functions

double geom::safe_acos (double f)
double geom::safe_asin (double f)
LIBGEOM_DLL_EXPORT void geom::matrix_idt_ (MatriX_t matrix)
LIBGEOM_DLL_EXPORT void geom::matrix_copy (const MatriX_t src, MatriX_t dst)
LIBGEOM_DLL_EXPORT void geom::matrix_compose (const MR3D_t mr, const VT3D_t vt, MatriX_t matrix)
LIBGEOM_DLL_EXPORT void geom::matrix_decompose (MR3D_t mr, VT3D_t vt, const MatriX_t matrix)
void geom::matrix_rotpart (MatriX_t In, MatriX_t Res)
LIBGEOM_DLL_EXPORT void geom::matrix_transpose (const MatriX_t a, MatriX_t at)
LIBGEOM_DLL_EXPORT void geom::matrix_mult_vhom (const MatriX_t a, const VHOM_t u, VHOM_t v)
LIBGEOM_DLL_EXPORT void geom::matrix_mult_vt3d (const MatriX_t a, const VT3D_t u, VT3D_t v)
LIBGEOM_DLL_EXPORT void geom::matrix_inverse (const MatriX_t matrix, MatriX_t matrix_inv)
LIBGEOM_DLL_EXPORT void geom::matrix_inverse_det (MatriX_t res, LIBGEOM_REAL determinant, const MatriX_t source)
LIBGEOM_DLL_EXPORT LIBGEOM_REAL geom::matrix_cofactor (const MatriX_t matrix, int i, int j)
LIBGEOM_DLL_EXPORT LIBGEOM_REAL geom::matrix_determinant (const MatriX_t matrix)
LIBGEOM_DLL_EXPORT void geom::matrix_mult (const MatriX_t ma, const MatriX_t mb, MatriX_t mc)
void geom::matrix_mult_opt (const MatriX ma, const MatriX mb, MatriX mc)
LIBGEOM_DLL_EXPORT bool geom::matrix_egalite (const MatriX_t a, const MatriX_t b)
LIBGEOM_DLL_EXPORT int geom::matrix_attraction_idt (MatriX_t a)
LIBGEOM_DLL_EXPORT int geom::matrix_proximite (const MatriX_t a, const MatriX_t b, LIBGEOM_REAL seuil_mr, LIBGEOM_REAL seuil_vt)
void geom::matrix_lerp (const MatriX_t a, const MatriX_t b, LIBGEOM_REAL u, MatriX result)
LIBGEOM_DLL_EXPORT bool geom::matrix_write (const MatriX_t m, FILE *f)
LIBGEOM_DLL_EXPORT bool geom::matrix_read (MatriX_t m, FILE *f)
LIBGEOM_DLL_EXPORT void geom::mr3d_idt_ (MR3D_t mr)
LIBGEOM_DLL_EXPORT void geom::mr3d_get (const MatriX_t matrix, MR3D_t a)
LIBGEOM_DLL_EXPORT void geom::mr3d_copy (const MR3D_t src, MR3D_t dst)
LIBGEOM_DLL_EXPORT void geom::mr3d_load (MatriX_t matrix, const MR3D_t a)
LIBGEOM_DLL_EXPORT void geom::mr3d_transpose (const MR3D_t a, MR3D_t at)
LIBGEOM_DLL_EXPORT void geom::mr3d_self_transpose (MR3D_t ma)
LIBGEOM_DLL_EXPORT void geom::mr3d_perm_circ (MR3D_t a, MR3D_t b)
LIBGEOM_DLL_EXPORT void geom::mr3d_opposite (MR3D_t a, MR3D_t b)
LIBGEOM_DLL_EXPORT void geom::mr3d_symtxy (MR3D_t a, MR3D_t b)
LIBGEOM_DLL_EXPORT void geom::mr3d_scale (const MR3D_t self, LIBGEOM_REAL scalar, MR3D_t res)
LIBGEOM_DLL_EXPORT void geom::mr3d_sub (const MR3D_t left, const MR3D_t right, MR3D_t res)
LIBGEOM_DLL_EXPORT void geom::mr3d_add (const MR3D_t left, const MR3D_t right, MR3D_t res)
LIBGEOM_DLL_EXPORT void geom::mr3d_mult (const MR3D_t a, const MR3D_t b, MR3D_t c)
LIBGEOM_DLL_EXPORT void geom::mr3d_mult_vt3d (const MR3D_t ma, const VT3D_t vu, VT3D_t vv)
LIBGEOM_DLL_EXPORT void geom::mr3d_from_axis_angle (MR3D_t mr, const VT3D_t axis)
LIBGEOM_DLL_EXPORT void geom::mr3d_to_axis_angle (VT3D_t axis, const MR3D_t mr)
LIBGEOM_DLL_EXPORT double geom::mr3d_axis_angle (const MR3D_t mr)
LIBGEOM_DLL_EXPORT bool geom::mr3d_egalite (const MR3D_t a, const MR3D_t b, LIBGEOM_REAL seuil_mr=EPSIL_MR3D)
LIBGEOM_DLL_EXPORT int geom::mr3d_attraction_idt (MR3D_t a, LIBGEOM_REAL seuil_mr)
LIBGEOM_DLL_EXPORT int geom::mr3d_attraction_ini (MR3D_t a, LIBGEOM_REAL seuil_mr)
LIBGEOM_DLL_EXPORT void geom::mr3d_conv_xyz_mob (const MR3D_t m, LIBGEOM_REAL *ang1, LIBGEOM_REAL *ang2, LIBGEOM_REAL *ang3)
LIBGEOM_DLL_EXPORT void geom::mr3d_conv_yxz_mob (const MR3D_t m, LIBGEOM_REAL *ang1, LIBGEOM_REAL *ang2, LIBGEOM_REAL *ang3)
void geom::mr3d_from_angle_seq_xyz (MR3D mx, LIBGEOM_REAL angX, LIBGEOM_REAL angY, LIBGEOM_REAL angZ)
void geom::mr3d_from_angle_seq_yxz (MR3D mx, LIBGEOM_REAL angY, LIBGEOM_REAL angX, LIBGEOM_REAL angZ)
void geom::mr3d_from_two_vectors (const VT3D_t a, const VT3D_t b, MR3D R)
LIBGEOM_DLL_EXPORT void geom::mr3d_reorthogonalize (MR3D_t R, int limit)
LIBGEOM_DLL_EXPORT bool geom::mr3d_write (const MR3D_t self, FILE *f)
LIBGEOM_DLL_EXPORT bool geom::mr3d_read (MR3D_t self, FILE *f)
LIBGEOM_DLL_EXPORT void geom::vt3d_get (const MatriX_t matrix, VT3D_t v)
LIBGEOM_DLL_EXPORT void geom::vt3d_load (MatriX_t matrix, const VT3D_t v)
LIBGEOM_DLL_EXPORT void geom::vt3d_copy (const VT3D_t src, VT3D_t dst)
LIBGEOM_DLL_EXPORT void geom::vt3d_set_null (VT3D_t v)
LIBGEOM_DLL_EXPORT bool geom::vt3d_normalize (const VT3D_t u, VT3D_t v)
LIBGEOM_DLL_EXPORT void geom::vt3d_cross (const VT3D_t u, const VT3D_t v, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_scale (const VT3D_t scale, const VT3D_t u, VT3D_t v)
LIBGEOM_DLL_EXPORT LIBGEOM_REAL geom::vt3d_get_dot (const VT3D_t u, const VT3D_t v)
LIBGEOM_DLL_EXPORT void geom::vt3d_vhom (const VT3D_t vt3d, VHOM_t vhom)
LIBGEOM_DLL_EXPORT void geom::vhom_vt3d (const VHOM_t vhom, VT3D_t vt3d)
LIBGEOM_DLL_EXPORT void geom::vt3d_let (LIBGEOM_REAL x, LIBGEOM_REAL y, LIBGEOM_REAL z, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_add (const VT3D_t u, const VT3D_t v, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_sub (const VT3D_t u, const VT3D_t v, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_mult (const VT3D_t u, const VT3D_t v, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_div (const VT3D_t u, const VT3D_t v, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_mults (const VT3D_t v, LIBGEOM_REAL s, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_divs (const VT3D_t v, LIBGEOM_REAL s, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_neg (const VT3D_t src, VT3D_t dest)
LIBGEOM_DLL_EXPORT LIBGEOM_REAL geom::vt3d_get_norm (const VT3D_t v)
LIBGEOM_DLL_EXPORT LIBGEOM_REAL geom::vt3d_get_norm2 (const VT3D_t v)
LIBGEOM_DLL_EXPORT LIBGEOM_REAL geom::vt3d_get_dist (const VT3D_t u, const VT3D_t v)
LIBGEOM_DLL_EXPORT LIBGEOM_REAL geom::vt3d_get_distptline (const VT3D_t p, const VT3D_t q, const VT3D_t n)
LIBGEOM_DLL_EXPORT LIBGEOM_REAL geom::vt3d_get_distptplane (const VT3D_t p, const VT3D_t q, const VT3D_t n)
LIBGEOM_DLL_EXPORT void geom::vt3d_rotv (const VT3D_t v, LIBGEOM_REAL sa, LIBGEOM_REAL ca, char k, VT3D_t w)
LIBGEOM_DLL_EXPORT void geom::vt3d_rotvect (const VT3D_t v, const VT3D_t c, VT3D_t k, LIBGEOM_REAL sa, LIBGEOM_REAL ca, VT3D_t w)
LIBGEOM_DLL_EXPORT bool geom::vt3d_egalite (const VT3D_t a, const VT3D_t b, LIBGEOM_REAL seuil_vt)
LIBGEOM_DLL_EXPORT int geom::vt3d_attraction_nul (VT3D_t a, LIBGEOM_REAL seuil_vt)
bool geom::vt3d_inside_polygon (VT3D point, VT3D *p, int N)
void geom::vt3d_lerp (const VT3D p1, const VT3D p2, LIBGEOM_REAL u, VT3D result)
void geom::vt3d_slerp (const VT3D p1, const VT3D p2, LIBGEOM_REAL u, VT3D result)
LIBGEOM_DLL_EXPORT bool geom::vt3d_write (const VT3D_t self, FILE *f)
LIBGEOM_DLL_EXPORT bool geom::vt3d_read (VT3D_t self, FILE *f)
void geom::vt3d_rotate_around_axis_angle (const VT3D axis_angle, const VT3D v_in, VT3D v_out)
double * geom::vtn_creation (int n)
void geom::vtn_destr (double *p)
void geom::vtn_nul (double *p, int n)
double geom::vtn_norm (const double *p, int n)
double geom::vtn_anorm (const double *p, int n)
void geom::vtn_copy (const double *psrc, double *pdst, int n)
void geom::vtn_add (const double *p1, const double *p2, double *pdst, int n)
void geom::vtn_sub (const double *p1, const double *p2, double *pdst, int n)
void geom::vtn_mults (const double *psrc, double *pdst, int n, double alpha)
double geom::vtn_dot (const double *p1, const double *p2, int n)
double geom::vtn_inv (const double *p, double *p_inv, int n)
double * geom::matmxn_creation (int lmax, int cmax)
void geom::matmxn_destr (double *p)
void geom::matmxn_copy (const double *a, double *b, int lmax, int cmax)
void geom::matmxn_nul (double *p, int lmax, int cmax)
void geom::matmxn_idt (double *p, int lmax, int cmax)
void geom::matmxn_mult (const double *a, const double *b, double *c, int imax, int jmax, int kmax)
void geom::matmxn_mult_vtn (const double *a, const double *b, double *c, int lmax, int cmax)
void geom::matmxn_write (double *d, int width, int height, FILE *f)
void geom::matmxn_transpose (const double *src, double *dest, int src_width, int src_height)
bool geom::matmxn_pseudo_inverse (double *m, int lmax, int cmax, double *mp)
void geom::matmxn_damped_least_square_inverse (double *j_inv, double *j_mat, int j_width, int j_height, double damping)
void geom::matmxn_svdcmp (double **a, int m, int n, double *w, double **v)
void geom::quat_set (QUATERNION self, LIBGEOM_REAL w, LIBGEOM_REAL x, LIBGEOM_REAL y, LIBGEOM_REAL z)
void geom::quat_set_null (QUATERNION self)
void geom::quat_set_unit (QUATERNION self)
void geom::quat_assign (QUATERNION self, const QUATERNION newQuat)
void geom::quat_copy (const QUATERNION src, QUATERNION dest)
void geom::quat_get_inv (const QUATERNION self, QUATERNION inv)
void geom::quat_get_conj (const QUATERNION self, QUATERNION conj)
LIBGEOM_REAL geom::quat_get_norm (const QUATERNION self)
LIBGEOM_REAL geom::quat_get_distance (const QUATERNION left, const QUATERNION right)
LIBGEOM_REAL geom::quat_get_sdistance (const QUATERNION left, const QUATERNION right)
void geom::quat_neg (QUATERNION self)
void geom::quat_normalize (QUATERNION self)
LIBGEOM_REAL geom::quat_dot (const QUATERNION left, const QUATERNION right)
void geom::quat_pow (const QUATERNION self, LIBGEOM_REAL alpha, QUATERNION result)
void geom::quat_exp (const QUATERNION self, QUATERNION result)
void geom::quat_ln (const QUATERNION self, QUATERNION result)
void geom::quat_mults (const QUATERNION self, LIBGEOM_REAL s, QUATERNION result)
void geom::quat_mult (const QUATERNION left, const QUATERNION right, QUATERNION result)
void geom::quat_sub (const QUATERNION left, const QUATERNION right, QUATERNION result)
void geom::quat_add (const QUATERNION left, const QUATERNION right, QUATERNION result)
void geom::quat_slerp (const QUATERNION left, const QUATERNION right, LIBGEOM_REAL u, QUATERNION result)
void geom::quat_dump (const QUATERNION self)
void geom::quat_from_axis (QUATERNION self, const VT3D axis, LIBGEOM_REAL angle)
void geom::quat_from_axis_angle (QUATERNION q, const VT3D axis_angle)
void geom::quat_to_axis_angle (const QUATERNION quat, VT3D axis)
void geom::quat_from_matrix (const MatriX m, QUATERNION quat)
void geom::quat_to_matrix (const QUATERNION self, MatriX result)
void geom::quat_from_mr3d (const MR3D m, QUATERNION quat)
void geom::quat_to_mr3d (const QUATERNION self, MR3D result)
void geom::quat_from_two_vectors (const VT3D v1, const VT3D v2, QUATERNION q)
void geom::quat_from_swing (QUATERNION q, const LIBGEOM_REAL swing[2])
void geom::quat_from_swing_and_twist (QUATERNION q, const LIBGEOM_REAL swing[2], LIBGEOM_REAL twist)
void geom::quat_to_swing_and_twist (const QUATERNION q, LIBGEOM_REAL swing[2], LIBGEOM_REAL *twist)
ARRAY1D * geom::array1d_creation (int lines)
void geom::array1d_destroy (ARRAY1D *array1d)
void geom::array1d_nul (ARRAY1D *array1d)
double geom::array1d_norm (ARRAY1D *array1d)
double geom::array1d_anorm (ARRAY1D *array1d)
void geom::array1d_copy (ARRAY1D *src, ARRAY1D *dest)
void geom::array1d_add (ARRAY1D *src_left, ARRAY1D *src_right, ARRAY1D *dest)
void geom::array1d_sub (ARRAY1D *src_left, ARRAY1D *src_right, ARRAY1D *dest)
void geom::array1d_mults (ARRAY1D *src, ARRAY1D *dest, double factor)
double geom::array1d_dot (ARRAY1D *src1, ARRAY1D *src2)
double geom::array1d_inv (ARRAY1D *src, ARRAY1D *dest)
void geom::array1d_write (ARRAY1D *a, FILE *file)
ARRAY2D * geom::array2d_creation (int lines, int cols)
void geom::array2d_destroy (ARRAY2D *array2d)
int geom::array2d_same_size (ARRAY2D *a, ARRAY2D *b)
void geom::array2d_nul (ARRAY2D *array2d)
void geom::array2d_idt (ARRAY2D *array2d)
void geom::array2d_copy (ARRAY2D *src, ARRAY2D *dest)
void geom::array2d_mult (ARRAY2D *a, ARRAY2D *b, ARRAY2D *dest)
void geom::array2d_add (ARRAY2D *a, ARRAY2D *b, ARRAY2D *dest)
void geom::array2d_sub (ARRAY2D *a, ARRAY2D *b, ARRAY2D *dest)
void geom::array2d_mult_array1d (ARRAY2D *array2d, ARRAY1D *array1d, ARRAY1D *dest)
void geom::array2d_scale (ARRAY2D *src, float scalar, ARRAY2D *dest)
void geom::array2d_pseudo_inverse (ARRAY2D *src, ARRAY2D *dest)
void geom::array2d_damped_least_square_inverse (ARRAY2D *j_inv, ARRAY2D *j_mat, double damping)
void geom::array2d_compute_LS_and_DLS_inverse (ARRAY2D *LS_inv, ARRAY2D *DLS_inv, ARRAY2D *j_mat, ARRAY1D *task, double damping)
void geom::array2d_write (ARRAY2D *a, FILE *file)
void geom::array2d_set_column (ARRAY2D *array2d, int column, double value)
void geom::array2d_set_line (ARRAY2D *array2d, int line, double value)
void geom::array2d_transpose (ARRAY2D *src, ARRAY2D *dest)
int geom::polynomial_solve_quadric (double c[3], double s[2])
int geom::polynomial_solve_cubic (double c[4], double s[3])
int geom::polynomial_solve_quartic (double c[5], double s[4])

Variables

LIBGEOM_DLL_EXPORT const float geom::EPSIL_MR3D
LIBGEOM_DLL_EXPORT const float geom::EPSIL_VT3D


Detailed Description

A set of functions to perform basic algebraic operations on vectors, matrices and quaternions.


Define Documentation

#define AI ( array1d,
line   )     (*((array1d)->data + (line)))

Macro to access an element in a ARRAY1D by its index.

#define AIJ ( array2d,
line,
col   )     (*((array2d)->data + (col) + (line) * (array2d)->cols))

Macro to access an element in a ARRAY2D by its two indices.

#define EPSIL_BIG_ZERO   0.00001

#define EPSIL_ZERO   0.000001

#define M_PI   3.14159265358979323846

#define M_PI_2   1.57079632679489661923

#define VIJ ( m,
i,
j,
jmax   )     (*((m) + (i)*(jmax) + (j)))


Generated on Thu Jan 18 10:06:08 2007 for vhdPLUS by  doxygen 1.5.1-p1